From 7f018c1ff73bc51c739130c1ea0de93fb48b12d5 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 24 Feb 2023 13:17:44 -0500 Subject: [PATCH 1/4] Minor optimization to ForgeRegistry.validateContent --- .../core/config/ModernFixEarlyConfig.java | 1 + .../ForgeRegistryMixin.java | 28 +++++++++++++++++++ src/main/resources/modernfix.mixins.json | 3 +- 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/embeddedt/modernfix/mixin/perf/fast_registry_validation/ForgeRegistryMixin.java 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", From 8702ff29714e15b5cfc951ac14c57c25386bcbcb Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 24 Feb 2023 17:53:08 -0500 Subject: [PATCH 2/4] Add branding and revamp version control --- build.gradle | 3 ++- .../modernfix/core/ModernFixMixinPlugin.java | 1 + .../core/config/ModernFixEarlyConfig.java | 1 + .../branding/BrandingControlMixin.java | 24 +++++++++++++++++++ src/main/resources/modernfix.mixins.json | 1 + 5 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/embeddedt/modernfix/mixin/feature/branding/BrandingControlMixin.java diff --git a/build.gradle b/build.gradle index 912043b0..f5ed29e1 100644 --- a/build.gradle +++ b/build.gradle @@ -2,12 +2,13 @@ plugins { id "dev.architectury.loom" version "1.0.312" id "maven-publish" id 'com.matthewprenger.cursegradle' version '1.4.0' + id 'com.palantir.git-version' version '1.0.0' } sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8 group = 'org.embeddedt' -version = '1.7.0' +version = gitVersion() java { archivesBaseName = 'modernfix-mc' + minecraft_version diff --git a/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java b/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java index 31ccf154..37c436a7 100644 --- a/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java +++ b/src/main/java/org/embeddedt/modernfix/core/ModernFixMixinPlugin.java @@ -4,6 +4,7 @@ import com.google.common.io.Resources; import cpw.mods.modlauncher.*; import cpw.mods.modlauncher.api.LamdbaExceptionUtils; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import net.minecraftforge.fml.loading.LoadingModList; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.embeddedt.modernfix.classloading.ModernFixResourceFinder; 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 9e6844ba..81db63e6 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -17,6 +17,7 @@ public class ModernFixEarlyConfig { // Defines the default rules which can be configured by the user or other mods. // You must manually add a rule for any new mixins not covered by an existing package rule. this.addMixinRule("core", true); // TODO: Don't actually allow the user to disable this + this.addMixinRule("feature.branding", true); this.addMixinRule("feature.measure_time", true); this.addMixinRule("feature.reduce_loading_screen_freezes", false); this.addMixinRule("perf.fast_registry_validation", true); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/feature/branding/BrandingControlMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/feature/branding/BrandingControlMixin.java new file mode 100644 index 00000000..83f59aa4 --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/feature/branding/BrandingControlMixin.java @@ -0,0 +1,24 @@ +package org.embeddedt.modernfix.mixin.feature.branding; + +import com.google.common.collect.ImmutableList; +import net.minecraftforge.fml.BrandingControl; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModList; +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; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import java.util.List; +import java.util.Optional; + +@Mixin(value = BrandingControl.class, remap = false) +public class BrandingControlMixin { + @Inject(method = "computeBranding", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/ModList;get()Lnet/minecraftforge/fml/ModList;"), locals = LocalCapture.CAPTURE_FAILHARD) + private static void addModernFixBranding(CallbackInfo ci, ImmutableList.Builder builder) { + Optional mfContainer = ModList.get().getModContainerById("modernfix"); + if(mfContainer.isPresent()) + builder.add("ModernFix " + mfContainer.get().getModInfo().getVersion().toString()); + } +} diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index fff767e2..87383a7c 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -42,6 +42,7 @@ "feature.measure_time.BootstrapMixin", "feature.measure_time.SimpleReloadableResourceManagerMixin", "feature.measure_time.ProfiledReloadInstanceMixin", + "feature.branding.BrandingControlMixin", "perf.kubejs.TagIngredientJSMixin", "perf.kubejs.TagWrapperMixin", "perf.kubejs.RecipeEventJSMixin", From b6497cee4e7b12299ba08560896b5d5cfdeab02d Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 24 Feb 2023 18:14:21 -0500 Subject: [PATCH 3/4] Show branding on F3 --- .../embeddedt/modernfix/ModernFixClient.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/org/embeddedt/modernfix/ModernFixClient.java b/src/main/java/org/embeddedt/modernfix/ModernFixClient.java index 2ed3b0c3..90779e01 100644 --- a/src/main/java/org/embeddedt/modernfix/ModernFixClient.java +++ b/src/main/java/org/embeddedt/modernfix/ModernFixClient.java @@ -4,15 +4,19 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.ConnectScreen; import net.minecraft.client.gui.screens.TitleScreen; import net.minecraftforge.client.event.GuiOpenEvent; +import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModList; import org.embeddedt.modernfix.core.ModernFixMixinPlugin; import org.embeddedt.modernfix.load.LoadEvents; import org.embeddedt.modernfix.screen.DeferredLevelLoadingScreen; import java.lang.management.ManagementFactory; +import java.util.Optional; public class ModernFixClient { public static long worldLoadStartTime; @@ -20,10 +24,17 @@ public class ModernFixClient { public static float gameStartTimeSeconds = -1; + private String brandingString = null; + public ModernFixClient() { if(ModernFixMixinPlugin.instance.isOptionEnabled("perf.faster_singleplayer_load.ClientEvents")) { MinecraftForge.EVENT_BUS.register(new LoadEvents()); } + if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.branding.F3Screen")) { + Optional mfContainer = ModList.get().getModContainerById("modernfix"); + if(mfContainer.isPresent()) + brandingString = "ModernFix " + mfContainer.get().getModInfo().getVersion().toString(); + } } public void resetWorldLoadStateMachine() { @@ -52,4 +63,12 @@ public class ModernFixClient { ModernFix.worldLoadSemaphore.countDown(); } } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onRenderOverlay(RenderGameOverlayEvent.Text event) { + if(brandingString != null && Minecraft.getInstance().options.renderDebug) { + event.getLeft().add(""); + event.getLeft().add(brandingString); + } + } } From 6f5f21267e4f387d1462902bafa1aeb92baf8ac0 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 24 Feb 2023 18:14:28 -0500 Subject: [PATCH 4/4] Disable source JAR generation --- build.gradle | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index f5ed29e1..e3ecc829 100644 --- a/build.gradle +++ b/build.gradle @@ -114,7 +114,7 @@ java { // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task // if it is present. // If you remove this line, sources will not be generated. - withSourcesJar() + // withSourcesJar() } // Example for how to get properties into the manifest for reading at runtime. @@ -141,9 +141,6 @@ publishing { artifact(remapJar) { builtBy remapJar } - artifact(sourcesJar) { - builtBy remapSourcesJar - } } }