
NPE on onPlayerUseToolSecondary
namsic6460 opened this issue ยท 4 comments
Version: 0.0.4.0-beta1
Modpack: Craft To Exile 2 (v0.6.1)
I added this mod to modpack and encountered an NPE error. The modpack I am playing includes the Minecolonies mod, and there was an issue with the farmer AI. Upon investigation, I found that the problem was related to this mod.
As a temporary fix, I modified the code and built it, which resolved the issue. What I did was simply check if the event.getPlayer function returned null before entering the if statement of the event. If it was null, I just used return. I'm not sure if similar issues can occur with other events, but it seems like a good idea to fix this part for now.
Full Error Log
[087์2024 01:51:23.615] [Server thread/WARN] [minecolonies/]: Statemachine for state PREPARING threw an exception: java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.m_20193_()" because "entity" is null at de.z0rdak.yawp.handler.flags.HandlerUtil.getEntityDim(HandlerUtil.java:70) ~[yawp-1.20.1-0.0.4.0-beta1-forge.jar%23616!/:0.0.4.0-beta1] at de.z0rdak.yawp.handler.flags.PlayerFlagHandler.onPlayerUseToolSecondary(PlayerFlagHandler.java:492) ~[yawp-1.20.1-0.0.4.0-beta1-forge.jar%23616!/:0.0.4.0-beta1] at de.z0rdak.yawp.handler.flags.__PlayerFlagHandler_onPlayerUseToolSecondary_BlockToolModificationEvent.invoke(.dynamic) ~[yawp-1.20.1-0.0.4.0-beta1-forge.jar%23616!/:0.0.4.0-beta1] at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:73) ~[eventbus-6.0.5.jar%2352!/:?] at net.minecraftforge.eventbus.EventBus.post(EventBus.java:315) ~[eventbus-6.0.5.jar%2352!/:?] at net.minecraftforge.eventbus.EventBus.post(EventBus.java:296) ~[eventbus-6.0.5.jar%2352!/:?] at net.minecraftforge.event.ForgeEventFactory.onToolUse(ForgeEventFactory.java:429) ~[forge-1.20.1-47.2.18-universal.jar%23634!/:?] at net.minecraftforge.common.extensions.IForgeBlockState.getToolModifiedState(IForgeBlockState.java:661) ~[forge-1.20.1-47.2.18-universal.jar%23634!/:?] at com.minecolonies.core.entity.ai.workers.production.agriculture.EntityAIWorkFarmer.findHoeableSurface(EntityAIWorkFarmer.java:375) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.core.entity.ai.workers.production.agriculture.EntityAIWorkFarmer.lambda$prepareForFarming$1(EntityAIWorkFarmer.java:268) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.core.entity.ai.workers.production.agriculture.EntityAIWorkFarmer.checkIfShouldExecute(EntityAIWorkFarmer.java:312) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.core.entity.ai.workers.production.agriculture.EntityAIWorkFarmer.prepareForFarming(EntityAIWorkFarmer.java:268) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.basestatemachine.BasicTransition.getNextState(BasicTransition.java:79) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.basestatemachine.BasicStateMachine.transitionToNext(BasicStateMachine.java:163) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.basestatemachine.BasicStateMachine.checkTransition(BasicStateMachine.java:149) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.tickratestatemachine.TickRateStateMachine.checkTransition(TickRateStateMachine.java:126) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.tickratestatemachine.TickRateStateMachine.tick(TickRateStateMachine.java:102) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.core.entity.ai.workers.AbstractAISkeleton.tick(AbstractAISkeleton.java:63) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.core.entity.ai.workers.CitizenAI.lambda$registerWorkAI$4(CitizenAI.java:97) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.basestatemachine.BasicTransition.getNextState(BasicTransition.java:79) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.basestatemachine.BasicStateMachine.transitionToNext(BasicStateMachine.java:163) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.basestatemachine.BasicStateMachine.checkTransition(BasicStateMachine.java:149) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.tickratestatemachine.TickRateStateMachine.checkTransition(TickRateStateMachine.java:126) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.tickratestatemachine.TickRateStateMachine.tick(TickRateStateMachine.java:102) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.core.entity.citizen.EntityCitizen.lambda$new$11(EntityCitizen.java:303) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.basestatemachine.BasicTransition.checkCondition(BasicTransition.java:87) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.basestatemachine.BasicStateMachine.checkTransition(BasicStateMachine.java:138) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.tickratestatemachine.TickRateStateMachine.checkTransition(TickRateStateMachine.java:126) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.ai.statemachine.tickratestatemachine.TickRateStateMachine.tick(TickRateStateMachine.java:102) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.api.entity.citizen.AbstractEntityCitizen.m_8107_(AbstractEntityCitizen.java:431) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at com.minecolonies.core.entity.citizen.EntityCitizen.m_8107_(EntityCitizen.java:717) ~[minecolonies-1.20.1-1.1.593-BETA.jar%23516!/:1.20.1-1.1.593-BETA] at net.minecraft.world.entity.LivingEntity.m_8119_(LivingEntity.java:2298) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at net.minecraft.world.entity.Mob.m_8119_(Mob.java:337) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at net.minecraft.server.level.ServerLevel.m_8647_(ServerLevel.java:693) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at net.minecraft.world.level.Level.mixinextras$bridge$accept$143(Level.java) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at com.bawnorton.neruina.handler.TickHandler.safelyTickEntities(TickHandler.java:91) ~[neruina-forge-2.0.0-beta.10+1.20.1.jar%23529!/:?] at net.minecraft.world.level.Level.wrapOperation$bek000$catchTickingEntities$notTheCauseOfTickLag(Level.java:3040) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at net.minecraft.world.level.Level.m_46653_(Level.java:479) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at net.minecraft.server.level.ServerLevel.m_184063_(ServerLevel.java:343) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at net.minecraft.world.level.entity.EntityTickList.m_156910_(EntityTickList.java:54) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at net.minecraft.server.level.ServerLevel.m_8793_(ServerLevel.java:323) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at net.minecraft.server.MinecraftServer.m_5703_(MinecraftServer.java:893) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at net.minecraft.server.dedicated.DedicatedServer.m_5703_(DedicatedServer.java:283) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:814) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:661) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:251) ~[server-1.20.1-20230612.114412-srg.jar%23629!/:?] at java.lang.Thread.run(Thread.java:1583) ~[?:?] [087์2024 01:51:23.616] [Server thread/ERROR] [minecolonies/]: Pausing Citizen Will U. Fuentes (com.minecolonies.job.farmer) in colony:3 at BlockPos{x=-5235, y=74, z=4525} for 6400 Seconds because of error:
I just released 0.0.4.0-beta2 for 1.20.1 for Forge which should fix this bug.
Edit: The patch for 1.16.5 and 1.18.2 will follow most likely tomorrow.
Hello, I'm one of the devs behind Minecolonies. We just had another report of this mod causing nullpointers on our code.
Like @namsic6460 above here mentioned nullability is important to consider, it's not for no reason that Forge marks the player argument as nullable because entities can programatically invoke this (or other events), our farmer uses this to check what blocks may be converted to farmland.
Preferably all event calls need a player nullability check as there's no guarantee the event is necessarily made by a player.
Hey there,
Thank you for the report @namsic6460 and thanks @Thodor12 for the additional context.
As a solo dev of this mod I was struggling to keep up with issues and bugs in the last time.
I am quite aware of the importance of null checks. It must have slipped through in the last update - I am sorry about that.
I try to fix this (and some other bugs) in the next few days.
Iโll close this issue as soon as I am done so youโll get notified, too.
Best regards
Zordak