Как сделать не разрушаемость кнопок/рычагов водой?

Версия Minecraft
1.12.2
API
Forge
4
1
0
Есть обычная кнопка, но со своей логикой в getPlayerRelativeBlockHardness, которая позволяет ломать кнопки и рычаги только определенным игрокам, но всё это обходится обычным ведром воды или поршнями (просто смывают кнопку, и ставят обычную). Очень интересует способ исправления этого недочёта.
 
Решение
Хотя нет, видимо не туда посмотрел. Смена материала как раз помогла.
Правда, наследоваться от BlockButton не получится, и приходится полностью копировать её код.

TheAndrey

Редактор учебника
1,071
72
372
Есть какой-то метод или параметр с названием isReplaceable.
Точно не то. Это заменяемость блока на другой при установке (прим.: трава всегда заменяется).
В предыдущих версиях майна за определение поведения блока отвечал Material, в том числе взаимодействие с водой.
 
1,560
86
204
предыдущих версиях майна
И в новых тоже.

Как обычно, это хардкод
Код из BlockDynamicLiquid:
private boolean isBlocked(World worldIn, BlockPos pos, IBlockState state)
    {
        Block block = state.getBlock(); //Forge: state must be valid for position
        Material mat = state.getMaterial();

        if (!(block instanceof BlockDoor) && block != Blocks.STANDING_SIGN && block != Blocks.LADDER && block != Blocks.REEDS)
        {
            return mat != Material.PORTAL && mat != Material.STRUCTURE_VOID ? mat.blocksMovement() : true;
        }
        else
        {
            return true;
        }
    }
 

TheAndrey

Редактор учебника
1,071
72
372
7,099
324
1,509
А свой материал разве сделать нельзя? И типо зарегать свой блок-кнопку с тем же registry name
 
7,099
324
1,509
А почему не получается наследоваться? Потому что нельзя передать материал в супер-конструктор?
Можно сделать так в конструкторе
Java:
try {
    EnumHelper.setFailsafeFieldValue(Block.class.getDeclaredField("blockMaterial"), this, Material.ICE);
} catch (Exception e) {
    e.printStackTrace();
}
 
Сверху