Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Как написать обработку нажатия на предмет другим предметом в инвенторе игрока

PlayGem

Активный участник
Баллы
61
Имя в Minecraft
Mangarain7z
Например, ты нажимаешь чародейской книгой на элемент брони в инвенторе, и зачарование на книге накладывается на нажатый элемент брони.
 
Если хочешь добавить любое зачарование, вместо addEnchantment используй addUnsafeEnchantment.

Код:
    @EventHandler
    public void onInventoryClick(InventoryClickEvent event) {
        if (!(event.getWhoClicked() instanceof Player player)) {
            return;
        }

        ItemStack cursorItem = event.getCursor();
        ItemStack clickedItem = event.getCurrentItem();

        if (cursorItem.getType() != Material.ENCHANTED_BOOK || !isArmor(clickedItem)) {
            return;
        }

        EnchantmentStorageMeta meta = (EnchantmentStorageMeta) cursorItem.getItemMeta();
        if (meta == null || meta.getStoredEnchants().isEmpty()) {
            return;
        }

        Enchantment enchantment = meta.getStoredEnchants().keySet().iterator().next();
        int level = meta.getStoredEnchants().get(enchantment);

        try {
            clickedItem.addEnchantment(enchantment, level);
        } catch (IllegalArgumentException e) {
            player.sendMessage("Зачарование не подходит.");
            return;
        }

        cursorItem.setAmount(cursorItem.getAmount() - 1);
        player.updateInventory();
        event.setCancelled(true);
    }



    public boolean isArmor(ItemStack item) {
        if (item == null) return false;
        return EnchantmentTarget.ARMOR.includes(item);
    }
}
 

Поделиться этой страницей

Назад
Верх