Помогите Как переносить значение износа инструмента от одного к другому?

fx8320e

Активный участник
Пользователь
Баллы
66
Приветствую! В моем проекте задействовано кастомное оружие и присутствует возможность превращения его из алмазного в незеритовое на кузнечном столе. Вот код (В данном случае алмазный кинжал в незеритовый):
PHP:
@EventHandler
    void onSmithingTableEvent(PrepareSmithingEvent event) {
       SmithingInventory inventory = event.getInventory();

       ItemStack tool = inventory.getItem(0);
       ItemStack mod = inventory.getItem(1);
       
       


       if(tool == null || mod == null) {
         return;
       }

       if(tool.getType() != Material.DIAMOND_SWORD || !tool.hasItemMeta() || !tool.getItemMeta().hasDisplayName() || !tool.getItemMeta().getDisplayName().equals(ChatColor.WHITE + "Алмазный кинжал") || mod.getType() != Material.NETHERITE_INGOT) {
         return;
       }

     
       ItemStack diamonddaggere = new ItemStack(Material.NETHERITE_SWORD);
        ItemMeta meta = diamonddaggere.getItemMeta();
        AttributeModifier modifier3 = new AttributeModifier(UUID.randomUUID(), "generic.attackDamage", 6, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND);
        meta.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, modifier3);
        AttributeModifier modifier4 = new AttributeModifier(UUID.randomUUID(), "generic.attackSpeed", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND);
        meta.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, modifier4);
        meta.setDisplayName(ChatColor.WHITE + "Незеритовый кинжал");
        diamonddaggere.setItemMeta(meta);
   
           
            event.setResult(diamonddaggere);
    }
Однако, подобная механика не учитывает износ начального предмета, в отличие от оригинального оружия игры, потому, конечный инструмент всегда обладает максимальной прочностью. Собственно, вопрос: как можно перенести прочность от "сырьевого" объекта к готовому? Были попытки сделать это с помощью set/getDurability, но этот метод значится устаревшим. Версия Minecraft - 1.16+. Подскажите, пожалуйста, что можно сделать.
 
Код:
setDurability(ItemStack item, int durability) {
    durability = Math.max(Math.min(durability, item.getType().getMaxDurability()), 0);
    item.setDurability((short) (item.getType().getMaxDurability() - durability));
}

getDurability(ItemStack item) {
    return item.getType().getMaxDurability() - item.getDurability();
}
 
Назад
Верх