Помогите Отмена действия, если игрок начал пить молоко

Lisenochek

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Lisenochek
Народ, всем привет. Сделал евент, что если игрок упадет с высокого места, то сломает ноги и ему накладывается бесконечный эффект медлительности. Но все мы прекрасно знаем, что если у него есть ведро молока, то он быстро избавится от этого эффекта, а мне это не надо. Так вот, как отменить это действие, если у игрока наложен этот эффект?
Сам ивент

JavaScript:
    @EventHandler
    public void BrokenBones(EntityDamageEvent e) {
        if (e.getEntity() instanceof Player) {
            final Player p = (Player)e.getEntity();
            if (e.getCause() == EntityDamageEvent.DamageCause.FALL && p.getFallDistance() >= 7.0f) {
                MessageManager.getManager().msg(p, MsgType.INFORMATION, "Я сломал свои ноги, потому что я упал.");
               
                p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 10000, 2));
            }
        }
    }
 
А какое условие нужно указать, чтобы было запрещено пить молоко, только тогда, когда у тебя переломаны ноги?
Ведь, если указать все по дефолту, молоко будет пить запрещено вообще
 
Java:
    public void asd(PlayerItemConsumeEvent e){
        if (e.getItem().getType() == Material.MILK_BUCKET) {
            for (PotionEffect ef : e.getPlayer().getActivePotionEffects()) {
                if (ef.getType() == PotionEffectType.SLOW) {
                    e.setCancelled(true);
                }
            }
        }
    }
а лучше создать HashMap или ArrayList, и добавлять туда игрока с переломом.

Java:
    ArrayList<Player> s = new ArrayList<Player>();
    s.add(e.getPlayer());
    public void asd(PlayerItemConsumeEvent e){
        if (e.getItem().getType() == Material.MILK_BUCKET && s.contains(e.getPlayer())) {
            e.setCancelled(true);
        }
    }
 
Пойду перечитывать книгу по java... Спасибо, попробую
JavaScript:
    public void asd(PlayerItemConsumeEvent e){
        if (e.getItem().getType() == Material.MILK_BUCKET) {
            for (PotionEffect ef : e.getPlayer().getActivePotionEffects()) {
                if (ef.getType() == PotionEffectType.SLOW) {
                    e.setCancelled(true);
                }
            }
        }
    }

Не срабатывает.
 
Пойду перечитывать книгу по java... Спасибо, попробую
JavaScript:
    public void asd(PlayerItemConsumeEvent e){
        if (e.getItem().getType() == Material.MILK_BUCKET) {
            for (PotionEffect ef : e.getPlayer().getActivePotionEffects()) {
                if (ef.getType() == PotionEffectType.SLOW) {
                    e.setCancelled(true);
                }
            }
        }
    }

Не срабатывает.
@EventHandler добавить не забыл?
 
Java:
    @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false)
    public void asd(PlayerItemConsumeEvent e){
        System.out.print("aaa");
        if (e.getItem().getType() == Material.MILK_BUCKET) {
            System.out.print("aaa2");
            for (PotionEffect ef : e.getPlayer().getActivePotionEffects()) {
                System.out.print("aaa3");
                System.out.print(ef.getType());
                if (ef.getType().equals(PotionEffectType.SLOW)) {
                    System.out.print("aaa4");
                    e.setCancelled(true);
                }
            }
        }
    }
 
Теперь не работает перелом ног
 
Вообще не работает, я даже спрыгнул с 30 блоков - ничего не происходит...
Вот эти два события:
JavaScript:
    @EventHandler
    public void cancelMilk(PlayerItemConsumeEvent e) {
        if (e.getItem().getType() == Material.MILK_BUCKET) {
            for (PotionEffect ef : e.getPlayer().getActivePotionEffects()) {
                if (ef.getType() == PotionEffectType.SLOW) {
                    e.setCancelled(true);
                }
            }
        }
    }
   
    @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false)
    public void asd(PlayerItemConsumeEvent e){
        System.out.print("aaa");
        if (e.getItem().getType() == Material.MILK_BUCKET) {
            System.out.print("aaa2");
            for (PotionEffect ef : e.getPlayer().getActivePotionEffects()) {
                System.out.print("aaa3");
                System.out.print(ef.getType());
                if (ef.getType().equals(PotionEffectType.SLOW)) {
                    System.out.print("aaa4");
                    e.setCancelled(true);
                }
            }
        }
    }
 
Вообще не работает, я даже спрыгнул с 30 блоков - ничего не происходит...
Вот эти два события:
JavaScript:
    @EventHandler
    public void cancelMilk(PlayerItemConsumeEvent e) {
        if (e.getItem().getType() == Material.MILK_BUCKET) {
            for (PotionEffect ef : e.getPlayer().getActivePotionEffects()) {
                if (ef.getType() == PotionEffectType.SLOW) {
                    e.setCancelled(true);
                }
            }
        }
    }
  
    @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false)
    public void asd(PlayerItemConsumeEvent e){
        System.out.print("aaa");
        if (e.getItem().getType() == Material.MILK_BUCKET) {
            System.out.print("aaa2");
            for (PotionEffect ef : e.getPlayer().getActivePotionEffects()) {
                System.out.print("aaa3");
                System.out.print(ef.getType());
                if (ef.getType().equals(PotionEffectType.SLOW)) {
                    System.out.print("aaa4");
                    e.setCancelled(true);
                }
            }
        }
    }
Алло. Эти 2 события отменяют питьё молока. А первое вообще не работает.
 
Прости, не заметил. Теперь работает, но в консольке, после выпивания молока пишет:
PotionEffectType[2, SLOW]

Ведь представь: люди сломали себе ноги (5 человек) и пытаются выпить молоко. Можно ли это отключить?
 
Прости, не заметил. Теперь работает, но в консольке, после выпивания молока пишет:
PotionEffectType[2, SLOW]

Ведь представь: люди сломали себе ноги (5 человек) и пытаются выпить молоко. Можно ли это отключить?
ну так убери все System.out.print
 
p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 10000, 2));
Лучше писать так:
Java:
p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, integer.MAX_VALUE, 2))
Если тебе нужен "бесконечный" эффект.
Вообще не работает, я даже спрыгнул с 30 блоков - ничего не происходит...
Вот эти два события:
JavaScript:
    @EventHandler
    public void cancelMilk(PlayerItemConsumeEvent e) {
        if (e.getItem().getType() == Material.MILK_BUCKET) {
            for (PotionEffect ef : e.getPlayer().getActivePotionEffects()) {
                if (ef.getType() == PotionEffectType.SLOW) {
                    e.setCancelled(true);
                }
            }
        }
    }
  
    @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false)
    public void asd(PlayerItemConsumeEvent e){
        System.out.print("aaa");
        if (e.getItem().getType() == Material.MILK_BUCKET) {
            System.out.print("aaa2");
            for (PotionEffect ef : e.getPlayer().getActivePotionEffects()) {
                System.out.print("aaa3");
                System.out.print(ef.getType());
                if (ef.getType().equals(PotionEffectType.SLOW)) {
                    System.out.print("aaa4");
                    e.setCancelled(true);
                }
            }
        }
    }
19 строка. Убери
 
Назад
Верх