From 2f5a6fee487b9496e0bd2ecb29ff92303c238e65 Mon Sep 17 00:00:00 2001 From: Paint_Ninja Date: Sat, 21 Dec 2024 22:19:07 +0000 Subject: [PATCH] Skip Forge classes in the RuntimeEnumExtender transformer (#10197) Mod classes are still transformed as usual --- .../fml/common/asm/RuntimeEnumExtender.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/RuntimeEnumExtender.java b/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/RuntimeEnumExtender.java index e10120f79a..ac5c137327 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/RuntimeEnumExtender.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/RuntimeEnumExtender.java @@ -48,9 +48,15 @@ public class RuntimeEnumExtender implements ILaunchPluginService { private static final EnumSet NAY = EnumSet.noneOf(Phase.class); @Override - public EnumSet handlesClass(Type classType, boolean isEmpty) - { - return isEmpty ? NAY : YAY; + public EnumSet handlesClass(Type classType, boolean isEmpty) { + if (isEmpty) + return NAY; + + String internalName = classType.getInternalName(); + if (internalName.startsWith("net/minecraftforge/") || internalName.startsWith("com/mojang/")) + return NAY; + + return YAY; } @Override @@ -59,15 +65,14 @@ public class RuntimeEnumExtender implements ILaunchPluginService { if ((classNode.access & Opcodes.ACC_ENUM) == 0) return ComputeFlags.NO_REWRITE; + if (!classNode.interfaces.contains(MARKER_IFACE.getInternalName())) + return ComputeFlags.NO_REWRITE; + Type array = Type.getType("[" + classType.getDescriptor()); String arrayDesc = array.getDescriptor(); FieldNode values = classNode.fields.stream().filter(f -> f.desc.equals(arrayDesc) && ((f.access & FLAGS) == FLAGS)).findFirst().orElse(null); - if (!classNode.interfaces.contains(MARKER_IFACE.getInternalName())) { - return ComputeFlags.NO_REWRITE; - } - //Static methods named "create" with first argument as a string List candidates = classNode.methods.stream() .filter(m -> ((m.access & Opcodes.ACC_STATIC) != 0) && m.name.equals("create"))