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 c94b8b24..9e6844ba 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -19,6 +19,7 @@ public class ModernFixEarlyConfig { this.addMixinRule("core", true); // TODO: Don't actually allow the user to disable this this.addMixinRule("feature.measure_time", true); this.addMixinRule("feature.reduce_loading_screen_freezes", false); + this.addMixinRule("perf.fast_registry_validation", true); this.addMixinRule("perf.remove_biome_temperature_cache", true); this.addMixinRule("perf.resourcepacks", true); this.addMixinRule("perf.reduce_blockstate_cache_rebuilds", true); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java new file mode 100644 index 00000000..6f27929f --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java @@ -0,0 +1,28 @@ +package org.embeddedt.modernfix.mixin.perf.fast_registry_validation; + +import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import net.minecraftforge.registries.ForgeRegistry; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.lang.reflect.Method; + +@Mixin(value = ForgeRegistry.class, remap = false) +public class ForgeRegistryMixin { + private static Method bitSetTrimMethod = null; + private static boolean bitSetTrimMethodRetrieved = false; + + /** + * Cache the result of findMethod instead of running it multiple times. + * Null checks are not required as the surrounding code handles it already. + */ + @Redirect(method = "validateContent", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/common/ObfuscationReflectionHelper;findMethod(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;")) + private Method skipMultipleRemap(Class clz, String methodName, Class[] params) { + if(!bitSetTrimMethodRetrieved) { + bitSetTrimMethodRetrieved = true; + bitSetTrimMethod = ObfuscationReflectionHelper.findMethod(clz, methodName, params); + } + return bitSetTrimMethod; + } +} diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index 5dd2746e..fff767e2 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -47,7 +47,8 @@ "perf.kubejs.RecipeEventJSMixin", "perf.kubejs.RecipeJSMixin", "perf.kubejs.IDFilterMixin", - "perf.kubejs.CustomIngredientMixin" + "perf.kubejs.CustomIngredientMixin", + "perf.fast_registry_validation.ForgeRegistryMixin" ], "client": [ "core.MinecraftMixin",