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.
Description
CMI throws repeated
NullPointerExceptionerrors on a Folia-based server when handlingEntityDamageByEntityEvent.The exception comes from CMI's HP boss bar listener:
com.Zrips.CMI.Modules.HpBar.HpBarListener.EntityDamageEntityEventIt then calls CMILib Folia scheduler with a null entity:
net.Zrips.CMILib.Version.Schedulers.CMIFoliaImpl.runAtEntityEnvironment
26.1.2-770-HEAD@b130feb26.1.226.1.2.build.770-stableOpenJDK 25.0.3+9-LTS, Eclipse Adoptium Temurin6.8.0-117-generic9.8.7.51.5.9.61.7.3-CMI2.12.25.9.15.9.1Relevant CMI config
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.checkAndPerformAttacknet.minecraft.world.entity.animal.fox.Fox$FoxPounceGoal.tickThe 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:
Full stack trace
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.