diff --git a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index 2d26e1c2..dd25e237 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -24,6 +24,7 @@ public class ModernFixEarlyConfig { this.addMixinRule("perf.boost_worker_count", true); this.addMixinRule("perf.skip_first_datapack_reload", true); this.addMixinRule("perf.parallelize_model_loading", true); + this.addMixinRule("perf.parallelize_model_loading.multipart", false); this.addMixinRule("perf.trim_model_caches", true); this.addMixinRule("bugfix.concurrency", true); this.addMixinRule("bugfix.edge_chunk_not_saved", true); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/bugfix/buggy_tooltip_handlers/ForgeEventFactoryMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/buggy_tooltip_handlers/ForgeEventFactoryMixin.java new file mode 100644 index 00000000..7283e5ba --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/bugfix/buggy_tooltip_handlers/ForgeEventFactoryMixin.java @@ -0,0 +1,2 @@ +package org.embeddedt.modernfix.mixin.bugfix.buggy_tooltip_handlers;public class ForgeEventFactoryMixin { +} diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/multipart/MultipartMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/multipart/MultipartMixin.java new file mode 100644 index 00000000..2664fa9e --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/multipart/MultipartMixin.java @@ -0,0 +1,17 @@ +package org.embeddedt.modernfix.mixin.perf.parallelize_model_loading.multipart; + +import net.minecraft.client.renderer.model.multipart.Multipart; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.List; +import java.util.stream.Stream; + +@Mixin(Multipart.class) +public class MultipartMixin { + @Redirect(method = "getMaterials", at = @At(value = "INVOKE", target = "Ljava/util/List;stream()Ljava/util/stream/Stream;", ordinal = 0)) + private Stream makeStreamParallel(List instance) { + return instance.parallelStream(); + } +} diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/multipart/VariantListMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/multipart/VariantListMixin.java new file mode 100644 index 00000000..09e0d54c --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/multipart/VariantListMixin.java @@ -0,0 +1,32 @@ +package org.embeddedt.modernfix.mixin.perf.parallelize_model_loading.multipart; + +import com.mojang.datafixers.util.Pair; +import net.minecraft.client.renderer.model.IUnbakedModel; +import net.minecraft.client.renderer.model.RenderMaterial; +import net.minecraft.client.renderer.model.Variant; +import net.minecraft.client.renderer.model.VariantList; +import net.minecraft.util.ResourceLocation; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Mixin(VariantList.class) +public abstract class VariantListMixin { + @Shadow public abstract List getVariants(); + + /** + * @author embeddedt + * @reason Parallelize calls to getMaterials + */ + @Overwrite + public Collection getMaterials(Function pModelGetter, Set> pMissingTextureErrors) { + List models = this.getVariants().stream().map(Variant::getModelLocation).distinct().map(pModelGetter).collect(Collectors.toList()); + return models.parallelStream().flatMap(model -> model.getMaterials(pModelGetter, pMissingTextureErrors).stream()).collect(Collectors.toSet()); + } +} diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index 55843f36..a0ea5695 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -33,6 +33,8 @@ "bugfix.concurrency.MinecraftMixin", "perf.parallelize_model_loading.ModelBakeryMixin", "perf.parallelize_model_loading.OBJLoaderMixin", + "perf.parallelize_model_loading.multipart.MultipartMixin", + "perf.parallelize_model_loading.multipart.VariantListMixin", "perf.trim_model_caches.ModelManagerMixin", "perf.async_jei.IngredientListElementFactoryMixin", "perf.async_jei.ClientLifecycleHandlerMixin",