Взаимодействие с газовым блоком

Версия Minecraft
1.12.2
Привет. Сделал проверку на наличие ItemBlock в правой руке
Java:
@SubscribeEvent
    public void inputEvent(TickEvent.PlayerTickEvent event) {
        if (event.phase != Phase.END) return;
        ItemStack rightHand = event.player.getHeldItem(EnumHand.MAIN_HAND);
        if (rightHand.getItem() == Item.getItemFromBlock(BlocksRegister.MYBLOCK)) {
            //хз че писать
        }
    }
У самого блока стоит материал AIR, и с ним нельзя никак взаимодействовать.
Подскажите, как сделать так, чтобы при срабатывании проверки на наличие ItemBlock'а в руке появлялась возможность взаимодействовать с самим блоком(ломать, ставить на него другие блоки). И вообще какой параметр отвечает за возможность взаимодействия?
 
Решение
Я не знаю ни одного "легального" способа сделать то, что ты хочешь.
Но, можно имитировать такое поведение.
В классе блока написать:
Java:
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
    return FULL_BLOCK_AABB;
}
public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess world, BlockPos pos) {
   return NULL_AABB;
}
Таким образом мы делаем наш блок проходимым, но взаимодействовать с ним можно.
А затем обработать эвенты:
Java:
@SubscribeEvent
public void onDrawBlock(DrawBlockHighlightEvent event) {
    Если это НАШ блок и в руке НЕ наш предмет -> event.setCanceled(true);
}
@SubscribeEvent
public void onRightClick(PlayerInteractEvent.RightClickBlock event) {
    Если это...
917
22
332
Я не знаю ни одного "легального" способа сделать то, что ты хочешь.
Но, можно имитировать такое поведение.
В классе блока написать:
Java:
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
    return FULL_BLOCK_AABB;
}
public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess world, BlockPos pos) {
   return NULL_AABB;
}
Таким образом мы делаем наш блок проходимым, но взаимодействовать с ним можно.
А затем обработать эвенты:
Java:
@SubscribeEvent
public void onDrawBlock(DrawBlockHighlightEvent event) {
    Если это НАШ блок и в руке НЕ наш предмет -> event.setCanceled(true);
}
@SubscribeEvent
public void onRightClick(PlayerInteractEvent.RightClickBlock event) {
    Если это НАШ блок и в руке НЕ наш предмет -> event.setCanceled(true);
}
@SubscribeEvent
public void onLeftClick(PlayerInteractEvent.LeftClickBlock event) {
    Если это НАШ блок и в руке НЕ наш предмет -> event.setCanceled(true);
}
Таким образом, блок как бы и есть, но пока у нас в руке нет нужного предмета, всё взаимодействие с ним обречено на провал.
Возможно, кто-то знает способ лучше, не стесняйтесь)
 
Последнее редактирование:
917
22
332
Я снова кажется опечатался (3 раз за день), дал методам одинаковые названия, и в двух разных методах был один и тот же эвент. Проверьте моё предыдущее сообщение, похоже, я всё поправил.
 
Сверху