Через заданный промежуток времени блок должен выполнять действие

Версия Minecraft
1.12.2
29
2
2
Здравствуйте я создал два блока.
По задумке один блок должен генерировать другой через заданный промежуток времени (то есть тиков).
Проблема заключается в том что я немого найти метод который будет обновляться и на стороне сервера и клиента.
Я создаю класс моего блока и наследую его у класса Block.
Класс блока имеет некоторый набор функций связанных с тиками:

Java:
    /**
     * Called randomly when setTickRandomly is set to true (used by e.g. crops to grow, etc.)
     */
    public void randomTick(World worldIn, BlockPos pos, IBlockState state, Random random)
    {
        this.updateTick(worldIn, pos, state, random);
    }

    public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
    {
    }

    @SideOnly(Side.CLIENT)
    public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand)
    {
    }

Но работает только один (последний) да и то только на стороне клиента.
У моего класса, который унаследован из класса блок я изменяю функцию randomDisplayTick и пишу в нее код который отвечает за создание блока

Java:
    public int amount = 0;
    
    @Override
    public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) {

        amount++;
        if (amount >= 50) { //срабатывает раз в 50 раз (просто чтобы не нагружать систему)
            Console.println("tick: " + pos);
            worldIn.setBlockState(new BlockPos(183, 63, 143), Blocks.AIR.getDefaultState());
            amount = 0;

        }

    }

new BlockPos(183, 63, 143) - просто случайная позиция, делаю все в debug режиме и меняю координату когда мне удобно.
Данный код просто заменяет блок по координате 183, 63, 143 на пустоту(воздух).
Он это делает но только на стороне клиента, получается пройти через него не выйдет.

Побывал другие методы но они даже не вызываются, даже убирал переменную amount:
Java:
    @Override
    public void randomTick(World worldIn, BlockPos pos, IBlockState state, Random random) {

            Console.println("tick: " + pos);
            worldIn.setBlockState(new BlockPos(183, 63, 143), Blocks.AIR.getDefaultState());
        
    }
    
        @Override
    public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) {

            Console.println("tick: " + pos);
            worldIn.setBlockState(new BlockPos(183, 63, 143), Blocks.AIR.getDefaultState());
        
    }

Также в коде класса блока была подсказка: "Called randomly when setTickRandomly is set to true (used by e.g. crops to grow, etc.)"
Что значило что для того чтобы работал код сверху нужно для моего блока вызвать метод setTickRandomly(true);
Делал я это двумя способами:
-когда регистрировал блок сразу выполнил TESTBLOCK.setTickRandomly(true);
-и изменил этот метод в моем классе блок с
Java:
    // Так было в классе Block.class из библиотеки minecraft
    public Block setTickRandomly(boolean shouldTick) {
        this.needsRandomTick = shouldTick;
        return this;
    }
на
Java:
 //Так я было у моего класса блока который наследует класс Block.class из библиотеки minecraft
@Override
    public Block setTickRandomly(boolean shouldTick) {
        this.needsRandomTick = true;  // собственно изменения
        return this;
    }

И не один не помог. Блок не меняется ни на стороне сервера ни на стороне клиента.
Может кто то сталкивался с подобным.
 
Решение
Ответ нашелся сам, Работает updateTick в режиме сервера и клиента. Просто он очень редко срабатывает. И да randomTick Запускает updateTick поэтому нельзя randomTick делать чистым. Всем спасибо за помощь))).
29
2
2
Ответ нашелся сам, Работает updateTick в режиме сервера и клиента. Просто он очень редко срабатывает. И да randomTick Запускает updateTick поэтому нельзя randomTick делать чистым. Всем спасибо за помощь))).
 
Сверху