1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем PlayGem, 2 авг 2024.

  1. Автор темы
    PlayGem

    PlayGem Активный участник

    Баллы:
    61
    Имя в Minecraft:
    Mangarain7z
    Например, ты нажимаешь чародейской книгой на элемент брони в инвенторе, и зачарование на книге накладывается на нажатый элемент брони.
     
  2. CioLay

    CioLay Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    NordNM
    Если хочешь добавить любое зачарование, вместо 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);
        }
    }
    
     
  3. Автор темы
    PlayGem

    PlayGem Активный участник

    Баллы:
    61
    Имя в Minecraft:
    Mangarain7z
    Спасибо!
     

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