From 36664cb23a830035d41e894636ab5dc00bda3ea7 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 20 Apr 2023 20:45:21 -0400 Subject: [PATCH] Don't waste time parsing UVs when performing initial model load --- .../dynamicresources/UVController.java | 8 +++++++ .../BlockElementFaceDeserializerMixin.java | 21 +++++++++++++++++++ .../dynamic_resources/ModelBakeryMixin.java | 8 +++---- src/main/resources/modernfix.mixins.json | 1 + 4 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/embeddedt/modernfix/dynamicresources/UVController.java create mode 100644 src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/BlockElementFaceDeserializerMixin.java diff --git a/src/main/java/org/embeddedt/modernfix/dynamicresources/UVController.java b/src/main/java/org/embeddedt/modernfix/dynamicresources/UVController.java new file mode 100644 index 00000000..7b2efe7e --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/dynamicresources/UVController.java @@ -0,0 +1,8 @@ +package org.embeddedt.modernfix.dynamicresources; + +import net.minecraft.client.renderer.block.model.BlockFaceUV; + +public class UVController { + public static final ThreadLocal useDummyUv = ThreadLocal.withInitial(() -> Boolean.FALSE); + public static final BlockFaceUV dummyUv = new BlockFaceUV(new float[4], 0); +} diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/BlockElementFaceDeserializerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/BlockElementFaceDeserializerMixin.java new file mode 100644 index 00000000..eb4b3ee5 --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/BlockElementFaceDeserializerMixin.java @@ -0,0 +1,21 @@ +package org.embeddedt.modernfix.mixin.perf.dynamic_resources; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import net.minecraft.client.renderer.block.model.BlockElementFace; +import org.embeddedt.modernfix.dynamicresources.UVController; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.lang.reflect.Type; + +@Mixin(BlockElementFace.Deserializer.class) +public class BlockElementFaceDeserializerMixin { + + @Redirect(method = "deserialize(Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/client/renderer/block/model/BlockElementFace;", + at = @At(value = "INVOKE", target = "Lcom/google/gson/JsonDeserializationContext;deserialize(Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;)Ljava/lang/Object;", ordinal = 0)) + private Object skipUvsForInitialLoad(JsonDeserializationContext context, JsonElement element, Type type) { + return UVController.useDummyUv.get() ? UVController.dummyUv : context.deserialize(element, type); + } +} diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java index 2eb96122..7cc79897 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java @@ -40,10 +40,7 @@ import org.apache.commons.lang3.tuple.Triple; import org.apache.logging.log4j.Logger; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.duck.IExtendedModelBakery; -import org.embeddedt.modernfix.dynamicresources.DynamicBakedModelProvider; -import org.embeddedt.modernfix.dynamicresources.DynamicModelBakeEvent; -import org.embeddedt.modernfix.dynamicresources.ModelLocationCache; -import org.embeddedt.modernfix.dynamicresources.ResourcePackHandler; +import org.embeddedt.modernfix.dynamicresources.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -286,10 +283,12 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery { } modelFiles.clear(); CompletableFuture.allOf(modelBytes.toArray(new CompletableFuture[0])).join(); + UVController.useDummyUv.set(Boolean.TRUE); for(CompletableFuture> future : modelBytes) { Pair pair = future.join(); try { if(pair.getSecond() != null) { + BlockModel model = ModelLoaderRegistry.ExpandedBlockModelDeserializer.INSTANCE.fromJson(pair.getSecond(), BlockModel.class); model.name = pair.getFirst().toString(); modelFiles.addAll(model.getDependencies()); @@ -301,6 +300,7 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery { } basicModels.put(pair.getFirst(), (BlockModel)missingModel); } + UVController.useDummyUv.set(Boolean.FALSE); } modelFiles = null; Function modelGetter = loc -> { diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index 979de7f3..814136ad 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -79,6 +79,7 @@ "bugfix.concurrency.RenderTypeMixin", "bugfix.concurrency.MinecraftMixin", "bugfix.concurrency.StaticTagHelperMixin", + "perf.dynamic_resources.BlockElementFaceDeserializerMixin", "perf.dynamic_resources.BlockModelShaperMixin", "perf.dynamic_resources.ItemModelShaperMixin", "perf.dynamic_resources.ModelBakeryMixin",