Как правильно сделать ивент PlayerInteractEvent.RightClickBlock

Версия Minecraft
1.15.2
24
1
1
Уже несколько часов ищу ответ, самому никак. Как всё-же сделать чтобы при нажатии определенным предметом по определенному блоку, предмет заменялся на другой с исчезновением блока. Так-же трудности с созданием ачивки после подбора предмета, но главное первое, это если у кого-то есть лишняя минутка.
Пишу на 1.15 но это не влияет на ивент.
Хочу сделать что-то на подобии того как в ТК6 получаем Таумономикон
 
Последнее редактирование:
Решение
Если у тебя свой предмет, то ты можешь использовать в нём onItemRightClick или onItemUse. Сделаешь внутри такие же проверки на нужный тебе блок и уничтожишь его, заменив предмет на другой. Мне кажется, это решение лучше чем ивенты.
83
4
23
Если у тебя свой предмет, то ты можешь использовать в нём onItemRightClick или onItemUse. Сделаешь внутри такие же проверки на нужный тебе блок и уничтожишь его, заменив предмет на другой. Мне кажется, это решение лучше чем ивенты.
 
24
1
1
Спасибо, пришлось немного повозиться так-как 1.15, но всё работает. Заюзал onItemUse так как вызываться при клике по чему-то.Запарно всё-таки писать на версии на которой почти нету понятных обяснений.
 
24
1
1
Если у тебя свой предмет, то ты можешь использовать в нём onItemRightClick или onItemUse. Сделаешь внутри такие же проверки на нужный тебе блок и уничтожишь его, заменив предмет на другой. Мне кажется, это решение лучше чем ивенты.
А всё-же если предмет из майнкрафта, и при клике надо его удалив получить другой, наподобии крафта в мире.
 
83
4
23
Возможно, что-то типа такого:
Java:
 public void onPlayerInteract(PlayerInteractEvent event) {
        ItemStack itemStack = event.getItemStack();
        if (itemStack.getItem().equals(Items.DIAMOND)) {
            IBlockState clickedBlock = event.getWorld().getBlockState(event.getPos());
            if (clickedBlock.getBlock().equals(Blocks.DIRT)) {
                // что-то...
            }
        }
    }
Это из 1.12.2, на 1.15 должно быть что-то типа такого же.
 
24
1
1
Нашёл гайд по ивентам на ютубе, очень не внятно, я позаимствовал код, всё работает отлично
Java:
  @SubscribeEvent
    public static void testJumpEvent(LivingEvent.LivingJumpEvent event) {
        BAFMod.LOGGER.info("testJumpEvent fired");
        LivingEntity livingEntity = event.getEntityLiving();
        World world = livingEntity.getEntityWorld();
        world.setBlockState(livingEntity.getPosition().add(0, 5, 0), Blocks.ACACIA_LEAVES.getDefaultState());
        livingEntity.addPotionEffect(new EffectInstance(Effects.JUMP_BOOST, 600, 255));
        livingEntity.addPotionEffect(new EffectInstance(Effects.RESISTANCE, 5000, 255));
        livingEntity.setGlowing(true);
    }
}
 
24
1
1
Редактировав код ивента выше, я пришёл к такому(работающему) коду, почему-то такого как удаление предмета в ItemStack не было, пришлось делать через переменную
Java:
  @SubscribeEvent
    public static void playerInteract(PlayerInteractEvent event) {
        PlayerEntity playerEntity = event.getPlayer();
        BlockPos pos = event.getPos();
        World world = event.getWorld();
        ItemStack item = event.getItemStack();
        int count = item.getCount();
        if (!world.isRemote && world.getBlockState(pos).getBlock() == RegistryHandler.RITUALSTONE.get() && item.getItem().equals(Items.FLINT)) {

            playerEntity.inventory.addItemStackToInventory(new ItemStack(RegistryHandler.RUNICFLINT.get(),1));
            item.setCount(--count);


        }
    }
 
24
1
1
Секономил мне строчку кода, я пробовал оказалось не туда прописывал надо было после ; как-то так, вот код если кто-то захочет сделать так-же:
Java:
     @SubscribeEvent
    public static void playerInteract(PlayerInteractEvent event) {
        PlayerEntity playerEntity = event.getPlayer();
        BlockPos pos = event.getPos();
        World world = event.getWorld();
        ItemStack item = event.getItemStack();
        if (!world.isRemote && world.getBlockState(pos).getBlock() == RegistryHandler.RITUALSTONE.get() && item.getItem().equals(Items.FLINT)) {

            playerEntity.inventory.addItemStackToInventory(new ItemStack(RegistryHandler.RUNICFLINT.get(),1));

            item.shrink(1);


        }
    }
 
Последнее редактирование:
Сверху