Изменение модели/текстуры/блока (onNeighborBlockChange)

Версия Minecraft
1.12+
Всем доброго времени суток!
Имеется следующий блок: [Java] Block - Pastebin.com
Задача: Когда над этим блоком и/или со сторон (слева/справа, спереди/сзади) ставится другой - изменить либо модель блока, либо текстуру, либо сам блок.
В качестве эксперимента пробовал в блоке static class BlockPillarup extends Block {...} добавлять:

Java:
public void onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock)
    {
        if (!worldIn.getBlockState(pos.down()).getMaterial().isSolid())
        {
            this.dropBlockAsItem(worldIn, pos, state, 0);
            worldIn.setBlockToAir(pos);
        }
        super.onNeighborBlockChange(worldIn, pos, state, neighborBlock);
    }

Результат - ошибка в super.onNeighborBlockChange(worldIn, pos, state, neighborBlock);
Если удалить эту строку, то код проходит, но в игре ничего не происходит.
В джаве я абсолютный нуб, мод делал по шаблонам, так что было бы супер получить готовое решение, заранее большое спасибо!
 
Последнее редактирование:
Решение
Ну попробуй вместо своего метода, вставить вот это в класс:
Java:
    @Override
    public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos) {
        if (!world.getBlockState(pos.down()).getMaterial().isSolid()) {
            world.setBlockState(pos, Blocks.OBSIDIAN.getDefaultState());
        }
    }
В строчке Blocks.OBSIDIAN.getDefaultState() - вместо Blocks.OBSIDIAN, напиши "ссылку" на блок, который будет заменять этот.
Работоспособность не гарантирую - код писал по памяти.
917
22
332
Ну попробуй вместо своего метода, вставить вот это в класс:
Java:
    @Override
    public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos) {
        if (!world.getBlockState(pos.down()).getMaterial().isSolid()) {
            world.setBlockState(pos, Blocks.OBSIDIAN.getDefaultState());
        }
    }
В строчке Blocks.OBSIDIAN.getDefaultState() - вместо Blocks.OBSIDIAN, напиши "ссылку" на блок, который будет заменять этот.
Работоспособность не гарантирую - код писал по памяти.
 
Код выше заработал, только одна проблема: при использовании его в исходном виде имеется ошибка: "error: package Blocks does not exist". Если заменить строку "world.setBlockState(pos, Blocks.OBSIDIAN.getDefaultState());" на любое другое действие - то оно выполняется. Подскажите пожалуйста, что делать, чтобы поставить именно блок.
 
5,018
47
783
тебе уже выше ответили, через актуалстейт это все делается и варианты
 
Хорошо, про метод понял. Даже что то нашёл в Гугле. Только вот примеры очень узкие, конкретизированные. Если есть материал, может кто то ссылок покидать? Или пример расписать даже? Пробовал из fence.class подобное решение, но у меня не заработало...
 
5,018
47
783
MaxLegend/Soviet-Lab-Mod-1.12.2
Вот смотри мой мод. Модель стола меняется в зависимости от того что стоит рядом.
 
Спасибо, я почти со всем разобрался. У меня остался один вопрос, как я могу взаимодействовать с блоками/моделями из моего мода? Допустим мне надо поставить заместо одного блока другой, я уже разобрался, как это делать с ванильными блоками, но с блоками из мода - нет. В примере есть импорт: import ru.lg.SovietMod.RegBlocks; Как понял можно через него, но у меня такого класса нет. Можно ещё как нибудь попросить forge поставить блок из мода?
 
Сверху