Solved Could not pass event EntityDamageByEntityEvent

Discussion in 'Plugin Development' started by SteveStage, Apr 11, 2021.

Thread Status:
Not open for further replies.
  1. Offline

    SteveStage

    When player strike another player - these errors output to the console:
    Code:
    [15:56:24] [Server thread/ERROR]: Could not pass event EntityDamageByEntityEvent to SkillTest v1.2
    java.lang.NullPointerException: null
        at main.Handler.onDamaged(Handler.java:133) ~[?:?]
        at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor2.execute(Unknown Source) ~[?:?]
        at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.16.5.jar:git-Paper-574]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[patched_1.16.5.jar:git-Paper-574]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.16.5.jar:git-Paper-574]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:607) ~[patched_1.16.5.jar:git-Paper-574]
        at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callEvent(CraftEventFactory.java:250) ~[patched_1.16.5.jar:git-Paper-574]
        at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:1070) ~[patched_1.16.5.jar:git-Paper-574]
        at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:957) ~[patched_1.16.5.jar:git-Paper-574]
        at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:913) ~[patched_1.16.5.jar:git-Paper-574]
        at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:1102) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.EntityLiving.damageEntity0(EntityLiving.java:1932) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.EntityHuman.damageEntity0(EntityHuman.java:941) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.EntityLiving.damageEntity(EntityLiving.java:1260) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.EntityHuman.damageEntity(EntityHuman.java:858) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.EntityPlayer.damageEntity(EntityPlayer.java:972) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.EntityHuman.attack(EntityHuman.java:1184) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.EntityPlayer.attack(EntityPlayer.java:1989) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:2396) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.PacketPlayInUseEntity.a(PacketPlayInUseEntity.java:55) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.PacketPlayInUseEntity.a(PacketPlayInUseEntity.java:12) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:35) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1252) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1245) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1206) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1120) ~[patched_1.16.5.jar:git-Paper-574]
        at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:289) ~[patched_1.16.5.jar:git-Paper-574]
        at java.lang.Thread.run(Thread.java:834) [?:?]
    
    133-134 lines:
    Code:
    @EventHandler
        public void onDamaged(EntityDamageEvent edev)
        {
            if(edev.getEntity() instanceof Player && edev.getCause() == DamageCause.ENTITY_ATTACK)
            {
                if(1 <= 2) // if victim - swordsman
                { // 133 line
                    if(thishand.swmn.getCurrentUsePerk() == PERK_SC && thishand.swmn.getComboHitCount() >= 1) // 134 line
                    {
                        thishand.swmn.nullComboHitCount();
                        SkillTest.logString("[SBE] Сбив комбо!");
                    }
                }
            }
        }
    Functions in the line:
    Code:
    public int getCurrentUsePerk()
        {
            return thissword.perk_using;
        }
    public int getComboHitCount()
        {
            return thissword.combo.getHitCount();
        }
    public void nullComboHitCount()
        {
            thissword.combo.nullHitCount();
        }
    
    EntityDamageByEntityEvent:
    Code:
    @EventHandler
        public void onAttack(EntityDamageByEntityEvent eev)
        {
            if(eev.getDamager() instanceof Player && eev.getEntity() instanceof LivingEntity) // player hits player
            {
                Player p = (Player)eev.getDamager();
                LivingEntity v = (LivingEntity)eev.getEntity();
                thishand.swmn.setVictim(v);
                thishand.swmn.setEvent(eev);
                switch(this.swmn.getCurrentUsePerk())
                {
                    case PERK_KS:
                    {
                        thishand.swmn.perkKickSlash(plug);
                        SkillTest.logString("[SBE] " + p.getName() + " использовал перк KickSlash!");
                        break;
                    }
                    case PERK_DW:
                    {
                        thishand.swmn.perkDangerWound(plug);
                        SkillTest.logString("[SBE] " + p.getName() + " использовал перк DangerWound!");
                        break;
                    }
                    case PERK_SC:
                    {
                        thishand.swmn.perkSwordCombo(plug);
                        SkillTest.logString("[SBE] " + p.getName() + " использовал перк SwordCombo!");
                        break;
                    }
                    case PERK_BB:
                    {
                        if(is_fall_for_crit.contains(p))
                        {
                            thishand.swmn.perkBlockBreaker(plug);
                            SkillTest.logString("[SBE] " + p.getName() + " использовал перк BlockBreaker!");
                            break;
                        }
                    }
                    case PERK_ROB:
                    {
                        thishand.swmn.perkRageOfBlade(plug);
                        SkillTest.logString("[SBE] " + p.getName() + " использовал перк RageOfBlade!");
                        break;
                    }
                }
                if(v instanceof Player)
                {
                    SkillTest.logString("[SBE] " + p.getName() + " атаковал игрока " + v.getName() + "!");
                }
            }
        }
    
    Idk what's reason of this errors can be, pls help me...
     
    Last edited: Apr 11, 2021
  2. Offline

    KarimAKL

    @SteveStage
    1. The error and the stack trace do not match. Did you change the code afterward?
    2.
    Literals will never vary between values, so this comparison is pointless.
     
  3. Offline

    SteveStage

    I know that this comparison pointless, but it's just groundwork for system, which I'll write later (comparison if player has necessary class), but now I'm working on functional of one class's perks, not variability of classes.

    Yes, but in every case console points to EntityDamageByEntityEvent or EntityDamageEvent, not to another one event.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Apr 11, 2021
  4. Offline

    KarimAKL

    It would be great to have the error match the current code. Then the only possible NullPointerException is a line, not the whole method.
     
  5. Offline

    SteveStage

    Code:
    >.... [14:32:41 ERROR]: Could not pass event EntityDamageByEntityEvent to SkillTest v1.2
    java.lang.NullPointerException: null
    at main.Classes.Swordsman.perkSwordCombo(Swordsman.java:164) ~[?:?]
    at main.Handler.onAttack(Handler.java:85) ~[?:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor4.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.16.5.jar:git-Paper-574]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[patched_1.16.5.jar:git-Paper-574]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.16.5.jar:git-Paper-574]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:607) ~[patched_1.16.5.jar:git-Paper-574]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callEvent(CraftEventFactory.java:250) ~[patched_1.16.5.jar:git-Paper-574]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:1070) ~[patched_1.16.5.jar:git-Paper-574]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:957) ~[patched_1.16.5.jar:git-Paper-574]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:913) ~[patched_1.16.5.jar:git-Paper-574]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:1102) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.EntityLiving.damageEntity0(EntityLiving.java:1932) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.EntityHuman.damageEntity0(EntityHuman.java:941) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.EntityLiving.damageEntity(EntityLiving.java:1260) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.EntityHuman.damageEntity(EntityHuman.java:858) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.EntityPlayer.damageEntity(EntityPlayer.java:972) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.EntityHuman.attack(EntityHuman.java:1184) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.EntityPlayer.attack(EntityPlayer.java:1989) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:2396) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.PacketPlayInUseEntity.a(PacketPlayInUseEntity.java:55) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.PacketPlayInUseEntity.a(PacketPlayInUseEntity.java:12) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:35) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1252) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1245) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1206) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1120) ~[patched_1.16.5.jar:git-Paper-574]
    at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:289) ~[patched_1.16.5.jar:git-Paper-574]
    at java.lang.Thread.run(Thread.java:834) [?:?]
    EntityDamageByEntityEvent:
    Code:
    @EventHandler
        public void onAttack(EntityDamageByEntityEvent eev)
        {
            if(eev.getDamager() instanceof Player && eev.getDamager() == this.skpl.getPlayer() && eev.getEntity() instanceof LivingEntity)
            { // player damager from class SkilledPlayer hits living entity
                if(this.skpl.getSkillClass() instanceof Swordsman)
                {
                    Player p = (Player)eev.getDamager();
                    LivingEntity v = (LivingEntity)eev.getEntity();
                    this.swmn.setVictim(v);
                    this.swmn.setEvent(eev);
                    switch(this.swmn.getCurrentUsePerk())
                    {
                        case PERK_SC:
                        {
                            this.skpl.perkUse(1, plug);
                            SkillTest.logString("[SBE] " + p.getName() + " использовал перк SwordCombo!");
                            break;
                        }
                        case PERK_KS:
                        {
                            this.skpl.perkUse(2, plug);
                            SkillTest.logString("[SBE] " + p.getName() + " использовал перк KickSlash!");
                            break;
                        }
                        case PERK_BB:
                        {
                            if(is_fall_for_crit.contains(p))
                            {
                                this.skpl.perkUse(3, plug);
                                SkillTest.logString("[SBE] " + p.getName() + " использовал перк BlockBreaker!");
                                break;
                            }
                        }
                        case PERK_DW:
                        {
                            this.skpl.perkUse(4, plug);
                            SkillTest.logString("[SBE] " + p.getName() + " использовал перк DangerWound!");
                            break;
                        }
                        case PERK_ROB:
                        {
                            this.skpl.perkUse(5, plug);
                            SkillTest.logString("[SBE] " + p.getName() + " использовал перк RageOfBlade!");
                            break;
                        }
                    }
                    if(v instanceof Player)
                    {
                        SkillTest.logString("[SBE] " + p.getName() + " атаковал игрока " + v.getName() + "!");
                    }
                }
            }
            else if(eev.getEntity() instanceof Player && eev.getEntity() == this.skpl.getPlayer() && eev.getDamager() instanceof LivingEntity)
            { // player victim from class SkilledPlayer hits by living entity
                if(this.skpl.getSkillClass() instanceof Swordsman)
                {
                    if(this.swmn.getCurrentUsePerk() == PERK_SC && ((Swordsman)this.skpl.getSkillClass()).getComboHitCount() >= 1)
                    {
                        ((Swordsman)this.skpl.getSkillClass()).nullComboHitCount();
                        SkillTest.logString("[SBE] Сбив комбо!");
                    }
                }
            }
        }
    .perkSwordCombo:
    Code:
    public void perkSwordCombo(Plugin plug)
        {
            if(thissword.perk_sc_cd == true)
            {
                thissword.damager.sendMessage(ChatColor.GOLD + "Sorry, but you need to wait until cooldown ends!");
                return;
            }
            if(thissword.perk_using != PERK_NONE && thissword.perk_using != PERK_SC)
            {
                thissword.damager.sendMessage(ChatColor.GOLD + "You're already use another perk!");
                return;
            }
            switch(thissword.combo.getHitCount())
            {
                case 0:
                {
                    if(thissword.perk_sc_doubleattack == true)
                    {
                        thissword.event.setDamage(thissword.event.getDamage()/2);
                        thissword.perk_sc_doubleattack = false;
                    }
                    thissword.combo.increaseHitCount();
                    SkillTest.logString("[SBE] SC 1 attack!");
                    break;
                }
                case 1:
                {
                    thissword.combo.increaseHitCount();
                    SkillTest.logString("[SBE] SC 2 attack!");
                    break;
                }
                case 2:
                {
                    thissword.combo.increaseHitCount();
                    SkillTest.logString("[SBE] SC 3 attack!");
                    break;
                }
                case 3:
                {
                    thissword.event.setDamage(thissword.event.getDamage()*2);
                    thissword.perk_sc_doubleattack = true;
                    thissword.combo.increaseHitCount();
                    SkillTest.logString("[SBE] SC combo attack!");
                    break;
                }
                case 4:
                {
                    thissword.combo.nullHitCount();
                    SkillTest.logString("[SBE] SC off combo!");
                    break;
                }
            }
            if(thissword.perk_using != PERK_SC)
            {
                thissword.perk_using = PERK_SC;
                Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plug, new Runnable()
                {
                    @Override
                    public void run()
                    {
                        thissword.perk_using = -1;
                        if(thissword.perk_sc_doubleattack == true)
                        {
                            thissword.event.setDamage(thissword.event.getDamage()/2);
                            thissword.perk_sc_doubleattack = false;
                        }
                        thissword.combo.nullHitCount();
                    }
                }, 20L*10L); // 20 ticks = 1 second
            }
            if(thissword.perk_sc_cd_check == false)
            {
                thissword.perk_sc_cd_check = true;
                Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plug, new Runnable()
                {
                    @Override
                    public void run()
                    {
                        thissword.perk_sc_cd = false;
                        thissword.perk_sc_cd_check = false;
                    }
                }, 20L*3L*60L);
            }
        }
     
  6. Offline

    KarimAKL

    @SteveStage What is line 164 of your Swordsman class?
     
  7. Offline

    SteveStage

    Solved, just check if entity LivingEntity or Player (you can't get Entity armor or health because armorstands and frames are entity too), and check for this. operator inside timer of Bukkit Scheduler (you should create new method instead code into timer because scheduler call his own this. operator inside him). If you won't create check and write wrong method (get null) - you'll always get console errors and warnings.
     
Thread Status:
Not open for further replies.

Share This Page