diff --git a/gradle.properties b/gradle.properties index c457d9b8..69a3dc3f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.daemon=true # Versions versionConnector=1.0.0-beta.26 -versionAdapter=1.8.12-1.20.1-20231112.230129 +versionAdapter=1.8.16-1.20.1-20231120.221506 versionAdapterDefinition=1.8.16 versionMc=1.20.1 diff --git a/src/main/java/dev/su5ed/sinytra/connector/service/FabricASMFixer.java b/src/main/java/dev/su5ed/sinytra/connector/service/FabricASMFixer.java index b64464a1..f3372779 100644 --- a/src/main/java/dev/su5ed/sinytra/connector/service/FabricASMFixer.java +++ b/src/main/java/dev/su5ed/sinytra/connector/service/FabricASMFixer.java @@ -31,7 +31,7 @@ public class FabricASMFixer { private static final Logger LOGGER = LogUtils.getLogger(); - private static final String FABRIC_ASM_MODID = "mm"; + private static final Set FABRIC_ASM_MODIDS = Set.of("mm", "mm_shedaniel"); private static final String MINECRAFT_MODULE = "minecraft"; public static final List URLS = new ArrayList<>(); @@ -57,7 +57,7 @@ public static void permitEnumSubclass(ClassNode enumNode, String anonymousClassN public static void injectMinecraftModuleReader() { try { - if (!FabricLoader.getInstance().isModLoaded(FABRIC_ASM_MODID)) { + if (FABRIC_ASM_MODIDS.stream().noneMatch(FabricLoader.getInstance()::isModLoaded)) { return; } ModuleLayer layer = Launcher.INSTANCE.findLayerManager().orElseThrow().getLayer(IModuleLayerManager.Layer.GAME).orElseThrow(); @@ -115,7 +115,7 @@ public static class FabricASMGeneratedClassesSecureJar implements SecureJar { } private static class FabricASMGeneratedClassesProvider implements SecureJar.ModuleDataProvider { - private static final String GEN_PACKAGE = "com.chocohead.gen.mixin"; + private static final Set GEN_PACKAGES = Set.of("com.chocohead.gen.mixin", "me.shedaniel.gen.mixin"); private ModuleDescriptor descriptor; @Override @@ -127,7 +127,7 @@ public String name() { public ModuleDescriptor descriptor() { if (descriptor == null) { descriptor = ModuleDescriptor.newAutomaticModule(name()) - .packages(Set.of(GEN_PACKAGE)) + .packages(GEN_PACKAGES) .build(); } return descriptor; diff --git a/src/mod/resources/META-INF/asm/injectFabricASM.js b/src/mod/resources/META-INF/asm/injectFabricASM.js index 9b7a5835..cc18c5c6 100644 --- a/src/mod/resources/META-INF/asm/injectFabricASM.js +++ b/src/mod/resources/META-INF/asm/injectFabricASM.js @@ -6,56 +6,68 @@ var InsnNode = Java.type('org.objectweb.asm.tree.InsnNode'); var VarInsnNode = Java.type('org.objectweb.asm.tree.VarInsnNode'); function initializeCoreMod() { - return { - 'injectFabricASM': { - 'target': { - 'type': 'METHOD', - 'class': 'com.chocohead.mm.Plugin', - 'methodName': 'fishAddURL', - 'methodDesc': '()Ljava/util/function/Consumer;' + var transformers = {}; + var packages = ['com.chocohead.mm.', 'me.shedaniel.mm.']; + + for (var i = 0; i < packages.length; i++) { + var pkg = packages[i]; + var classTransformers = { + 'injectFabricASM': { + 'target': { + 'type': 'METHOD', + 'class': pkg + 'Plugin', + 'methodName': 'fishAddURL', + 'methodDesc': '()Ljava/util/function/Consumer;' + }, + 'transformer': function (node) { + var insns = new InsnList(); + insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, 'dev/su5ed/sinytra/connector/service/FabricASMFixer', 'fishAddURL', '()Ljava/util/function/Consumer;')); + insns.add(new InsnNode(Opcodes.ARETURN)); + node.instructions.insert(insns); + ASMAPI.log('DEBUG', 'Injected fishAddURL hook into FabricASM plugin'); + return node; + } }, - 'transformer': function (node) { - var insns = new InsnList(); - insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, 'dev/su5ed/sinytra/connector/service/FabricASMFixer', 'fishAddURL', '()Ljava/util/function/Consumer;')); - insns.add(new InsnNode(Opcodes.ARETURN)); - node.instructions.insert(insns); - ASMAPI.log('DEBUG', 'Injected fishAddURL hook into FabricASM plugin'); - return node; - } - }, - 'renameGeneratedMixinClassName': { - 'target': { - 'type': 'METHOD', - 'class': 'com.chocohead.mm.Plugin$1', - 'methodName': 'generate', - 'methodDesc': '(Ljava/lang/String;Ljava/util/Collection;)V' + 'renameGeneratedMixinClassName': { + 'target': { + 'type': 'METHOD', + 'class': pkg + 'Plugin$1', + 'methodName': 'generate', + 'methodDesc': '(Ljava/lang/String;Ljava/util/Collection;)V' + }, + 'transformer': function (node) { + var insns = new InsnList(); + insns.add(new VarInsnNode(Opcodes.ALOAD, 1)); + insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, 'dev/su5ed/sinytra/connector/service/FabricASMFixer', 'flattenMixinClass', '(Ljava/lang/String;)Ljava/lang/String;')); + insns.add(new VarInsnNode(Opcodes.ASTORE, 1)); + node.instructions.insert(insns); + ASMAPI.log('DEBUG', 'Injected flattenMixinClass modifier into FabricASM Plugin$1'); + return node; + } }, - 'transformer': function (node) { - var insns = new InsnList(); - insns.add(new VarInsnNode(Opcodes.ALOAD, 1)); - insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, 'dev/su5ed/sinytra/connector/service/FabricASMFixer', 'flattenMixinClass', '(Ljava/lang/String;)Ljava/lang/String;')); - insns.add(new VarInsnNode(Opcodes.ASTORE, 1)); - node.instructions.insert(insns); - ASMAPI.log('DEBUG', 'Injected flattenMixinClass modifier into FabricASM Plugin$1'); - return node; - } - }, - 'permitEnumSubclass': { - 'target': { - 'type': 'METHOD', - 'class': 'com.chocohead.mm.EnumSubclasser', - 'methodName': 'defineAnonymousSubclass', - 'methodDesc': '(Lorg/objectweb/asm/tree/ClassNode;Lcom/chocohead/mm/api/EnumAdder$EnumAddition;Ljava/lang/String;Ljava/lang/String;)[B' - }, - 'transformer': function (node) { - var insns = new InsnList(); - insns.add(new VarInsnNode(Opcodes.ALOAD, 0)); - insns.add(new VarInsnNode(Opcodes.ALOAD, 2)); - insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, 'dev/su5ed/sinytra/connector/service/FabricASMFixer', 'permitEnumSubclass', '(Lorg/objectweb/asm/tree/ClassNode;Ljava/lang/String;)V')); - node.instructions.insert(insns); - ASMAPI.log('DEBUG', 'Injected permitEnumSubclass modifier into FabricASM EnumSubclasser'); - return node; + 'permitEnumSubclass': { + 'target': { + 'type': 'METHOD', + 'class': pkg + 'EnumSubclasser', + 'methodName': 'defineAnonymousSubclass', + 'methodDesc': '(Lorg/objectweb/asm/tree/ClassNode;Lcom/chocohead/mm/api/EnumAdder$EnumAddition;Ljava/lang/String;Ljava/lang/String;)[B' + }, + 'transformer': function (node) { + var insns = new InsnList(); + insns.add(new VarInsnNode(Opcodes.ALOAD, 0)); + insns.add(new VarInsnNode(Opcodes.ALOAD, 2)); + insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, 'dev/su5ed/sinytra/connector/service/FabricASMFixer', 'permitEnumSubclass', '(Lorg/objectweb/asm/tree/ClassNode;Ljava/lang/String;)V')); + node.instructions.insert(insns); + ASMAPI.log('DEBUG', 'Injected permitEnumSubclass modifier into FabricASM EnumSubclasser'); + return node; + } } + }; + + for (var key in classTransformers) { + transformers[key + i] = classTransformers[key]; } } + + return transformers; } \ No newline at end of file