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

Сообщения
4,658
Лучшие ответы
44
Реакции
598
Версия Minecraft
1.12.2
Привет всем. Такой вопрос: updateTick работает как то коряво, в связи с чем назрел вопрос - как сделать чтобы тики считались для блока от момента установки? У меня есть стаааарый-стаааарый код от Тимахи,но есть единственная проблема - он перестает работать, если перезайти в мир.
Если надо, могу его скинуть, скажете, что допилить надо.
А вообще, хотелось бы по современному, через блокстейты как нибудь.
 
Сообщения
2,447
Лучшие ответы
75
Реакции
337
Для этого есть тайлы
 
Сообщения
1,853
Лучшие ответы
48
Реакции
339
Обычный блок в майне не тикает, я об этом тебе уже говорил.
 
Сообщения
4,658
Лучшие ответы
44
Реакции
598
Сообщения
1,374
Лучшие ответы
57
Реакции
390
Так там нету ничего сложного. Создаешь класс, наследуешь класс TileEntity, реализуешь методы которые скажут, переопределяешь метод onUpdate, и в нем пишешь все что тебе угодно, регаешь. А если посмотреть в класс тайла печки, то перед тобой откроется дивный мир, полон интересных возможностей
 
Последнее редактирование:
Сообщения
1,853
Лучшие ответы
48
Реакции
339
Ему вроде песок надо тикать. Тайл энтити будет слишком жирно.
 
Сообщения
4,658
Лучшие ответы
44
Реакции
598
Не песок. Деревья перепиливаю.

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

Ivasik

Porting GrandBombaster
Администратор
Сообщения
2,848
Лучшие ответы
77
Реакции
307
Какая собсна задача? Чего ты хочешь? Расспиши подробно зачем тебе тикать блоки.
 
Сообщения
4,658
Лучшие ответы
44
Реакции
598
Смотри. Имеется саженец.
Сажаешь саженец, он имеет stage_1 - тонкий ствол. Спустя определенное время, блокстейт должен сменится на stage_2 , а сверху себя поставить stage_1. И так далее по заранее запланированному сценарию роста с небольшой рандомностью
 

Ivasik

Porting GrandBombaster
Администратор
Сообщения
2,848
Лучшие ответы
77
Реакции
307
И в чем собсна проблема? Тот же кактус или тростник, корус.
 
Сообщения
4,658
Лучшие ответы
44
Реакции
598
зачем нужен вот этот метод и что он делает? В смысле, что значит "получить мету из состояния"?
Java:
    public int getMetaFromState(IBlockState state)
    {
        return ((Integer)state.getValue(AGE)).intValue();
    }
Кстати да, почему то про кактус я забыл. Надо глянуть
 
Сообщения
4,658
Лучшие ответы
44
Реакции
598
так он криво работает. Всмысле, после перезахода в мир тикать перестает...
 
Сообщения
3,498
Лучшие ответы
48
Реакции
326
А метод этот много для чего... Но в основном для сохранения стайта в виде метадаты...
По всей видимости, с 1.13 надобность в нём отпадёт...
Хотя я и не верю )
 
Сообщения
4,658
Лучшие ответы
44
Реакции
598
this.setTickRandomly(true);
Это?

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

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

Ivasik

Porting GrandBombaster
Администратор
Сообщения
2,848
Лучшие ответы
77
Реакции
307
зачем нужен вот этот метод и что он делает? В смысле, что значит "получить мету из состояния"?
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,658
Лучшие ответы
44
Реакции
598
Еще вопрос, уже не совсем в тему. Как реализовать лужи после дождя, без замены блока?
 

Ivasik

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

20180604_142453.jpg
 
Сверху