Помогите Как игроку выдать книгу зачарования.

  • Автор темы Автор темы Kloper
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Kloper

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
f3azzy
Привет 😁

Нужно выдать игроку книгу зачарования, чтобы он мог в наковальне с помощью неё зачаровать предмет.

Пытался выдать обычную книгу зачарования, и через мета-данные наложил на неё зачарования, но в наковальне она ничего не хотела чаровать.

Вот мой говно код:

Код:
ItemStack book12 = new ItemStack(Material.ENCHANTED_BOOK);
            ItemMeta bookMeta1 = book12.getItemMeta();
            bookMeta1.addEnchant(Enchantment.LOOT_BONUS_BLOCKS, 1, true);
            book12.setItemMeta(bookMeta1);
            p.getInventory().addItem(book12);
 
Потому что ты накладываешь на книгу зачарование, как на обычный предмет - как остроту на меч, например.
Но ты же понимаешь, что если книгой на удачу ломать гравий - больше кремня ты не получишь?
Тебе надо хранить информацию о том, какие зачарования содержит сама книга.
Для этого используется интерфейс EnchantmentStorageMeta:
Код:
    public ItemStack createBook(Enchantment enchantment, int level) {
        ItemStack stack = new ItemStack(Material.ENCHANTED_BOOK);
        EnchantmentStorageMeta meta = (EnchantmentStorageMeta) stack.getItemMeta();
        meta.addStoredEnchant(enchantment, level, true); //ignoreRestrictions
        stack.setItemMeta(meta);
        return stack;
    }
 
Потому что ты накладываешь на книгу зачарование, как на обычный предмет - как остроту на меч, например.
Но ты же понимаешь, что если книгой на удачу ломать гравий - больше кремня ты не получишь?
Тебе надо хранить информацию о том, какие зачарования содержит сама книга.
Для этого используется интерфейс EnchantmentStorageMeta:
Код:
    public ItemStack createBook(Enchantment enchantment, int level) {
        ItemStack stack = new ItemStack(Material.ENCHANTED_BOOK);
        EnchantmentStorageMeta meta = (EnchantmentStorageMeta) stack.getItemMeta();
        meta.addStoredEnchant(enchantment, level, true); //ignoreRestrictions
        stack.setItemMeta(meta);
        return stack;
    }
сделал вот так, всё работает. Спасибо тебе.


Код:
ItemStack book = new ItemStack(Material.ENCHANTED_BOOK, 1);
            EnchantmentStorageMeta meta = (EnchantmentStorageMeta)book.getItemMeta();
            meta.addStoredEnchant(Enchantment.LOOT_BONUS_BLOCKS, 1, true);
            book.setItemMeta(meta);
            p.getInventory().addItem(book);
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх