diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/OBJLoaderMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/OBJLoaderMixin.java new file mode 100644 index 00000000..8ab74574 --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/OBJLoaderMixin.java @@ -0,0 +1,32 @@ +package org.embeddedt.modernfix.mixin.perf.parallelize_model_loading; + +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.obj.MaterialLibrary; +import net.minecraftforge.client.model.obj.OBJLoader; +import net.minecraftforge.client.model.obj.OBJModel; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@Mixin(OBJLoader.class) +public class OBJLoaderMixin { + @Shadow private Map materialCache; + + @Shadow private Map modelCache; + + @Redirect(method = "", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraftforge/client/model/obj/OBJLoader;materialCache:Ljava/util/Map;")) + private void useConcMap1(OBJLoader instance, Map value) { + this.materialCache = new ConcurrentHashMap<>(); + } + + @Redirect(method = "", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraftforge/client/model/obj/OBJLoader;modelCache:Ljava/util/Map;")) + private void useConcMap2(OBJLoader instance, Map value) { + this.modelCache = new ConcurrentHashMap<>(); + } +} diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index c201dcfc..9f4721bf 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -23,6 +23,7 @@ "bugfix.concurrency.RenderTypeMixin", "bugfix.concurrency.MinecraftMixin", "perf.parallelize_model_loading.ModelBakeryMixin", + "perf.parallelize_model_loading.OBJLoaderMixin", "perf.trim_model_caches.ModelManagerMixin", "perf.async_jei.IngredientListElementFactoryMixin", "perf.async_jei.ClientLifecycleHandlerMixin",