The Endergetic Expansion

The Endergetic Expansion

25M Downloads

(1.15.2) Puff Bug pathfinding crashes in presence of The Midnight's Suavis Block

TelepathicGrunt opened this issue ยท 3 comments

commented

Hello! While someone was playing with my World Blender mod while combining The Endergetic Expansion with the Midnight, they found that when Puff Bugs spawn near Midnight's Suavis Block, the game crashes with this error:
java.lang.IllegalArgumentException: Cannot get property IntegerProperty{name=stage, clazz=class java.lang.Integer, values=[0, 1, 2, 3]} as it does not exist in Block{minecraft:grass_block}

It doesn't crash with Vanilla Grass Blocks but will with Suavis Blocks. Their block extends IGrowable and you can find their class here for a quick look at their code.
https://github.com/Cryptic-Mushroom/The-Midnight/blob/1.15.2/src/main/java/com/mushroom/midnight/common/block/SuavisBlock.java

This can easily be reproduced by having only Endergetic Expansion and The Midnight on, use /fill to place a ton of Suavis Block, then /summon a Puff Bug and the game will crash shortly afterwards.

Here's the crashlog and latest.log
Crashlog: https://hatebin.com/frofeernkq
Latest: https://hatebin.com/hrzcgaiebl

I hope this helps! let me know if this actually an issue on The Midnight's side and I'll go open an issue report with them. :)

commented

This is actually on Midnight's side. In line 93 in EndergeticFlyingNodeProcessor there is this if statement
if(ifluidstate.isEmpty() && blockstate.allowsMovement(this.blockaccess, blockpos$mutableblockpos.down(), PathType.AIR) && blockstate.isAir()).
This line is a near-exact copy of the code used in SwimNodeProcessor#isFree.

This part
blockstate.allowsMovement(this.blockaccess, blockpos$mutableblockpos.down(), PathType.AIR) specifically is the cause of the crash. Vanilla does this the same exact way.
And as a result, you can reproduce the crash by putting Suavis in water and spawning some fishes.

You can find the culprit code here:
@Override public boolean allowsMovement(BlockState state, IBlockReader world, BlockPos pos, PathType type) { return world.getBlockState(pos).get(STAGE) < 2; }
This method in SuavisBlock should be doing state.get(STAGE) < 2 and not world.getBlockState(pos).get(STAGE) < 2

commented

Ah thank you! I'll open up an issue report with The Midnight then!

commented

No problem, thanks.