Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

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

Discussion in 'Разработка плагинов для новичков' started by Lisenochek, Jun 24, 2016.

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

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

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

    Code:
        @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));
                }
            }
        }
     
  2. Хостинг MineCraft
    <
  3. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    PlayerItemConsumeEvent
     
  4. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    А какое условие нужно указать, чтобы было запрещено пить молоко, только тогда, когда у тебя переломаны ноги?
    Ведь, если указать все по дефолту, молоко будет пить запрещено вообще
     
  5. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Code:
        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, и добавлять туда игрока с переломом.

    Code:
        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);
            }
        }
     
  6. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Пойду перечитывать книгу по java... Спасибо, попробую[DOUBLEPOST=1466760351,1466758356][/DOUBLEPOST]
    Code:
        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);
                    }
                }
            }
        }
    Не срабатывает.
     
  7. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    @EventHandler добавить не забыл?
     
  8. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Не забыл
     
  9. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Code:
        @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);
                    }
                }
            }
        }
     
  10. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Теперь не работает перелом ног
     
  11. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    всмысле не работает?
     
  12. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Вообще не работает, я даже спрыгнул с 30 блоков - ничего не происходит...
    Вот эти два события:
    Code:
        @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);
                    }
                }
            }
        }
     
  13. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Алло. Эти 2 события отменяют питьё молока. А первое вообще не работает.
     
  14. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Прости, не заметил. Теперь работает, но в консольке, после выпивания молока пишет:
    PotionEffectType[2, SLOW]

    Ведь представь: люди сломали себе ноги (5 человек) и пытаются выпить молоко. Можно ли это отключить?
     
  15. slavik123123123

    slavik123123123 Старожил Пользователь

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    ну так убери все System.out.print
     
  16. Rfg0

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

    Trophy Points:
    46
    Имя в Minecraft:
    Rfg0
    Лучше писать так:
    Code:
    p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, integer.MAX_VALUE, 2))
    Если тебе нужен "бесконечный" эффект.[DOUBLEPOST=1466770978,1466770896][/DOUBLEPOST]
    19 строка. Убери
     

Share This Page