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

Сообщения
4,871
Лучшие ответы
45
Реакции
671
Версия Minecraft
1.12.2
Привет всем. Такой вопрос: updateTick работает как то коряво, в связи с чем назрел вопрос - как сделать чтобы тики считались для блока от момента установки? У меня есть стаааарый-стаааарый код от Тимахи,но есть единственная проблема - он перестает работать, если перезайти в мир.
Если надо, могу его скинуть, скажете, что допилить надо.
А вообще, хотелось бы по современному, через блокстейты как нибудь.
 
Сообщения
2,484
Лучшие ответы
76
Реакции
367
Для этого есть тайлы
 
Сообщения
1,864
Лучшие ответы
50
Реакции
345
Обычный блок в майне не тикает, я об этом тебе уже говорил.
 
Сообщения
4,871
Лучшие ответы
45
Реакции
671
Сообщения
1,467
Лучшие ответы
66
Реакции
457
Так там нету ничего сложного. Создаешь класс, наследуешь класс TileEntity, реализуешь методы которые скажут, переопределяешь метод onUpdate, и в нем пишешь все что тебе угодно, регаешь. А если посмотреть в класс тайла печки, то перед тобой откроется дивный мир, полон интересных возможностей
 
Последнее редактирование:
Сообщения
1,864
Лучшие ответы
50
Реакции
345
Ему вроде песок надо тикать. Тайл энтити будет слишком жирно.
 
Сообщения
4,871
Лучшие ответы
45
Реакции
671
Не песок. Деревья перепиливаю.

А если посмотреть в класс тайла печки, то перед тобой откроется дивный мир, полон интересных возможностей
Я не раз туда глядел, и честно говоря, ничерта не понял. Как то однажды ты мне скидывал полный разбор кода, но почему то у меня в единую картинку, как это все работает, не сложилось.... Я не могу это визуализировать в голове, как это происходит, и потому не разбираюсь.
 
Сообщения
4,871
Лучшие ответы
45
Реакции
671
Ему вроде песок надо тикать.
с песком пока фиг с ним. Не так это важно. Разберусь чутка попозже, что за дисплей лист и куда хук сувать, как конь советовал, щас не в приоритете.
Щас через смену модели через блокстейт реализовано. Лагает вроде поменьше, чем если блок менять целиком.
 

Ivasik

Porting GrandBombaster
Администратор
Сообщения
3,148
Лучшие ответы
82
Реакции
418
Какая собсна задача? Чего ты хочешь? Расспиши подробно зачем тебе тикать блоки.
 
Сообщения
4,871
Лучшие ответы
45
Реакции
671
Смотри. Имеется саженец.
Сажаешь саженец, он имеет stage_1 - тонкий ствол. Спустя определенное время, блокстейт должен сменится на stage_2 , а сверху себя поставить stage_1. И так далее по заранее запланированному сценарию роста с небольшой рандомностью
 

Ivasik

Porting GrandBombaster
Администратор
Сообщения
3,148
Лучшие ответы
82
Реакции
418
И в чем собсна проблема? Тот же кактус или тростник, корус.
 
Сообщения
4,871
Лучшие ответы
45
Реакции
671
зачем нужен вот этот метод и что он делает? В смысле, что значит "получить мету из состояния"?
Java:
    public int getMetaFromState(IBlockState state)
    {
        return ((Integer)state.getValue(AGE)).intValue();
    }
Кстати да, почему то про кактус я забыл. Надо глянуть
 
Сообщения
4,871
Лучшие ответы
45
Реакции
671
так он криво работает. Всмысле, после перезахода в мир тикать перестает...
 
Сообщения
3,772
Лучшие ответы
56
Реакции
471
А метод этот много для чего... Но в основном для сохранения стайта в виде метадаты...
По всей видимости, с 1.13 надобность в нём отпадёт...
Хотя я и не верю )
 
Сообщения
4,871
Лучшие ответы
45
Реакции
671
this.setTickRandomly(true);
Это?

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

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

Ivasik

Porting GrandBombaster
Администратор
Сообщения
3,148
Лучшие ответы
82
Реакции
418
зачем нужен вот этот метод и что он делает? В смысле, что значит "получить мету из состояния"?
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. И что непонятно? Цикл на получение текущей высоты и последующий вывод.

Ты только учти то, что сетРандомТик будет рандомно вызывать обновление, хотя возможно тебе это и нужно.
 
Сообщения
4,871
Лучшие ответы
45
Реакции
671
Еще вопрос, уже не совсем в тему. Как реализовать лужи после дождя, без замены блока?
 

Ivasik

Porting GrandBombaster
Администратор
Сообщения
3,148
Лучшие ответы
82
Реакции
418
Я шейдерами делал. По другому делать бред.

20180604_142453.jpg
 
Сверху