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

Помогите Не получается работать с ArmorEquipEvent

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

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

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

    Баллы:
    61
    Имя в Minecraft:
    MrJimmy_
    Вообщем пытаюсь сделать так что бы при одевании брони давался эффект замедления,а при снятии убирался,но надевании и снимании брони эффект появляется и исчезает

    Код:
    import com.codingforcookies.armorequip.ArmorEquipEvent;
    import org.bukkit.Effect;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.potion.PotionEffect;
    import org.bukkit.potion.PotionEffectType;
    
    
    public class ArmorEvent implements Listener {
    
        @EventHandler
        public void onEquipArmor(ArmorEquipEvent e) {
            Player p = e.getPlayer();
            if (e.getNewArmorPiece() != null && e.getNewArmorPiece().getType() != Material.AIR) ;
                p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 100000000, 1));
            if(e.getNewArmorPiece() == null && e.getNewArmorPiece().getType() == Material.AIR);
                p.removePotionEffect(PotionEffectType.SLOW);
        }
        }
     
  2. Egorov

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

    Баллы:
    66
    Имя в Minecraft:
    sqlex
    Впервые слышу о таком ивенте
     
  3. Egorov

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

    Баллы:
    66
    Имя в Minecraft:
    sqlex
    Попробуй ввести это
    Код:
     if(e.getNewArmorPiece() != null && e.getNewArmorPiece().getType() != Material.AIR) 
    и
    Код:
     if(e.getOldArmorPiece() != null && e.getOldArmorPiece().getType() != Material.AIR) 
    Там 2 проверки, старой брони, и новой брони.
    При новой броне, это когда игрок надевает броню, при старой - снимает
     
  4. Egorov

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

    Баллы:
    66
    Имя в Minecraft:
    sqlex
    Код:
    import com.codingforcookies.armorequip.ArmorEquipEvent;
    import org.bukkit.Effect;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.potion.PotionEffect;
    import org.bukkit.potion.PotionEffectType;
    
    
    public class ArmorEvent implements Listener {
    
       @EventHandler
       public void onEquipArmor(ArmorEquipEvent e) {
           Player p = e.getPlayer();
           if (e.getNewArmorPiece() != null && e.getNewArmorPiece().getType() != Material.AIR) ;
               p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 100000000, 1));
           if(e.getOldArmorPiece() == null && e.getOldArmorPiece().getType() == Material.AIR);
               p.removePotionEffect(PotionEffectType.SLOW);
       }
       }
    
     
  5. Автор темы
    furs

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

    Баллы:
    61
    Имя в Minecraft:
    MrJimmy_
    Теперь при снимании брони эффект исчезает и больше не появляется при надевании
     
  6. Egorov

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

    Баллы:
    66
    Имя в Minecraft:
    sqlex
    Сделай проверку только на Material, без null
     
  7. Автор темы
    furs

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

    Баллы:
    61
    Имя в Minecraft:
    MrJimmy_
    Так getOldArmorPiece возвращает последнею надетую броню
     
  8. MurlikMurlik

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

    Баллы:
    96
    Похоже, эту задачу можно решить лучшим образом через шедулер.
    Потому что если использовать ивент, есть много узкий мест. Например, если выпить молока, эффект сбросится и не восстановится.
    Запускай шедулер и в нем проверяй всех игроков на наличие нужной вещи в слотах брони. Если предмет есть, выдавай игроку нужный эффект, если предмета нет, то ничего не делай либо сразу забирай эффект.
     
  9. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    А почему нельзя выдавать броню с атрибутом замедления?
     
  10. MurlikMurlik

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

    Баллы:
    96
    Обычно так и делают)
    Тут смотря что нужно для ТСа, если нужна гибкость, чтобы предмет не только эффект накладывал, то вариант выше вроде как сгодиться.
     
  11. Автор темы
    furs

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

    Баллы:
    61
    Имя в Minecraft:
    MrJimmy_
    Извиняюсь за вопрос,но как это сделать?
     
  12. Sneyzi

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

    Баллы:
    76
  13. Автор темы
    furs

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

    Баллы:
    61
    Имя в Minecraft:
    MrJimmy_
    А как потом выдавать обычную броню?Извините за глупые вопросы,я просто только начинаю писать плагины
     
  14. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Это совершенно разные предметы. Никто не мешает выдавать и такую броню, и обычную.
     

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