From c0d9f642ee019ec3c3d97ff3d8db27aeec984c3d Mon Sep 17 00:00:00 2001 From: danyadev Date: Tue, 24 Feb 2026 18:18:03 +0300 Subject: [PATCH 1/2] implement transformClassIfNeeded --- dependencies.gradle | 2 +- repositories.gradle | 1 + .../mc/SpeedupLongIntHashMapTransformer.java | 4 ++-- .../ConfigParsingTimeTransformer.java | 11 +++++++++-- .../rfb/transformers/EnumValuesTransformer.java | 9 ++++++++- .../ForgeConfigurationTransformer.java | 14 +++++++++++--- .../ForgeEventSubscriptionTransformer.java | 15 ++++++++++++--- 7 files changed, 44 insertions(+), 12 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 8131de9e5..09365d6c6 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -14,7 +14,7 @@ configurations { dependencies { api("com.github.GTNewHorizons:GTNHLib:0.9.52:dev") - compileOnly("com.gtnewhorizons.retrofuturabootstrap:RetroFuturaBootstrap:1.0.16") { transitive = false } + compileOnly("com.gtnewhorizons.retrofuturabootstrap:RetroFuturaBootstrap:1.0.17-opt.1") { transitive = false } compileOnly("com.mitchej123:supernova:0.0.2:api") { transitive = false } transformedMod("com.github.GTNewHorizons:NotEnoughItems:2.8.84-GTNH:dev") // force a more up-to-date NEI version diff --git a/repositories.gradle b/repositories.gradle index 9fbd7d4a1..72461d590 100644 --- a/repositories.gradle +++ b/repositories.gradle @@ -1,2 +1,3 @@ repositories { + mavenLocal() } diff --git a/src/main/java/com/mitchej123/hodgepodge/core/fml/transformers/mc/SpeedupLongIntHashMapTransformer.java b/src/main/java/com/mitchej123/hodgepodge/core/fml/transformers/mc/SpeedupLongIntHashMapTransformer.java index d622b09a3..2baf56a20 100644 --- a/src/main/java/com/mitchej123/hodgepodge/core/fml/transformers/mc/SpeedupLongIntHashMapTransformer.java +++ b/src/main/java/com/mitchej123/hodgepodge/core/fml/transformers/mc/SpeedupLongIntHashMapTransformer.java @@ -61,7 +61,7 @@ private byte[] transformBytes(String transformedName, byte[] basicClass) { cr.accept(cn, 0); final boolean changed = transformClassNode(transformedName, cn); if (changed) { - final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); + final ClassWriter cw = new ClassWriter(0); cn.accept(cw); final byte[] transformedBytes = cw.toByteArray(); HodgepodgeClassDump.dumpClass(transformedName, basicClass, transformedBytes, this); @@ -73,7 +73,7 @@ private byte[] transformBytes(String transformedName, byte[] basicClass) { private static boolean transformClassNode(String transformedName, ClassNode cn) { boolean changed = false; for (MethodNode mn : cn.methods) { - for (AbstractInsnNode node : mn.instructions.toArray()) { + for (AbstractInsnNode node = mn.instructions.getFirst(); node != null; node = node.getNext()) { if (node.getOpcode() == NEW && node instanceof TypeInsnNode tNode && isTargetDesc(tNode.desc)) { final AbstractInsnNode secondNode = node.getNext(); if (secondNode.getOpcode() == DUP) { diff --git a/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/ConfigParsingTimeTransformer.java b/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/ConfigParsingTimeTransformer.java index 415230b76..e1189edc0 100644 --- a/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/ConfigParsingTimeTransformer.java +++ b/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/ConfigParsingTimeTransformer.java @@ -36,14 +36,21 @@ public boolean shouldTransformClass(@NotNull ExtensibleClassLoader classLoader, } @Override - public void transformClass(@NotNull ExtensibleClassLoader classLoader, @NotNull Context context, + public boolean transformClassIfNeeded(@NotNull ExtensibleClassLoader classLoader, @NotNull Context context, @Nullable Manifest manifest, @NotNull String className, @NotNull ClassNodeHandle classNode) { final ClassNode cn = classNode.getNode(); if (cn == null) { - return; + return false; } transformClassNode(cn); HodgepodgeClassDump.dumpClass(className, classNode, this); + return true; + } + + @Override + public void transformClass(@NotNull ExtensibleClassLoader classLoader, @NotNull RfbClassTransformer.Context context, + @Nullable Manifest manifest, @NotNull String className, @NotNull ClassNodeHandle classNode) { + transformClassIfNeeded(classLoader, context, manifest, className, classNode); } private static final String THIS = "net/minecraftforge/common/config/Configuration"; diff --git a/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/EnumValuesTransformer.java b/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/EnumValuesTransformer.java index 470017dc8..38fe1a79e 100644 --- a/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/EnumValuesTransformer.java +++ b/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/EnumValuesTransformer.java @@ -55,7 +55,7 @@ public boolean shouldTransformClass(@NotNull ExtensibleClassLoader classLoader, } @Override - public void transformClass(@NotNull ExtensibleClassLoader classLoader, @NotNull Context context, + public boolean transformClassIfNeeded(@NotNull ExtensibleClassLoader classLoader, @NotNull Context context, @Nullable Manifest manifest, @NotNull String className, @NotNull ClassNodeHandle classNode) { final ClassNode cn = classNode.getNode(); assert cn != null; @@ -65,6 +65,13 @@ public void transformClass(@NotNull ExtensibleClassLoader classLoader, @NotNull classNode.computeFrames(); HodgepodgeClassDump.dumpBytecode(className, classNode, this); } + return changed; + } + + @Override + public void transformClass(@NotNull ExtensibleClassLoader classLoader, @NotNull Context context, + @Nullable Manifest manifest, @NotNull String className, @NotNull ClassNodeHandle classNode) { + transformClassIfNeeded(classLoader, context, manifest, className, classNode); } private static boolean transformClassNode(ClassNode cn) { diff --git a/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/ForgeConfigurationTransformer.java b/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/ForgeConfigurationTransformer.java index 64cb2843b..1d89a2e1d 100644 --- a/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/ForgeConfigurationTransformer.java +++ b/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/ForgeConfigurationTransformer.java @@ -51,11 +51,12 @@ public boolean shouldTransformClass(@NotNull ExtensibleClassLoader classLoader, } @Override - public void transformClass(@NotNull ExtensibleClassLoader classLoader, @NotNull RfbClassTransformer.Context context, - @Nullable Manifest manifest, @NotNull String className, @NotNull ClassNodeHandle classNode) { + public boolean transformClassIfNeeded(@NotNull ExtensibleClassLoader classLoader, + @NotNull RfbClassTransformer.Context context, @Nullable Manifest manifest, @NotNull String className, + @NotNull ClassNodeHandle classNode) { final ClassNode cn = classNode.getNode(); if (cn == null) { - return; + return false; } switch (className) { case "net.minecraftforge.common.config.Property" -> { @@ -67,6 +68,13 @@ public void transformClass(@NotNull ExtensibleClassLoader classLoader, @NotNull case "net.minecraftforge.common.config.ConfigCategory" -> transformConfigCategory(cn); } HodgepodgeClassDump.dumpClass(className, classNode, this); + return true; + } + + @Override + public void transformClass(@NotNull ExtensibleClassLoader classLoader, @NotNull RfbClassTransformer.Context context, + @Nullable Manifest manifest, @NotNull String className, @NotNull ClassNodeHandle classNode) { + transformClassIfNeeded(classLoader, context, manifest, className, classNode); } private static void transformProperty(ClassNode cn) { diff --git a/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/ForgeEventSubscriptionTransformer.java b/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/ForgeEventSubscriptionTransformer.java index 7b98ef10f..fe041fccd 100644 --- a/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/ForgeEventSubscriptionTransformer.java +++ b/src/main/java/com/mitchej123/hodgepodge/core/rfb/transformers/ForgeEventSubscriptionTransformer.java @@ -48,12 +48,14 @@ public boolean shouldTransformClass(@NotNull ExtensibleClassLoader classLoader, } @Override - public void transformClass(@NotNull ExtensibleClassLoader classLoader, @NotNull RfbClassTransformer.Context context, - @Nullable Manifest manifest, @NotNull String className, @NotNull ClassNodeHandle classNodeHandle) { + public boolean transformClassIfNeeded(@NotNull ExtensibleClassLoader classLoader, + @NotNull RfbClassTransformer.Context context, @Nullable Manifest manifest, @NotNull String className, + @NotNull ClassNodeHandle classNodeHandle) { final ClassNode classNode = classNodeHandle.getNode(); if (classNode == null) { - return; + return false; } + boolean changed = false; for (MethodNode method : classNode.methods) { if (method.name.equals("transform") && method.desc.equals("(Ljava/lang/String;Ljava/lang/String;[B)[B")) { @@ -70,6 +72,13 @@ public void transformClass(@NotNull ExtensibleClassLoader classLoader, @NotNull } else { FMLRelaunchLog.severe("[ForgeEventSubscriptionTransformer] Failed to transform {}", classNode.name); } + return changed; + } + + @Override + public void transformClass(@NotNull ExtensibleClassLoader classLoader, @NotNull RfbClassTransformer.Context context, + @Nullable Manifest manifest, @NotNull String className, @NotNull ClassNodeHandle classNodeHandle) { + transformClassIfNeeded(classLoader, context, manifest, className, classNodeHandle); } private static boolean transformTransformMethod(MethodNode method) { From bcaef0b56fbd8c270ca955ce7a498bf39fe5b594 Mon Sep 17 00:00:00 2001 From: danyadev Date: Fri, 29 May 2026 10:41:57 +0300 Subject: [PATCH 2/2] update RFB --- dependencies.gradle | 2 +- repositories.gradle | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 09365d6c6..b49a8641f 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -14,7 +14,7 @@ configurations { dependencies { api("com.github.GTNewHorizons:GTNHLib:0.9.52:dev") - compileOnly("com.gtnewhorizons.retrofuturabootstrap:RetroFuturaBootstrap:1.0.17-opt.1") { transitive = false } + compileOnly("com.gtnewhorizons.retrofuturabootstrap:RetroFuturaBootstrap:1.1.0") { transitive = false } compileOnly("com.mitchej123:supernova:0.0.2:api") { transitive = false } transformedMod("com.github.GTNewHorizons:NotEnoughItems:2.8.84-GTNH:dev") // force a more up-to-date NEI version diff --git a/repositories.gradle b/repositories.gradle index 72461d590..9fbd7d4a1 100644 --- a/repositories.gradle +++ b/repositories.gradle @@ -1,3 +1,2 @@ repositories { - mavenLocal() }