Метод, тикающий для каждого блока

Версия Minecraft
1.12.2
5,018
47
783
Привет всем. Такой вопрос: updateTick работает как то коряво, в связи с чем назрел вопрос - как сделать чтобы тики считались для блока от момента установки? У меня есть стаааарый-стаааарый код от Тимахи,но есть единственная проблема - он перестает работать, если перезайти в мир.
Если надо, могу его скинуть, скажете, что допилить надо.
А вообще, хотелось бы по современному, через блокстейты как нибудь.
 
5,018
47
783

Eifel

Модератор
1,623
78
608
Так там нету ничего сложного. Создаешь класс, наследуешь класс TileEntity, реализуешь методы которые скажут, переопределяешь метод onUpdate, и в нем пишешь все что тебе угодно, регаешь. А если посмотреть в класс тайла печки, то перед тобой откроется дивный мир, полон интересных возможностей
 
Последнее редактирование:
5,018
47
783
Не песок. Деревья перепиливаю.

А если посмотреть в класс тайла печки, то перед тобой откроется дивный мир, полон интересных возможностей
Я не раз туда глядел, и честно говоря, ничерта не понял. Как то однажды ты мне скидывал полный разбор кода, но почему то у меня в единую картинку, как это все работает, не сложилось.... Я не могу это визуализировать в голове, как это происходит, и потому не разбираюсь.
 
5,018
47
783
Ему вроде песок надо тикать.
с песком пока фиг с ним. Не так это важно. Разберусь чутка попозже, что за дисплей лист и куда хук сувать, как конь советовал, щас не в приоритете.
Щас через смену модели через блокстейт реализовано. Лагает вроде поменьше, чем если блок менять целиком.
 
5,018
47
783
Смотри. Имеется саженец.
Сажаешь саженец, он имеет stage_1 - тонкий ствол. Спустя определенное время, блокстейт должен сменится на stage_2 , а сверху себя поставить stage_1. И так далее по заранее запланированному сценарию роста с небольшой рандомностью
 
5,018
47
783
зачем нужен вот этот метод и что он делает? В смысле, что значит "получить мету из состояния"?
Java:
    public int getMetaFromState(IBlockState state)
    {
        return ((Integer)state.getValue(AGE)).intValue();
    }
Кстати да, почему то про кактус я забыл. Надо глянуть
 
5,018
47
783
так он криво работает. Всмысле, после перезахода в мир тикать перестает...
 
5,018
47
783
this.setTickRandomly(true);
Это?

А вот это что тогда?
world.scheduleBlockUpdate(pos, this, 1, 0);
И что означает вот такой цикл? Первый раз встречаю...

Java:
            for (i = 1; worldIn.getBlockState(pos.down(i)).getBlock() == this; ++i)
            {
                ;
            }
 

Icosider

Kotliner
Администратор
3,600
99
663
зачем нужен вот этот метод и что он делает? В смысле, что значит "получить мету из состояния"?
Java:
    public int getMetaFromState(IBlockState state)
    {
        return ((Integer)state.getValue(AGE)).intValue();
    }
Кстати да, почему то про кактус я забыл. Надо глянуть
Аля метадата с 1.7.10. У тебя 15 байт на каждый блок, соответственно, тебе в эти 15 нужно уложить. В данном методе ты должен "сжать" свою мету и в getStateFromMeta или как там, ты "расжимаешь" эти данные. Про побитовые операторы почитай. Полезно будет.

this.setTickRandomly(true);
Это?

А вот это что тогда?
world.scheduleBlockUpdate(pos, this, 1, 0);
И что означает вот такой цикл?

Java:
            for (i = 1; worldIn.getBlockState(pos.down(i)).getBlock() == this; ++i)
            {
                ;
            }
1. Да
2. Шедулер это некий апдейт по времени.
3. И что непонятно? Цикл на получение текущей высоты и последующий вывод.

Ты только учти то, что сетРандомТик будет рандомно вызывать обновление, хотя возможно тебе это и нужно.
 
5,018
47
783
Еще вопрос, уже не совсем в тему. Как реализовать лужи после дождя, без замены блока?
 
Сверху