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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Lisenochek, 24 июн 2016.

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

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

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

    Код:
        @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 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    PlayerItemConsumeEvent
     
  4. Автор темы
    Lisenochek

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

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

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

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

    Код:
        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 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Пойду перечитывать книгу по java... Спасибо, попробую[DOUBLEPOST=1466760351,1466758356][/DOUBLEPOST]
    Код:
        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 Старожил Пользователь

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

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

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

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Код:
        @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 Активный участник Пользователь

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

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Вообще не работает, я даже спрыгнул с 30 блоков - ничего не происходит...
    Вот эти два события:
    Код:
        @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 Старожил Пользователь

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

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

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

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

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

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

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

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

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