diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/ctm_resourceutil_cme/ResourceUtilMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/ctm_resourceutil_cme/ResourceUtilMixin.java new file mode 100644 index 00000000..7e5e41b2 --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/ctm_resourceutil_cme/ResourceUtilMixin.java @@ -0,0 +1,35 @@ +package org.embeddedt.modernfix.forge.mixin.bugfix.ctm_resourceutil_cme; + +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.annotation.RequiresMod; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import team.chisel.ctm.client.util.ResourceUtil; + +import java.util.Collections; +import java.util.Map; +import java.util.concurrent.ConcurrentMap; + +@Mixin(ResourceUtil.class) +@RequiresMod("ctm") +@ClientOnlyMixin +@SuppressWarnings({"rawtypes", "unchecked"}) +public class ResourceUtilMixin { + @Shadow @Final @Mutable + private static Map metadataCache; + + /** + * @author embeddedt + * @reason quick fix to prevent rare CMEs + */ + @Inject(method = "", at = @At("RETURN")) + private static void synchronizeMetadataCache(CallbackInfo ci) { + if(!(metadataCache instanceof ConcurrentMap)) + metadataCache = Collections.synchronizedMap(metadataCache); + } +}