From 5168eb63aabc828c1330e2a0dbea6ce19ddd77fc Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 15 Feb 2025 15:52:19 -0500 Subject: [PATCH 1/4] Fix BuildCraft pipes Related: #516 --- .../modernfix/forge/dynresources/ModelBakeEventHelper.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java b/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java index fbfdab18..e0b19a4b 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java @@ -45,7 +45,10 @@ public class ModelBakeEventHelper { "elevatorid", "cfm", "refinedstorage", - "embers"); + "embers", + "buildcraftsilicon", + "buildcrafttransport", + "buildcraftfactory"); private final Map modelRegistry; private final Set topLevelModelLocations; private final MutableGraph dependencyGraph; From fcea407708a4a784c4076e080540d9264778f15a Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 6 Mar 2025 19:50:43 -0500 Subject: [PATCH 2/4] Memoize creative tab content building per-tab This should greatly reduce lag spikes experienced when opening the creative inventory with a mod like EMI installed, as the creative tabs will not be rebuilt a second time --- .../CreativeModeTabMixin.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/memoize_creative_tab_build/CreativeModeTabMixin.java diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/memoize_creative_tab_build/CreativeModeTabMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/memoize_creative_tab_build/CreativeModeTabMixin.java new file mode 100644 index 00000000..c74bb4a2 --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/memoize_creative_tab_build/CreativeModeTabMixin.java @@ -0,0 +1,28 @@ +package org.embeddedt.modernfix.common.mixin.perf.memoize_creative_tab_build; + +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import net.minecraft.world.item.CreativeModeTab; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(CreativeModeTab.class) +public class CreativeModeTabMixin { + @Unique + private CreativeModeTab.ItemDisplayParameters mfix$oldParameters; + + /** + * @author embeddedt + * @reason Vanilla already does similar memoization in the CreativeModeTabs class, but mods often have to bypass + * it due to wanting to build the tab contents before search trees are populated. By memoizing at this lower level, + * we can skip the expensive work of computing the tab contents multiple times while not affecting the logic in + * CreativeModeTabs. + */ + @WrapMethod(method = "buildContents") + private synchronized void buildContentsIfChanged(CreativeModeTab.ItemDisplayParameters parameters, Operation original) { + if (mfix$oldParameters == null || mfix$oldParameters.needsUpdate(parameters.enabledFeatures(), parameters.hasPermissions(), parameters.holders())) { + original.call(parameters); + } + mfix$oldParameters = parameters; + } +} From 967b0c1982b30c60532861c5e75a8446bda4e38f Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Wed, 2 Apr 2025 18:52:37 -0400 Subject: [PATCH 3/4] Prevent Forge's crash report analyser from complaining about ModernFix --- .../mixin/core/CrashReportAnalyserMixin.java | 31 +++++++++++++++++++ gradle.properties | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/CrashReportAnalyserMixin.java diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/CrashReportAnalyserMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/CrashReportAnalyserMixin.java new file mode 100644 index 00000000..7fe01d70 --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/CrashReportAnalyserMixin.java @@ -0,0 +1,31 @@ +package org.embeddedt.modernfix.forge.mixin.core; + +import net.minecraftforge.forgespi.language.IModInfo; +import net.minecraftforge.logging.CrashReportAnalyser; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.Map; + +@Mixin(CrashReportAnalyser.class) +public class CrashReportAnalyserMixin { + @Shadow @Final private static Map SUSPECTED_MODS; + + /** + * @author embeddedt + * @reason Remove ModernFix from the list of suspected mods when a crash happens. Otherwise, we get blamed + * for "registry object not present" crashes if users don't interpret the crash before reporting + * it. + * + * It seems unlikely ModernFix will simultaneously cause a crash while it's not obvious it caused it. + */ + @Inject(method = "buildSuspectedModsSection", at = @At("HEAD"), require = 0) + private static void removeOurselvesFromSuspectedMods(StringBuilder stringBuilder, CallbackInfo ci) { + SUSPECTED_MODS.keySet().removeIf(iModInfo -> iModInfo.getModId().equals("modernfix")); + } + +} diff --git a/gradle.properties b/gradle.properties index 32ff1b0b..ce3a067c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ mixinextras_version=0.4.1 mod_id=modernfix minecraft_version=1.20.1 enabled_platforms=fabric,forge -forge_version=1.20.1-47.1.3 +forge_version=1.20.1-47.4.0 parchment_version=2023.07.09 refined_storage_version=4392788 jei_version=15.8.0.11 From 20be8d0da3ccbdf6b18297ceab17ca2dbfa2009d Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Wed, 2 Apr 2025 18:58:39 -0400 Subject: [PATCH 4/4] Fix obfuscation error --- .../modernfix/forge/mixin/core/CrashReportAnalyserMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/CrashReportAnalyserMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/CrashReportAnalyserMixin.java index 7fe01d70..180ac80f 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/CrashReportAnalyserMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/CrashReportAnalyserMixin.java @@ -23,7 +23,7 @@ public class CrashReportAnalyserMixin { * * It seems unlikely ModernFix will simultaneously cause a crash while it's not obvious it caused it. */ - @Inject(method = "buildSuspectedModsSection", at = @At("HEAD"), require = 0) + @Inject(method = "buildSuspectedModsSection", at = @At("HEAD"), require = 0, remap = false) private static void removeOurselvesFromSuspectedMods(StringBuilder stringBuilder, CallbackInfo ci) { SUSPECTED_MODS.keySet().removeIf(iModInfo -> iModInfo.getModId().equals("modernfix")); }