TerraFirmaCraft

TerraFirmaCraft

2M Downloads

Server Crash on Fruit Tree Branch break

AnodeCathode opened this issue ยท 2 comments

commented

When a player breaks a fruit tree branch (apple in 1 example) with an axe to obtain a sapling, the server occasionally crashes with:

java.lang.IllegalArgumentException: Cannot get property PropertyEnum{name=state, clazz=class net.dries007.tfc.objects.blocks.agriculture.BlockFruitTreeLeaves$EnumLeafState, values=[NORMAL, FLOWERING, FRUIT]} as it does not exist in BlockStateContainer{block=tfc:fruit_trees/trunk/red_apple, properties=[east, north, south, west]}

Seems like randomTick is executing even though the Leaves have disappeared due to the branch being broken.

Make sure to include:

  1. What did you expect to happen? Sapling drop, fruit tree minus a branch

  2. What actually happened instead (i.e. what was the bug): Sapling did drop, fruit tree was minus a branch, server was minus a running state.

  3. If it was a crash, upload the full log file (latest.log):
    Crash Report
    Log

To Reproduce
Attention to detail is important!

  1. Do 'cut fruit tree sapling
  2. Then do 'watch server crash

Meta Info

  • TFC Version: terrafirmacraft-mc1.12.2-1.7.5.163
  • Were any other mods included? Can you reproduce it without these other mods? TNFC

Is the random tick firing sometime after the branch has been broken but before it's updated?

commented

Pulled TickCentral and LagGoggles out to ensure they were not doing some thing odd. So this is without those in the stack

---- Minecraft Crash Report ----
// Surprise! Haha. Well, this is awkward.

Time: 2020-10-20 22:48:46 MDT
Description: Exception ticking world

java.lang.IllegalArgumentException: Cannot get property PropertyEnum{name=state, clazz=class net.dries007.tfc.objects.blocks.agriculture.BlockFruitTreeLeaves$EnumLeafState, values=[NORMAL, FLOWERING, FRUIT]} as it does not exist in BlockStateContainer{block=minecraft:air, properties=[]}
at net.minecraft.block.state.BlockStateContainer$StateImplementation.getValue(BlockStateContainer.java:201)
at net.dries007.tfc.objects.blocks.agriculture.BlockFruitTreeLeaves.randomTick(BlockFruitTreeLeaves.java:120)
at net.minecraft.world.WorldServer.updateBlocks(WorldServer.java:476)
at net.minecraft.world.WorldServer.tick(WorldServer.java:225)
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:756)
at net.minecraft.server.dedicated.DedicatedServer.updateTimeLightAndEntities(DedicatedServer.java:397)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:668)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:526)
at java.lang.Thread.run(Thread.java:748)

commented

If it uses the IBlockState passed in randomTick, this shouldn't happen. Right now it is now calling world#getBlockState.