diff --git a/src/main/java/org/embeddedt/modernfix/blockstate/BlockStateCacheHandler.java b/src/main/java/org/embeddedt/modernfix/blockstate/BlockStateCacheHandler.java index 2ec1cdaf..0caf6c23 100644 --- a/src/main/java/org/embeddedt/modernfix/blockstate/BlockStateCacheHandler.java +++ b/src/main/java/org/embeddedt/modernfix/blockstate/BlockStateCacheHandler.java @@ -26,9 +26,10 @@ public class BlockStateCacheHandler { .add("extrastorage") .build(); public static void handleStateCache(BlockState state) { - if(BakeReason.currentBakeReason == BakeReason.FREEZE - || BakeReason.currentBakeReason == BakeReason.REMOTE_SNAPSHOT_INJECT - || (BakeReason.currentBakeReason == BakeReason.LOCAL_SNAPSHOT_INJECT && ModernFix.runningFirstInjection)) { + BakeReason reason = BakeReason.getCurrentBakeReason(); + if(reason == BakeReason.FREEZE + || reason == BakeReason.REMOTE_SNAPSHOT_INJECT + || (reason == BakeReason.LOCAL_SNAPSHOT_INJECT && ModernFix.runningFirstInjection)) { ((IBlockState)state).clearCache(); } else { state.initCache(); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/reduce_blockstate_cache_rebuilds/GameDataMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/reduce_blockstate_cache_rebuilds/GameDataMixin.java index 71cb50d0..3c5cd53e 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/reduce_blockstate_cache_rebuilds/GameDataMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/reduce_blockstate_cache_rebuilds/GameDataMixin.java @@ -17,31 +17,31 @@ import java.util.Map; public class GameDataMixin { @Inject(method = "freezeData", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/BiMap;forEach(Ljava/util/function/BiConsumer;)V", ordinal = 1), remap = false) private static void markFreezeBakeReason(CallbackInfo ci) { - BakeReason.currentBakeReason = BakeReason.FREEZE; + BakeReason.setCurrentBakeReason(BakeReason.FREEZE); } @Inject(method = "freezeData", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/registries/GameData;fireRemapEvent(Ljava/util/Map;Z)V"), remap = false) private static void markEmptyBakeReason1(CallbackInfo ci) { - BakeReason.currentBakeReason = null; + BakeReason.setCurrentBakeReason(null); } @Inject(method = "revertTo", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/BiMap;forEach(Ljava/util/function/BiConsumer;)V", ordinal = 1), remap = false) private static void markRevertBakeReason(CallbackInfo ci) { - BakeReason.currentBakeReason = BakeReason.REVERT; + BakeReason.setCurrentBakeReason(BakeReason.REVERT); } @Inject(method = "revertTo", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/BiMap;forEach(Ljava/util/function/BiConsumer;)V", ordinal = 1, shift = At.Shift.AFTER), remap = false) private static void markEmptyBakeReason2(CallbackInfo ci) { - BakeReason.currentBakeReason = null; + BakeReason.setCurrentBakeReason(null); } @Inject(method = "injectSnapshot", at = @At("HEAD"), remap = false) private static void markSnapshotInjectBakeReason(Map snapshot, boolean injectFrozenData, boolean isLocalWorld, CallbackInfoReturnable> cir) { - BakeReason.currentBakeReason = isLocalWorld ? BakeReason.LOCAL_SNAPSHOT_INJECT : BakeReason.REMOTE_SNAPSHOT_INJECT; + BakeReason.setCurrentBakeReason(isLocalWorld ? BakeReason.LOCAL_SNAPSHOT_INJECT : BakeReason.REMOTE_SNAPSHOT_INJECT); } @Inject(method = "injectSnapshot", at = @At("RETURN"), remap = false) private static void markEmptyBakeReason2(Map snapshot, boolean injectFrozenData, boolean isLocalWorld, CallbackInfoReturnable> cir) { - BakeReason.currentBakeReason = null; + BakeReason.setCurrentBakeReason(null); } } diff --git a/src/main/java/org/embeddedt/modernfix/util/BakeReason.java b/src/main/java/org/embeddedt/modernfix/util/BakeReason.java index 1fba3027..e7074389 100644 --- a/src/main/java/org/embeddedt/modernfix/util/BakeReason.java +++ b/src/main/java/org/embeddedt/modernfix/util/BakeReason.java @@ -1,9 +1,25 @@ package org.embeddedt.modernfix.util; +import org.embeddedt.modernfix.ModernFix; + public enum BakeReason { FREEZE, REMOTE_SNAPSHOT_INJECT, LOCAL_SNAPSHOT_INJECT, - REVERT; - public static BakeReason currentBakeReason = null; + REVERT, + UNKNOWN; + private static BakeReason currentBakeReason = null; + private static boolean bakeReasonWarned = false; + + public static BakeReason getCurrentBakeReason() { + if(currentBakeReason == null && !bakeReasonWarned) { + ModernFix.LOGGER.warn("No bake reason found, mixin probably not applied correctly", new IllegalStateException()); + bakeReasonWarned = false; + } + return currentBakeReason; + } + + public static void setCurrentBakeReason(BakeReason reason) { + currentBakeReason = reason; + } }