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

  • Автор темы Автор темы 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);
    }
    }
 
Впервые слышу о таком ивенте
 
Попробуй ввести это
Код:
 if(e.getNewArmorPiece() != null && e.getNewArmorPiece().getType() != Material.AIR)
и
Код:
 if(e.getOldArmorPiece() != null && e.getOldArmorPiece().getType() != Material.AIR)
Там 2 проверки, старой брони, и новой брони.
При новой броне, это когда игрок надевает броню, при старой - снимает
 
Код:
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);
   }
   }
 
Попробуй ввести это
Код:
 if(e.getNewArmorPiece() != null && e.getNewArmorPiece().getType() != Material.AIR)
и
Код:
 if(e.getOldArmorPiece() != null && e.getOldArmorPiece().getType() != Material.AIR)
Там 2 проверки, старой брони, и новой брони.
При новой броне, это когда игрок надевает броню, при старой - снимает
Теперь при снимании брони эффект исчезает и больше не появляется при надевании
 
Попробуй ввести это
Код:
 if(e.getNewArmorPiece() != null && e.getNewArmorPiece().getType() != Material.AIR)
и
Код:
 if(e.getOldArmorPiece() != null && e.getOldArmorPiece().getType() != Material.AIR)
Там 2 проверки, старой брони, и новой брони.
При новой броне, это когда игрок надевает броню, при старой - снимает
Так getOldArmorPiece возвращает последнею надетую броню
 
Вообщем пытаюсь сделать так что бы при одевании брони давался эффект замедления,а при снятии убирался,но надевании и снимании брони эффект появляется и исчезает

Код:
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);
    }
    }
Похоже, эту задачу можно решить лучшим образом через шедулер.
Потому что если использовать ивент, есть много узкий мест. Например, если выпить молока, эффект сбросится и не восстановится.
Запускай шедулер и в нем проверяй всех игроков на наличие нужной вещи в слотах брони. Если предмет есть, выдавай игроку нужный эффект, если предмета нет, то ничего не делай либо сразу забирай эффект.
 
Похоже, эту задачу можно решить лучшим образом через шедулер.
Потому что если использовать ивент, есть много узкий мест. Например, если выпить молока, эффект сбросится и не восстановится.
Запускай шедулер и в нем проверяй всех игроков на наличие нужной вещи в слотах брони. Если предмет есть, выдавай игроку нужный эффект, если предмета нет, то ничего не делай либо сразу забирай эффект.
А почему нельзя выдавать броню с атрибутом замедления?
 
А почему нельзя выдавать броню с атрибутом замедления?
Обычно так и делают)
Тут смотря что нужно для ТСа, если нужна гибкость, чтобы предмет не только эффект накладывал, то вариант выше вроде как сгодиться.
 
А как потом выдавать обычную броню?Извините за глупые вопросы,я просто только начинаю писать плагины
Это совершенно разные предметы. Никто не мешает выдавать и такую броню, и обычную.
 
Назад
Верх