Make BakeReason more resilient
This commit is contained in:
parent
8e514a68ee
commit
9e3ae9d8c0
|
|
@ -26,9 +26,10 @@ public class BlockStateCacheHandler {
|
||||||
.add("extrastorage")
|
.add("extrastorage")
|
||||||
.build();
|
.build();
|
||||||
public static void handleStateCache(BlockState state) {
|
public static void handleStateCache(BlockState state) {
|
||||||
if(BakeReason.currentBakeReason == BakeReason.FREEZE
|
BakeReason reason = BakeReason.getCurrentBakeReason();
|
||||||
|| BakeReason.currentBakeReason == BakeReason.REMOTE_SNAPSHOT_INJECT
|
if(reason == BakeReason.FREEZE
|
||||||
|| (BakeReason.currentBakeReason == BakeReason.LOCAL_SNAPSHOT_INJECT && ModernFix.runningFirstInjection)) {
|
|| reason == BakeReason.REMOTE_SNAPSHOT_INJECT
|
||||||
|
|| (reason == BakeReason.LOCAL_SNAPSHOT_INJECT && ModernFix.runningFirstInjection)) {
|
||||||
((IBlockState)state).clearCache();
|
((IBlockState)state).clearCache();
|
||||||
} else {
|
} else {
|
||||||
state.initCache();
|
state.initCache();
|
||||||
|
|
|
||||||
|
|
@ -17,31 +17,31 @@ import java.util.Map;
|
||||||
public class GameDataMixin {
|
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)
|
@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) {
|
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)
|
@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) {
|
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)
|
@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) {
|
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)
|
@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) {
|
private static void markEmptyBakeReason2(CallbackInfo ci) {
|
||||||
BakeReason.currentBakeReason = null;
|
BakeReason.setCurrentBakeReason(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "injectSnapshot", at = @At("HEAD"), remap = false)
|
@Inject(method = "injectSnapshot", at = @At("HEAD"), remap = false)
|
||||||
private static void markSnapshotInjectBakeReason(Map<ResourceLocation, ForgeRegistry.Snapshot> snapshot, boolean injectFrozenData, boolean isLocalWorld, CallbackInfoReturnable<Multimap<ResourceLocation, ResourceLocation>> cir) {
|
private static void markSnapshotInjectBakeReason(Map<ResourceLocation, ForgeRegistry.Snapshot> snapshot, boolean injectFrozenData, boolean isLocalWorld, CallbackInfoReturnable<Multimap<ResourceLocation, ResourceLocation>> 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)
|
@Inject(method = "injectSnapshot", at = @At("RETURN"), remap = false)
|
||||||
private static void markEmptyBakeReason2(Map<ResourceLocation, ForgeRegistry.Snapshot> snapshot, boolean injectFrozenData, boolean isLocalWorld, CallbackInfoReturnable<Multimap<ResourceLocation, ResourceLocation>> cir) {
|
private static void markEmptyBakeReason2(Map<ResourceLocation, ForgeRegistry.Snapshot> snapshot, boolean injectFrozenData, boolean isLocalWorld, CallbackInfoReturnable<Multimap<ResourceLocation, ResourceLocation>> cir) {
|
||||||
BakeReason.currentBakeReason = null;
|
BakeReason.setCurrentBakeReason(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,25 @@
|
||||||
package org.embeddedt.modernfix.util;
|
package org.embeddedt.modernfix.util;
|
||||||
|
|
||||||
|
import org.embeddedt.modernfix.ModernFix;
|
||||||
|
|
||||||
public enum BakeReason {
|
public enum BakeReason {
|
||||||
FREEZE,
|
FREEZE,
|
||||||
REMOTE_SNAPSHOT_INJECT,
|
REMOTE_SNAPSHOT_INJECT,
|
||||||
LOCAL_SNAPSHOT_INJECT,
|
LOCAL_SNAPSHOT_INJECT,
|
||||||
REVERT;
|
REVERT,
|
||||||
public static BakeReason currentBakeReason = null;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user