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

Помогите Использование плагина только в нужном мире

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

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

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    У меня есть мой мини-плагин, и мне нужно чтобы он работал только в определенном мире, помогите
     
  2. Хостинг MineCraft
    <
  3. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Permissions
     
  4. ptnk

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

    Баллы:
    173
    Делать проверки на нужный мир во всех командах\ивентах.
     
    StealerSlain и Reality_SC нравится это.
  5. Автор темы
    JustBlender

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Но как? Я вас поэтому и спрашиваю, как это сделать.
     
  6. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Параметр world
     
  7. Автор темы
    JustBlender

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Ох какой я тупой, мне делать это в коде или в плагине? Расставь все по полочкам :D
     
  8. Fourgotten

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

    Баллы:
    103
    В евентах своего плагина делай проверку на мир.

    Если игрок совершает действие, проверяй player.getLocation().getWorld(). Если мир совпал с нужным - выполняй нужный код, нет так нет. (ибо пидора ответ)

    Ну и учитывай специфику плагина, мы не знаем что он делает, поэтому и конкретнее сказать не выйдет.

    Вообще, стоит загуглить "Bukkit getWorld" и все будет. Но не сразу.
     
  9. Автор темы
    JustBlender

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Специфика плагина просто - отключает дамаг от некоторых факторов, но нужно чтобы он работал только в мире Lobby ;) Даже код выложу:
    Код:
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDamageEvent;
    
    public class NoDamageListener implements Listener{
    
        @EventHandler
        public void fallPlayerDamage(EntityDamageEvent e) {
            if (e.getEntity() instanceof Player) {
                if (e.getCause() == EntityDamageEvent.DamageCause.FALL) {
                    e.setDamage(0.0);
                }
    }
            }
               
                @EventHandler
                public void firePlayerDamage(EntityDamageEvent e) {
                    if (e.getEntity() instanceof Player) {
                        if (e.getCause() == EntityDamageEvent.DamageCause.FIRE) {
                            e.setDamage(0.0);
                        }
                    }
                }
                    @EventHandler
                    public void entityPlayerDamage(EntityDamageEvent e) {
                        if (e.getEntity() instanceof Player) {
                            if (e.getCause() == EntityDamageEvent.DamageCause.ENTITY_ATTACK) {
                                e.setDamage(0.0);
                            }
                        }
                    }
                        @EventHandler
                        public void lavaPlayerDamage(EntityDamageEvent e) {
                            if (e.getEntity() instanceof Player) {
                                if (e.getCause() == EntityDamageEvent.DamageCause.LAVA) {
                                    e.setDamage(0.0);
                                }
                            }
                        }
                            @EventHandler
                            public void blockPlayerDamage(EntityDamageEvent e) {
                                if (e.getEntity() instanceof Player) {
                                    if (e.getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) {
                                        e.setDamage(0.0);
                                    }
                                }
                            }
                                @EventHandler
                                public void entityexplosionPlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.ENTITY_EXPLOSION) {
                                            e.setDamage(0.0);
                                        }
                                    }
                                }
                                @EventHandler
                                public void drowningPlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.DROWNING) {
                                            e.setDamage(0.0);
                                        }
                                    }
                                }
                                @EventHandler
                                public void voidPlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.VOID) {
                                            e.setDamage(200.0);
                                        }
                                    }
                                }
                                @EventHandler
                                public void lightningPlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.LIGHTNING) {
                                            e.setDamage(0.0);
                                        }
                                    }
                                }
                                @EventHandler
                                public void starvationPlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.STARVATION) {
                                            e.setDamage(0.0);
                                        }
                                    }
                                }
                                @EventHandler
                                public void poisonPlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.POISON) {
                                            e.setDamage(0.0);
                                        }
                                    }
                                }
                                @EventHandler
                                public void magicPlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.MAGIC) {
                                            e.setDamage(0.0);
                                        }
                                    }
                                }
                                @EventHandler
                                public void witherPlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.WITHER) {
                                            e.setDamage(0.0);
                                        }
                                    }
                                }
                                @EventHandler
                                public void fallingblockPlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.FALLING_BLOCK) {
                                            e.setDamage(0.0);
                                        }
                                    }
                                }
                                @EventHandler
                                public void thornsPlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.THORNS) {
                                            e.setDamage(0.0);
                                        }
                                    }
                                }
                                @EventHandler
                                public void projectilePlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.PROJECTILE) {
                                            e.setDamage(0.0);
                                        }
                                    }
                                }
                                @EventHandler
                                public void suffocationPlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.SUFFOCATION) {
                                            e.setDamage(0.0);
                                        }
                                    }
                                }
                                @EventHandler
                                public void firetickPlayerDamage(EntityDamageEvent e) {
                                    if (e.getEntity() instanceof Player) {
                                        if (e.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK) {
                                            e.setDamage(0.0);
                                        }
                                    }
                                }
    
     
  10. ptnk

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

    Баллы:
    173
    Как же вы надоели. Почему бы просто не начать читать javadoc по плагину? Это очень полезный навык, поиск ответов в документации.

    А так же исследование чужих исходников очень помогает.

    Чтобы не было этого левого кода: e.setDamage(0.0)
     
    skynetxxx и Den_Abr нравится это.
  11. Автор темы
    JustBlender

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Какой же вы умный, сир! Все предусмотрели! Я прекрасно знаю это, но мне нужна более подробная "документация"

    Не считайте это обсиранием, хотя его и нет.
     
  12. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Да просто в плагине проверяйте пермишен, а на него ставьте мир. Подробнее в документации PEX.
     
  13. ptnk

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

    Баллы:
    173
    Ну конечно же, для тебя сделаем книгу "пишем плагин для чайников, в картинках", чтобы понятно было.
     
    skynetxxx и Den_Abr нравится это.
  14. StealerSlain

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

    Баллы:
    88
    Имя в Minecraft:
    StealerSlain
    Куда столько строк кода?.. Можно все в один метод же поместить.
    Также, лучше сделай то, что говорят. В каждом методе проверяй какой мир и если тот, который нужно, выполняй действие.


    Код:
    @EventHandler
    public void onPlayerDamage(EntityDamageEvent e) {
       if (e.getEntity() instanceof Player) {
          if (e.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK || e.getCause() == e.DamageCause.FALL || e.getCause() == e.DamageCause.ENTITY_EXPLOSION //и так далее) {
              e.setCancelled(true); //сам ступил и сделал setDamage)
    }
    }
     
    Fourgotten нравится это.
  15. Fourgotten

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

    Баллы:
    103
    Ворлдгвардом можно отключить дамаг в отдельном месте/мире. Ну если принципиален свой плагин.
    Есть таки события просто при получении урона ентити(ну или игрока). Есть еще событие получения урона от другой ентити. Итак, событие.
    Код:
    Ентитя получает урон (не до конца потраченное событие Ж)  {
    
    if (e.getEntity() instanceof Player) { //о даа, это игрок
        if("lobby".equals(e.getEntity().getLocation().getWorld()) ) { //о даа, это тот мир
    
        if(e.getCause() == EntityDamageEvent.DamageCause.FIRE || e.getCause() ==              EntityDamageEvent.DamageCause.ПОТРАЧЕНО)  { //перечисляем нужные причины урона.
    e.setCancelled(true);  //если это они, то отменяем событие к хэрам
    }
        }
    }
    }
    Все очень схематично, ибо мне лень расписывать, вспоминать. Конечно же можно все и сократить и лаконичнее сделать, а как минимум не писать 3 одинаковых куска. Пищу к размышлению я дал, да и не только я)

    Да, тем более событие то там одно на самом деле(EntityDamageEvent).
     
  16. Автор темы
    JustBlender

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Знаю, это старый код, тогда просто затупил и ставил &&, и думал а почему не работает? xD
     
  17. StealerSlain

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

    Баллы:
    88
    Имя в Minecraft:
    StealerSlain
    Вот пример


    Код:
    @EventHandler
    public void onPlayerDamage(EntityDamageEvent e){
    if(e.getEntity() instanceof Player){
    if(e.getEntity().getWorld().getName().equalsIgnoreCase("lobby")){
    if(e.getCause() == EntityDamageEvent.DamageCause.FIRE || //...){
    e.setCancelled(true);
    }
    }
    }
    }
     
  18. Автор темы
    JustBlender

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    С примеров и надо было начинать :D Спасибо тебе и @Fourgotten
     
    ПриветОтЛайки нравится это.
  19. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Чем тебе пермишены-то не нравятся?
     
  20. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    Либо проверять в начале события if(!e.getEntity().getWorld().getName().equalsIgnoreCase("Lobby"))return;,
    либо в разрешениях выдать например world: Lobby: permissions: - nodamage.inlobby, а в начале события проверять if(!((Player)e.getEntity()).hasPermission("nodamage.inlobby"))return;.
    И совет: instanceof очень тяжёлый и долго исполняемый оператор, лучше его использовать как можно реже. В данном случае вместо e.getEntity() instanceof Player использовать e.getEntity().getType() == EntityType.PLAYER(или e.getEntityType() == EntityType.PLAYER).
     
    JustBlender и smilesdc нравится это.
  21. Автор темы
    JustBlender

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    А я незнаю xD Как для меня, то это удобнее и это может мне понадобится в следующем :)

    ЗЫ. Все равно же, для себя пишу, а так оставлю на заметку[DOUBLEPOST=1389454909,1389454724][/DOUBLEPOST]
    Спасибо, попробую полазить в своем коде других плагинов и сделаю их как можно стабильнее используя ваш вариант
     

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