Помогите PrepareSmithingEvent странно работает

fx8320e

Активный участник
Пользователь
Баллы
66
Приветствую! Столкнулся с такой проблемой. В моем плагине есть кастомное оружие из всех присутствующих в игре материалов, в том числе алмазов. Потому встал вопрос о перековке алмазных предметов в незеритовые. Для этого написал такой код, в данном случае, перековки кинжала:
PHP:
@EventHandler
    public void PrepareSmithing(PrepareSmithingEvent e) {
        SmithingInventory inventory = e.getInventory();
        ItemStack tool = new ItemStack(Material.DIAMOND_SWORD);
       
        ItemMeta a = tool.getItemMeta();
        AttributeModifier modifier = new AttributeModifier(UUID.randomUUID(), "generic.attackDamage", 4.5f, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND);
        a.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, modifier);
        AttributeModifier modifier2 = new AttributeModifier(UUID.randomUUID(), "generic.attackSpeed", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND);
        a.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, modifier2);
        a.setDisplayName(ChatColor.WHITE + "Алмазный кинжал");
        tool.setItemMeta(a);
           
        ItemStack me = inventory.getItem(1);
        ItemStack y = inventory.getItem(1);
       
        if(y.getType() == Material.DIAMOND_SWORD) {
        if(y.hasItemMeta()) {
        if(y.getItemMeta().equals(a)) {
        if(me.getType() == Material.BRICK) {
         
        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);
           
            e.setResult(diamonddaggere); 
        }
        }
        }
        }
    }
Однако, хоть оружие по сути и претерпевает изменения, но ему не присваивается требуемая мета. У него не меняются названия и показатели урона. Подскажите, пожалуйста, с чем это может быть связано. Заранее благодарю.
 
ItemStack me = inventory.getItem(1);
ItemStack y = inventory.getItem(1);
Ну во первых, за чем ты два раза создаешь один и тот же айтем стак.

Попробуй вставить в твой инвентарь предмет.

inventory.setResult(diamonddaggere);
 
Код:
if(y.getType() == Material.DIAMOND_SWORD) {
        if(y.hasItemMeta()) {
        if(y.getItemMeta().equals(a)) {
        if(me.getType() == Material.BRICK)
У тебя не может быть такого, чтобы один предмет был и мечом и кирпичом. Как я тебе и написал, ты создаешь два раза один и тот же итем стак.
PHP:
ItemStack y = inventory.getItem(0);
Попробу так.
 
Назад
Верх