Skip to content

Folia: CMI HpBarListener throws NullPointerException on EntityDamageByEntityEvent #10285

@DimaSergeew

Description

@DimaSergeew

Description

CMI throws repeated NullPointerException errors on a Folia-based server when handling EntityDamageByEntityEvent.

The exception comes from CMI's HP boss bar listener:

com.Zrips.CMI.Modules.HpBar.HpBarListener.EntityDamageEntityEvent

It then calls CMILib Folia scheduler with a null entity:

net.Zrips.CMILib.Version.Schedulers.CMIFoliaImpl.runAtEntity

Environment

  • Server software: Canvas
  • Canvas version: 26.1.2-770-HEAD@b130feb
  • Minecraft version: 26.1.2
  • API version: 26.1.2.build.770-stable
  • Folia/regionized scheduler: yes
  • Java: OpenJDK 25.0.3+9-LTS, Eclipse Adoptium Temurin
  • OS: Linux amd64, kernel 6.8.0-117-generic
  • CMI: 9.8.7.5
  • CMILib: 1.5.9.6
  • Vault: 1.7.3-CMI
  • PlaceholderAPI: 2.12.2
  • ViaVersion: 5.9.1
  • ViaBackwards: 5.9.1

Relevant CMI config

BossBar:
  # Enables or disbales bossbar hp bar on 1.9+ servers
  # Only players with cmi.bossbar.hpbar permission node can see it
  # Permission node is been rechecked no more often than every minute for efficiency
  HpBarEnabled: true
  # List of mob types which will be excluded from hp boss bar
  HpBarBlackList:
  - Ender_dragon

What happened

After a player was online and changed gamemode shortly before the issue, the server started logging repeated errors from CMI during fox melee/pounce damage events.

The relevant vanilla stack frames show the event was caused by fox AI:

  • net.minecraft.world.entity.animal.fox.Fox$FoxMeleeAttackGoal.checkAndPerformAttack
  • net.minecraft.world.entity.animal.fox.Fox$FoxPounceGoal.tick

The error repeated several times within a few seconds.

Expected behavior

CMI should handle the damage event without throwing an exception.

If the HP bar target/viewer entity is null or not valid on Folia, CMI/CMILib should skip scheduling instead of calling entity.getScheduler() on a null entity.

Actual behavior

CMI throws:

Could not pass event EntityDamageByEntityEvent to CMI v9.8.7.5
java.lang.NullPointerException: Cannot invoke "org.bukkit.entity.Entity.getScheduler()" because "entity" is null

Full stack trace

[13:08:38 ERROR]: Could not pass event EntityDamageByEntityEvent to CMI v9.8.7.5
java.lang.NullPointerException: Cannot invoke "org.bukkit.entity.Entity.getScheduler()" because "entity" is null
        at CMILib1.5.9.6.jar//net.Zrips.CMILib.Version.Schedulers.CMIFoliaImpl.runAtEntity(CMIFoliaImpl.java:181) ~[?:?]
        at CMILib1.5.9.6.jar//net.Zrips.CMILib.Version.Schedulers.CMIScheduler.runAtEntity(CMIScheduler.java:152) ~[?:?]
        at CMI-9.8.7.5.jar//com.Zrips.CMI.Modules.HpBar.HpBarListener.EntityDamageEntityEvent(HpBarListener.java:53) ~[?:?]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[canvas-api-26.1.2.build.770-stable.jar:?]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:71) ~[canvas-api-26.1.2.build.770-stable.jar:?]
        at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:57) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:131) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:628) ~[canvas-api-26.1.2.build.770-stable.jar:?]
        at org.bukkit.event.Event.callEvent(Event.java:46) ~[canvas-api-26.1.2.build.770-stable.jar:?]
        at org.bukkit.craftbukkit.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:1180) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at org.bukkit.craftbukkit.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:1170) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at org.bukkit.craftbukkit.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:1100) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at org.bukkit.craftbukkit.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:1061) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at org.bukkit.craftbukkit.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:1224) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.LivingEntity.handleEntityDamage(LivingEntity.java:2540) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.LivingEntity.hurtServer(LivingEntity.java:1531) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.Mob.doHurtTarget(Mob.java:1591) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.animal.fox.Fox$FoxPounceGoal.tick(Fox.java:1257) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.ai.goal.WrappedGoal.tick(WrappedGoal.java:63) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.ai.goal.GoalSelector.tickRunningGoals(GoalSelector.java:115) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.ai.goal.GoalSelector.tick(GoalSelector.java:109) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.Mob.serverAiStep(Mob.java:828) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.LivingEntity.aiStep(LivingEntity.java:3763) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.Mob.aiStep(Mob.java:552) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.AgeableMob.aiStep(AgeableMob.java:209) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.animal.Animal.aiStep(Animal.java:71) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.animal.fox.Fox.aiStep(Fox.java:241) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.LivingEntity.tick(LivingEntity.java:3478) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.Mob.tick(Mob.java:413) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.entity.animal.fox.Fox.tick(Fox.java:562) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.server.level.ServerLevel.tickNonPassenger(ServerLevel.java:1492) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.world.level.Level.guardEntityTick(Level.java:1629) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.server.level.ServerLevel.lambda$tick$0(ServerLevel.java:952) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at io.papermc.paper.threadedregions.RegionizedWorldData.forEachTickingEntity(RegionizedWorldData.java:628) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.server.level.ServerLevel.tick(ServerLevel.java:936) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1943) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1738) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at net.minecraft.server.dedicated.DedicatedServer.tickServer(DedicatedServer.java:460) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at io.papermc.paper.threadedregions.TickRegions$ConcreteRegionTickHandle.tickRegion(TickRegions.java:519) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at io.papermc.paper.threadedregions.TickRegionScheduler$RegionScheduleHandle.runTick(TickRegionScheduler.java:524) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at io.canvasmc.canvas.tick.AffinitySchedulerThreadPool$TickThreadRunner.run(AffinitySchedulerThreadPool.java:625) ~[canvas-26.1.2.jar:26.1.2-770-b130feb]
        at java.base/java.lang.Thread.run(Thread.java:1474) ~[?:?]

Additional notes

The likely affected feature is CMI bossbar HP bar (BossBar.HpBarEnabled: true).

A possible workaround may be disabling the HP bar, but I have not applied it because I want to keep the feature enabled and report the underlying Folia/null-entity issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions