diff --git a/build.gradle b/build.gradle index b9b7d96..4a2df3f 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ buildscript { } } dependencies { - classpath 'com.github.Chocohead:fabric-loom:415c6b' + classpath 'com.github.Chocohead:fabric-loom:49aa217' } } @@ -34,9 +34,9 @@ minecraft { } dependencies { - minecraft "com.mojang:minecraft:1.14 Pre-Release 3" - mappings "net.fabricmc:yarn:1.14 Pre-Release 3+build.1:tiny@gz" - modCompile "net.fabricmc:fabric-loader:0.7.0+build.171" + minecraft "com.mojang:minecraft:1.14" + mappings "net.fabricmc:yarn:1.14+build.1:tiny@gz" + modCompile "net.fabricmc:fabric-loader:0.10.0+build.208" } sourceSets { diff --git a/example/resources/fabric.mod.json b/example/resources/fabric.mod.json index 4b38d1a..44f73e8 100644 --- a/example/resources/fabric.mod.json +++ b/example/resources/fabric.mod.json @@ -22,7 +22,7 @@ ] }, "depends": { - "fabricloader": ">=0.7.0", + "fabricloader": ">=0.10.0", "mm": ">=2.3" } } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..9cc621c --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/resources/fabric.mod.json b/resources/fabric.mod.json index 2fa5a5d..11b1956 100644 --- a/resources/fabric.mod.json +++ b/resources/fabric.mod.json @@ -21,7 +21,7 @@ ] }, "depends": { - "fabricloader": ">=0.7.0" + "fabricloader": ">=0.10.0" }, "mixins": [{ "config": "mixins.mm.json" diff --git a/src/com/chocohead/mm/EnumExtender.java b/src/com/chocohead/mm/EnumExtender.java index 783af93..6263ccd 100644 --- a/src/com/chocohead/mm/EnumExtender.java +++ b/src/com/chocohead/mm/EnumExtender.java @@ -38,7 +38,7 @@ import com.chocohead.mm.api.EnumAdder.EnumAddition; public final class EnumExtender { - public static final Map POOL = new HashMap<>(); + public static final Map> POOL = new HashMap<>(); static Consumer makeEnumExtender(EnumAdder builder) { @@ -176,6 +176,10 @@ static Consumer makeEnumExtender(EnumAdder builder) { InsnList arrayFilling = new InsnList(); for (EnumAddition addition : builder.getAdditions()) { + String additionType = addition.isEnumSubclass() ? anonymousClassFactory.get() : node.name; + if (addition.isEnumSubclass() && node.permittedSubclasses != null) { + node.permittedSubclasses.add(additionType); + } node.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC + Opcodes.ACC_ENUM, addition.name, 'L' + node.name + ';', null, null); LabelNode stuffStart; @@ -186,6 +190,8 @@ static Consumer makeEnumExtender(EnumAdder builder) { POOL.put(poolKey, addition.getParameters()); fieldSetting.add(new LdcInsnNode(poolKey)); fieldSetting.add(new MethodInsnNode(Opcodes.INVOKEINTERFACE, "java/util/Map", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", true)); + fieldSetting.add(new TypeInsnNode(Opcodes.CHECKCAST, "java/util/function/Supplier")); + fieldSetting.add(new MethodInsnNode(Opcodes.INVOKEINTERFACE, "java/util/function/Supplier", "get", "()Ljava/lang/Object;", true)); fieldSetting.add(new TypeInsnNode(Opcodes.CHECKCAST, "[Ljava/lang/Object;")); fieldSetting.add(new VarInsnNode(Opcodes.ASTORE, 0)); @@ -193,7 +199,6 @@ static Consumer makeEnumExtender(EnumAdder builder) { fieldSetting.add(stuffStart); } else stuffStart = null; - String additionType = addition.isEnumSubclass() ? anonymousClassFactory.get() : node.name; fieldSetting.add(new TypeInsnNode(Opcodes.NEW, additionType)); fieldSetting.add(new InsnNode(Opcodes.DUP)); diff --git a/src/com/chocohead/mm/api/EnumAdder.java b/src/com/chocohead/mm/api/EnumAdder.java index b333544..ef257e4 100644 --- a/src/com/chocohead/mm/api/EnumAdder.java +++ b/src/com/chocohead/mm/api/EnumAdder.java @@ -67,8 +67,8 @@ public final class EnumAddition { * * @throws IllegalArgumentException If the factory produces an invalid parameter array */ - public Object[] getParameters() { - return checkParameters(parameterFactory.get()); + public Supplier getParameters() { + return () -> checkParameters(parameterFactory.get()); } /**