diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java index 2c217d0b..58ffb614 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java @@ -30,6 +30,7 @@ public abstract class BlockStateBaseMixin extends StateHolder @Shadow private BlockBehaviour.BlockStateBase.Cache cache; @Shadow private FluidState fluidState; @Shadow private boolean isRandomlyTicking; + @Shadow @Deprecated private boolean legacySolid; @Shadow protected abstract BlockState asState(); @@ -114,4 +115,15 @@ public abstract class BlockStateBaseMixin extends StateHolder return this.owner.isRandomlyTicking(this.asState()); return this.isRandomlyTicking; } + + @Redirect(method = "*", at = @At( + value = "FIELD", + opcode = Opcodes.GETFIELD, + target = "Lnet/minecraft/world/level/block/state/BlockBehaviour$BlockStateBase;legacySolid:Z", + ordinal = 0 + )) + private boolean genCacheBeforeCheckingSolid(BlockBehaviour.BlockStateBase base) { + mfix$generateCache(); + return this.legacySolid; + } } diff --git a/fabric/src/test/java/net/minecraft/world/level/block/state/BlockStateCacheTest.java b/fabric/src/test/java/net/minecraft/world/level/block/state/BlockStateCacheTest.java index 26bc9c18..8c964567 100644 --- a/fabric/src/test/java/net/minecraft/world/level/block/state/BlockStateCacheTest.java +++ b/fabric/src/test/java/net/minecraft/world/level/block/state/BlockStateCacheTest.java @@ -28,6 +28,9 @@ public class BlockStateCacheTest { BlockState stoneBlock = Blocks.STONE.defaultBlockState(); assertTrue(((IBlockState)stoneBlock).isCacheInvalid()); assertNull(stoneBlock.cache); + + // make sure lazy cache correctly handles solid + assertTrue(stoneBlock.isSolid()); } /**