- Баллы
- 123
- Имя в Minecraft
- JustBlender
У меня есть мой мини-плагин, и мне нужно чтобы он работал только в определенном мире, помогите
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
PermissionsУ меня есть мой мини-плагин, и мне нужно чтобы он работал только в определенном мире, помогите
Но как? Я вас поэтому и спрашиваю, как это сделать.Permissions
Параметр worldНо как? Я вас поэтому и спрашиваю, как это сделать.
Ох какой я тупой, мне делать это в коде или в плагине? Расставь все по полочкамПараметр world

Специфика плагина просто - отключает дамаг от некоторых факторов, но нужно чтобы он работал только в мире LobbyВ евентах своего плагина делай проверку на мир.
Если игрок совершает действие, проверяй player.getLocation().getWorld(). Если мир совпал с нужным - выполняй нужный код, нет так нет. (ибо пидора ответ)
Ну и учитывай специфику плагина, мы не знаем что он делает, поэтому и конкретнее сказать не выйдет.
Вообще, стоит загуглить "Bukkit getWorld" и все будет. Но не сразу.
Даже код выложу: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 по плагину? Это очень полезный навык, поиск ответов в документации.
Да просто в плагине проверяйте пермишен, а на него ставьте мир. Подробнее в документации 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); //если это они, то отменяем событие к хэрам
}
}
}
}
Куда столько строк кода?.. Можно все в один метод же поместить.
Знаю, это старый код, тогда просто затупил и ставил &&, и думал а почему не работает? xDКуда столько строк кода?.. Можно все в один метод же поместить.
Код:@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); } }
@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); } } } }
Спасибо тебе и @FourgottenЧем тебе пермишены-то не нравятся?С примеров и надо было начинатьСпасибо тебе и @Fourgotten
Либо проверять в начале события if(!e.getEntity().getWorld().getName().equalsIgnoreCase("Lobby"))return;,Специфика плагина просто - отключает дамаг от некоторых факторов, но нужно чтобы он работал только в мире LobbyДаже код выложу:
А я незнаю 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).