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

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

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

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

    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.5fAttributeModifier.Operation.ADD_NUMBEREquipmentSlot.HAND);
            
    a.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGEmodifier);
            
    AttributeModifier modifier2 = new AttributeModifier(UUID.randomUUID(), "generic.attackSpeed"3AttributeModifier.Operation.ADD_NUMBEREquipmentSlot.HAND);
            
    a.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEEDmodifier2);
            
    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"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);
               
                
    e.setResult(diamonddaggere); 
            }
            }
            }
            }
        }
    Однако, хоть оружие по сути и претерпевает изменения, но ему не присваивается требуемая мета. У него не меняются названия и показатели урона. Подскажите, пожалуйста, с чем это может быть связано. Заранее благодарю.
     
  2. _MRDen3000YT_

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

    Баллы:
    76
    Ну во первых, за чем ты два раза создаешь один и тот же айтем стак.

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

    inventory.setResult(diamonddaggere);
     
  3. Автор темы
    fx8320e

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

    Баллы:
    66
    Поменял. Все еще не работает.
     
  4. _MRDen3000YT_

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

    Баллы:
    76
    Код:
    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);
    Попробу так.
     

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