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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем fx8320e, 4 май 2021.

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

    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"6AttributeModifier.Operation.ADD_NUMBEREquipmentSlot.HAND);
            
    meta.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGEmodifier3);
            
    AttributeModifier modifier4 = new AttributeModifier(UUID.randomUUID(), "generic.attackSpeed"3AttributeModifier.Operation.ADD_NUMBEREquipmentSlot.HAND);
            
    meta.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEEDmodifier4);
            
    meta.setDisplayName(ChatColor.WHITE "Незеритовый кинжал");
            
    diamonddaggere.setItemMeta(meta);
       
               
                
    event.setResult(diamonddaggere);
        }
    Однако, подобная механика не учитывает износ начального предмета, в отличие от оригинального оружия игры, потому, конечный инструмент всегда обладает максимальной прочностью. Собственно, вопрос: как можно перенести прочность от "сырьевого" объекта к готовому? Были попытки сделать это с помощью set/getDurability, но этот метод значится устаревшим. Версия Minecraft - 1.16+. Подскажите, пожалуйста, что можно сделать.
     
  2. BrokenFG

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

    Баллы:
    61
    Имя в Minecraft:
    BrokenFG
    Код:
    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();
    }
    
     
  3. Sturm_PT

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

    Баллы:
    76

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