Войти или зарегистрироваться

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

JustBlender

Старожил
Девелопер
Пользователь
Баллы
123
Имя в Minecraft
JustBlender
У меня есть мой мини-плагин, и мне нужно чтобы он работал только в определенном мире, помогите
 
В евентах своего плагина делай проверку на мир.

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

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

Вообще, стоит загуглить "Bukkit getWorld" и все будет. Но не сразу.
 
В евентах своего плагина делай проверку на мир.

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

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

Вообще, стоит загуглить "Bukkit getWorld" и все будет. Но не сразу.
Специфика плагина просто - отключает дамаг от некоторых факторов, но нужно чтобы он работал только в мире 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);
                                    }
                                }
                            }
 
Как же вы надоели. Почему бы просто не начать читать javadoc по плагину? Это очень полезный навык, поиск ответов в документации.

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

Чтобы не было этого левого кода: e.setDamage(0.0)
 
Как же вы надоели. Почему бы просто не начать читать javadoc по плагину? Это очень полезный навык, поиск ответов в документации.
Какой же вы умный, сир! Все предусмотрели! Я прекрасно знаю это, но мне нужна более подробная "документация"

Не считайте это обсиранием, хотя его и нет.
 
Какой же вы умный, сир! Все предусмотрели! Я прекрасно знаю это, но мне нужна более подробная "документация"
Да просто в плагине проверяйте пермишен, а на него ставьте мир. Подробнее в документации PEX.
 
Какой же вы умный, сир! Все предусмотрели! Я прекрасно знаю это, но мне нужна более подробная "документация"

Не считайте это обсиранием, хотя его и нет.
Ну конечно же, для тебя сделаем книгу "пишем плагин для чайников, в картинках", чтобы понятно было.
 
Куда столько строк кода?.. Можно все в один метод же поместить.
Также, лучше сделай то, что говорят. В каждом методе проверяй какой мир и если тот, который нужно, выполняй действие.


Код:
@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)
}
}
 
Ворлдгвардом можно отключить дамаг в отдельном месте/мире. Ну если принципиален свой плагин.
Есть таки события просто при получении урона ентити(ну или игрока). Есть еще событие получения урона от другой ентити. Итак, событие.
Код:
Ентитя получает урон (не до конца потраченное событие Ж)  {

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).
 
Куда столько строк кода?.. Можно все в один метод же поместить.


Код:
@EventHandler
                            public void firetickPlayerDamage(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.setDamage(0);
                                    }
                            }
Знаю, это старый код, тогда просто затупил и ставил &&, и думал а почему не работает? xD
 
Вот пример


Код:
@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);
}
}
}
}
 
Вот пример


Код:
@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);
}
}
}
}
С примеров и надо было начинать :D Спасибо тебе и @Fourgotten
 
Специфика плагина просто - отключает дамаг от некоторых факторов, но нужно чтобы он работал только в мире Lobby ;) Даже код выложу:
Либо проверять в начале события 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).
 
Чем тебе пермишены-то не нравятся?
А я незнаю xD Как для меня, то это удобнее и это может мне понадобится в следующем :)

ЗЫ. Все равно же, для себя пишу, а так оставлю на заметку
Либо проверять в начале события 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).
Спасибо, попробую полазить в своем коде других плагинов и сделаю их как можно стабильнее используя ваш вариант
 
Назад
Верх