Plonk

Plonk

2M Downloads

Enderman crashes server when teleporting to plonk items

Khazoda opened this issue · 3 comments

commented

crash-2021-01-03_00.50.56-server.txt
crash-2021-01-03_00.59.49-server.txt
crash-2021-01-03_00.40.43-server.txt

This isn't thoroughly tested, but I had some plonk items on my wall at the exact coordinates that the crash reports mention the enderman throwing the nullpointer was at. I think he may have collided/tried to pick up the plonk block or something? Regardless, the only fix was killing all enderman from the console and then logging in, otherwise upon chunkload the server would crash again.

commented

Hmm, this is definitely a confusing one.
The enderman is calling getShape on the block:

java.lang.NullPointerException: Ticking entity
	at java.util.Objects.requireNonNull(Objects.java:203) ~[?:1.8.0_201] {}
	at com.breakinblocks.plonk.common.block.BlockPlacedItems.getPickedSlot(BlockPlacedItems.java:179) ~[plonk:?] {re:classloading}
	at com.breakinblocks.plonk.common.block.BlockPlacedItems.getShape(BlockPlacedItems.java:103) ~[plonk:?] {re:classloading}
	at net.minecraft.block.AbstractBlock$AbstractBlockState.getShape(AbstractBlock.java:535) ~[?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:losttrinkets.mixins.json:AbstractBlockStateMixin,pl:mixin:APP:immersiveengineering.mixins.json:coremods.AbstractBlockStateMixin,pl:mixin:A,pl:runtimedistcleaner:A}
	at net.minecraft.util.math.RayTraceContext$BlockMode.get(RayTraceContext.java:57) ~[?:?] {re:classloading}
	at net.minecraft.util.math.RayTraceContext.getBlockShape(RayTraceContext.java:38) ~[?:?] {re:classloading}
	at net.minecraft.world.IBlockReader.lambda$rayTraceBlocks$0(IBlockReader.java:50) ~[?:?] {re:mixin,re:classloading}
	at net.minecraft.world.IBlockReader.doRayTrace(IBlockReader.java:142) ~[?:?] {re:mixin,re:classloading}
	at net.minecraft.world.IBlockReader.rayTraceBlocks(IBlockReader.java:45) ~[?:?] {re:mixin,re:classloading}
	at net.minecraft.entity.monster.EndermanEntity$TakeBlockGoal.tick(EndermanEntity.java:523) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:assets/botania/botania.mixins.json:MixinEndermanPickupBlock,pl:mixin:A}
	at net.minecraft.entity.ai.goal.PrioritizedGoal.tick(SourceFile:55) ~[?:?] {re:classloading}
	...

There's a null check there to confirm that the tile entity is not null at that position, which is what is causing the crash.
getShape, which uses getPickedSlot, also confirms that the tile entity is null before it calls getPickedSlot.
So the tile must have been removed from the world between getShape being called and getPickedSlot
This might take a bit... I'm thinking I could also pass the tile entity reference to getPickedSlot directly so that it can't be turned null.
Also probably making sure that the entity is a player too.
Will post back once I get to take a closer look.

commented

Okay, just released a fix with Plonk v9.0.6.
Let me know if works out and reopen if it's still broken. :)

commented

Will test the new build on my server and get back to you here in a few days 😇thanks for the hard work!