Mekanism

Mekanism

111M Downloads

BoilerValidator crashes server/client when boiler is built

Avlyssna opened this issue ยท 2 comments

commented

Issue description:

Once a boiler is built on the server, the client connections are closed with a buffer-overflow exception or a generic connection close. On single-player, the client crashes.

Steps to reproduce:

  1. For the bottom layer, place 3x3 blocks of boiler casing.
  2. For the second layer, place a pressure disperser in the middle with a pressure valve next to it on any side. Fill in the other 7 blocks with boiler casing.
  3. For the top layer, place 3x3 blocks of boiler casing.
  4. When the last block of boiler casing is placed, the server / client should crash.

Version: 1.16.1

Forge: 1.16.1-forge-32.0.69
Mekanism: Mekanism-1.16.1-10.0.2.425

Server crash log

net.minecraft.crash.ReportedException: Ticking block entity
        at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:859) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
        at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:286) ~[?:?] {re:classloading,pl:accesstransformer:B}
        at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:791) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
        at net.minecraft.server.MinecraftServer.func_240802_v_(MinecraftServer.java:643) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
        at net.minecraft.server.MinecraftServer.lambda$func_240784_a_$0(MinecraftServer.java:230) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252] {}
Caused by: java.lang.NullPointerException
        at mekanism.common.content.boiler.BoilerValidator.lambda$postcheck$1(BoilerValidator.java:111) ~[?:10.0.2] {re:classloading}
        at mekanism.common.lib.multiblock.FormationProtocol.explore(FormationProtocol.java:111) ~[?:10.0.2] {re:classloading}
        at mekanism.common.lib.multiblock.FormationProtocol.explore(FormationProtocol.java:107) ~[?:10.0.2] {re:classloading}
        at mekanism.common.content.boiler.BoilerValidator.postcheck(BoilerValidator.java:110) ~[?:10.0.2] {re:classloading}
        at mekanism.common.content.boiler.BoilerValidator.postcheck(BoilerValidator.java:21) ~[?:10.0.2] {re:classloading}
        at mekanism.common.lib.multiblock.FormationProtocol.buildStructure(FormationProtocol.java:56) ~[?:10.0.2] {re:classloading}
        at mekanism.common.lib.multiblock.FormationProtocol.doUpdate(FormationProtocol.java:69) ~[?:10.0.2] {re:classloading}
        at mekanism.common.lib.multiblock.Structure.runUpdate(Structure.java:95) ~[?:10.0.2] {re:classloading}
        at mekanism.common.lib.multiblock.Structure.tick(Structure.java:86) ~[?:10.0.2] {re:classloading}
        at mekanism.common.tile.prefab.TileEntityMultiblock.onUpdateServer(TileEntityMultiblock.java:108) ~[?:10.0.2] {re:classloading}
        at mekanism.common.tile.base.TileEntityMekanism.func_73660_a(TileEntityMekanism.java:494) ~[?:10.0.2] {re:classloading}
        at net.minecraft.world.World.func_217391_K(World.java:533) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
        at net.minecraft.world.server.ServerWorld.func_72835_b(ServerWorld.java:364) ~[?:?] {re:classloading,pl:runtimedistcleaner:A}
        at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:855) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
        ... 5 more

Client crash log

net.minecraft.crash.ReportedException: Ticking block entity
	at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:859) ~[?:?]
	at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:791) ~[?:?]
	at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:121) ~[?:?]
	at net.minecraft.server.MinecraftServer.func_240802_v_(MinecraftServer.java:643) [?:?]
	at net.minecraft.server.MinecraftServer.lambda$func_240784_a_$0(MinecraftServer.java:230) [?:?]
	at net.minecraft.server.MinecraftServer$$Lambda$7093/1196971908.run(Unknown Source) [?:?]
	at java.lang.Thread.run(Thread.java:745) [?:1.8.0_51]
Caused by: java.lang.NullPointerException
	at mekanism.common.content.boiler.BoilerValidator.lambda$postcheck$1(BoilerValidator.java:111) ~[?:10.0.2]
	at mekanism.common.content.boiler.BoilerValidator$$Lambda$8078/1540029927.test(Unknown Source) ~[?:?]
	at mekanism.common.lib.multiblock.FormationProtocol.explore(FormationProtocol.java:111) ~[?:10.0.2]
	at mekanism.common.lib.multiblock.FormationProtocol.explore(FormationProtocol.java:107) ~[?:10.0.2]
	at mekanism.common.content.boiler.BoilerValidator.postcheck(BoilerValidator.java:110) ~[?:10.0.2]
	at mekanism.common.content.boiler.BoilerValidator.postcheck(BoilerValidator.java:21) ~[?:10.0.2]
	at mekanism.common.lib.multiblock.FormationProtocol.buildStructure(FormationProtocol.java:56) ~[?:10.0.2]
	at mekanism.common.lib.multiblock.FormationProtocol.doUpdate(FormationProtocol.java:69) ~[?:10.0.2]
	at mekanism.common.lib.multiblock.Structure.runUpdate(Structure.java:95) ~[?:10.0.2]
	at mekanism.common.lib.multiblock.Structure.tick(Structure.java:86) ~[?:10.0.2]
	at mekanism.common.tile.prefab.TileEntityMultiblock.onUpdateServer(TileEntityMultiblock.java:108) ~[?:10.0.2]
	at mekanism.common.tile.base.TileEntityMekanism.func_73660_a(TileEntityMekanism.java:494) ~[?:10.0.2]
	at net.minecraft.world.World.func_217391_K(World.java:533) ~[?:?]
	at net.minecraft.world.server.ServerWorld.func_72835_b(ServerWorld.java:364) ~[?:?]
	at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:855) ~[?:?]
	... 6 more
commented

And here is the full crash report: crash-2020-07-19_17.43.37-server.txt

commented

Thank you for the detailed error report, it seems when we rewrote our multiblock validation system we missed an edge case. This will be fixed in 10.0.3