team-abnormals / endergetic

Overhauls the End's visuals with themed and wildly diverse biomes
https://www.curseforge.com/minecraft/mc-mods/endergetic
Other
150 stars 50 forks source link

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

Closed TelepathicGrunt closed 4 years ago

TelepathicGrunt commented 4 years ago

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. :)

SmellyModder commented 4 years ago

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

TelepathicGrunt commented 4 years ago

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

SmellyModder commented 4 years ago

No problem, thanks.