From 7dcce90a82b7bda02902a9eb53f1cbd81c00d5d0 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 11 Feb 2023 11:50:01 -0500 Subject: [PATCH] Lie to model event handlers about some flags to speed up loading --- .../perf/faster_baking/ModelManagerMixin.java | 21 +++++++++++++++++++ .../modernfix/models/LazyBakedModel.java | 10 +++++++++ src/main/resources/modernfix.mixins.json | 1 + 3 files changed, 32 insertions(+) create mode 100644 src/main/java/org/embeddedt/modernfix/mixin/perf/faster_baking/ModelManagerMixin.java diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_baking/ModelManagerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_baking/ModelManagerMixin.java new file mode 100644 index 00000000..878e2d65 --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/faster_baking/ModelManagerMixin.java @@ -0,0 +1,21 @@ +package org.embeddedt.modernfix.mixin.perf.faster_baking; + +import net.minecraft.client.renderer.model.ModelBakery; +import net.minecraft.client.renderer.model.ModelManager; +import net.minecraft.profiler.IProfiler; +import net.minecraft.resources.IResourceManager; +import org.embeddedt.modernfix.models.LazyBakedModel; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ModelManager.class) +public class ModelManagerMixin { + @Inject(method = "apply(Lnet/minecraft/client/renderer/model/ModelBakery;Lnet/minecraft/resources/IResourceManager;Lnet/minecraft/profiler/IProfiler;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/ForgeHooksClient;onModelBake(Lnet/minecraft/client/renderer/model/ModelManager;Ljava/util/Map;Lnet/minecraftforge/client/model/ModelLoader;)V", shift = At.Shift.AFTER) + ) + private void allowBaking(ModelBakery pObject, IResourceManager pResourceManager, IProfiler pProfiler, CallbackInfo ci) { + LazyBakedModel.allowBakeForFlags = true; + } +} diff --git a/src/main/java/org/embeddedt/modernfix/models/LazyBakedModel.java b/src/main/java/org/embeddedt/modernfix/models/LazyBakedModel.java index eed45070..445ce81e 100644 --- a/src/main/java/org/embeddedt/modernfix/models/LazyBakedModel.java +++ b/src/main/java/org/embeddedt/modernfix/models/LazyBakedModel.java @@ -27,6 +27,12 @@ public class LazyBakedModel implements IBakedModel { private IBakedModel delegate = null; private Supplier delegateSupplier; + /** + * This flag is changed to true when we should bake instead of returning reasonable defaults for certain + * method calls. + */ + public static boolean allowBakeForFlags = false; + public LazyBakedModel(Supplier delegateSupplier) { this.delegateSupplier = delegateSupplier; } @@ -61,6 +67,10 @@ public class LazyBakedModel implements IBakedModel { @Override public boolean isCustomRenderer() { + if(this.delegate != null) + return this.delegate.isCustomRenderer(); + if(!LazyBakedModel.allowBakeForFlags) + return false; return computeDelegate().isCustomRenderer(); } diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index 15ab81de..9b30ecfa 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -54,6 +54,7 @@ "perf.blast_search_trees.IngredientFilterInvoker", "perf.faster_baking.ModelBakeryMixin", "perf.faster_baking.BlockModelShapesMixin", + "perf.faster_baking.ModelManagerMixin", "perf.cache_model_materials.VanillaModelMixin", "perf.cache_model_materials.MultipartMixin", "bugfix.packet_leak.ClientPlayNetHandlerMixin",