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

Помогите Странное исключение EntityDamageByEntityEvent

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

Статус темы:
Закрыта.
  1. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Народ. Отлавливаю ивент выше в заголовке, но почему-то когда игрок в сурвивал бьет игрока с креативом - возникает очень странное исключение:
    Код:
    21.12 11:00:55 [Server] ERROR Could not pass event EntityDamageByEntityEvent to AntiLeavePvP v1.1
    21.12 11:00:55 [Server] INFO org.bukkit.event.EventException
    21.12 11:00:55 [Server] INFO at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callEvent(CraftEventFactory.java:87) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:553) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:466) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:585) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.EntityLiving.d(EntityLiving.java:1102) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.EntityHuman.d(EntityHuman.java:859) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.EntityLiving.damageEntity(EntityLiving.java:743) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.EntityHuman.damageEntity(EntityHuman.java:800) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.EntityPlayer.damageEntity(EntityPlayer.java:496) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.EntityHuman.attack(EntityHuman.java:1001) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.EntityPlayer.attack(EntityPlayer.java:1063) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1355) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.PacketPlayInUseEntity.a(SourceFile:52) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.PacketPlayInUseEntity.a(SourceFile:11) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_91]
    21.12 11:00:55 [Server] INFO at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_91]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557)
    [server.jar:git-Spigot-db6de12-18fbb24]
    21.12 11:00:55 [Server] INFO at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]
    Я не знаю, как это можно пофиксить. Помогите!

    Код ивента:
    Код:
        @EventHandler
        public void addPlayerToList(EntityDamageByEntityEvent e) {
    
            ApplicableRegionSet set = WGBukkit.getRegionManager(Config.getWorld).getApplicableRegions(e.getEntity().getLocation());
    
            if (e.getEntity().getWorld() != Config.getWorld) return;
            if (e.getEntity().getType() != EntityType.PLAYER) return;
            if (e.getDamager().getType() != EntityType.PLAYER) return;
            if (e.getEntity().getLastDamageCause().getCause() != EntityDamageEvent.DamageCause.ENTITY_ATTACK) return;
            if (e.getDamager().getLastDamageCause().getCause() != EntityDamageEvent.DamageCause.ENTITY_ATTACK) return;
    
            Player damager = (Player) e.getEntity();
            Player attacker = (Player) e.getDamager();
    
            if (damager.getGameMode() != GameMode.SURVIVAL) return;
            if (attacker.getGameMode() != GameMode.SURVIVAL) return;
    
            for (ProtectedRegion reg : set) {
    
                if (!reg.getId().equalsIgnoreCase(Config.getRegion)) return;
    
                if (!battle.containsKey(damager.getName())) for (String s : Config.addPlayerinList) {
                    damager.sendMessage(C.c(s));
                }
    
                if (!battle.containsKey(attacker.getName())) for (String s : Config.addPlayerinList) {
                    attacker.sendMessage(C.c(s));
                }
    
                battle.put(damager.getName(), Config.getTime);
                battle.put(attacker.getName(), Config.getTime);
            }
        }
     
  2. Хостинг MineCraft
    <
  3. Deamonish

    Deamonish Активный участник

    Баллы:
    61
    Кажись, ты неполную ошибку скинуть. Там должен быть CAUSE для экзепшена.
     
  4. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Его просто нет...
     
  5. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    up. Тоже интересно. Присоединяюсь к теме.
     
  6. Sonicxd2

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

    Баллы:
    76
    Попробуй окружить метод try и уже тогда ловить экзепшн.
    Код:
       @EventHandler
        public void addPlayerToList(EntityDamageByEntityEvent e){
            try{
          
            ApplicableRegionSet set = WGBukkit.getRegionManager(Config.getWorld).getApplicableRegions(e.getEntity().getLocation());
            if (e.getEntity().getWorld() != Config.getWorld) return;
            if (e.getEntity().getType() != EntityType.PLAYER) return;
            if (e.getDamager().getType() != EntityType.PLAYER) return;
            if (e.getEntity().getLastDamageCause().getCause() != EntityDamageEvent.DamageCause.ENTITY_ATTACK) return;
            if (e.getDamager().getLastDamageCause().getCause() != EntityDamageEvent.DamageCause.ENTITY_ATTACK) return;
            Player damager = (Player) e.getEntity();
            Player attacker = (Player) e.getDamager();
            if (damager.getGameMode() != GameMode.SURVIVAL) return;
            if (attacker.getGameMode() != GameMode.SURVIVAL) return;
            for (ProtectedRegion reg : set) {
                if (!reg.getId().equalsIgnoreCase(Config.getRegion)) return;
                if (!battle.containsKey(damager.getName())) for (String s : Config.addPlayerinList) {
                    damager.sendMessage(C.c(s));
                }
                if (!battle.containsKey(attacker.getName())) for (String s : Config.addPlayerinList) {
                    attacker.sendMessage(C.c(s));
                }
                battle.put(damager.getName(), Config.getTime);
                battle.put(attacker.getName(), Config.getTime);
            }
       
            } catch(Exception e){
                e.printStackTrace();
                System.out.println("");
                e.getCause().printStackTrace();
               
            }
        }
    Что то вроде этого.
     
  7. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    try /catch хорошая идея, но лично меня интересует другое, почему сам баккит этого не выдал[DOUBLEPOST=1482347989,1482347940][/DOUBLEPOST]
    Но скорее всего (не смотрел) в баките вызов ивентов уже сам завернут в try/catch, поэтому не факт, что прокатит.​
     
  8. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ты concurrent словил, используй итераторы.
     
  9. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    synchronized(lock){} ?
     
  10. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Ошибка вскрылась (спасибо челу с идеей try catch)!

    if (e.getEntity().getLastDamageCause().getCause() != EntityDamageEvent.DamageCause.ENTITY_ATTACK) return;
    if (e.getDamager().getLastDamageCause().getCause() != EntityDamageEvent.DamageCause.ENTITY_ATTACK) return;

    Из-за этих 2 строчек вылетал null, т.е урон не прошел. Отсюда исключение!
     
Статус темы:
Закрыта.

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