Skip to content

Commit 3a538a5

Browse files
authored
Add support for Mixin 0.8 (#22)
1 parent 24e3b38 commit 3a538a5

File tree

1 file changed

+35
-9
lines changed

1 file changed

+35
-9
lines changed

src/main/java/org/minimallycorrect/modpatcher/api/tweaker/ModPatcherTweaker2.java

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,46 @@ public static void add() {
1717
((List<String>) Launch.blackboard.get("TweakClasses")).add(ModPatcherTweaker2.class.getName());
1818
}
1919

20+
@SuppressWarnings("unchecked")
2021
private static void inject() {
2122
LaunchClassLoaderUtil.addTransformer(ModPatcherTransformer.getInstance());
23+
24+
// Mixin 0.7
2225
try {
2326
Class<?> mixinEnvironmentClass = Class.forName("org.spongepowered.asm.mixin.MixinEnvironment", false, ModPatcherTweaker.class.getClassLoader());
24-
Field f = mixinEnvironmentClass.getDeclaredField("excludeTransformers");
25-
f.setAccessible(true);
26-
@SuppressWarnings("unchecked")
27-
Set<String> vals = (Set<String>) f.get(null);
28-
vals.add(ModPatcherTransformer.class.getName());
29-
} catch (ClassNotFoundException ignored) {
27+
28+
// org.spongepowered.asm.mixin.MixinEnvironment.excludeTransformers
29+
Field excludeTransformersField = mixinEnvironmentClass.getDeclaredField("excludeTransformers");
30+
excludeTransformersField.setAccessible(true);
31+
32+
Set<String> values = (Set<String>) excludeTransformersField.get(null);
33+
values.add(ModPatcherTransformer.class.getName());
34+
} catch (ClassNotFoundException ex) {
35+
// TODO Silence this once confirmed working?
36+
PatcherLog.trace("Failed to find mixin environment, normal for non-spongepowered", ex);
37+
return;
38+
} catch (NoSuchFieldException ex) {
39+
// no-op
40+
} catch (Exception ex) {
41+
PatcherLog.warn("Failed to add mixin transformer exclusion for our transformer", ex);
42+
return;
43+
}
44+
45+
// Mixin 0.8
46+
try {
47+
Class<?> mixinServiceLaunchWrapperClass = Class.forName("org.spongepowered.asm.service.mojang.MixinServiceLaunchWrapper", false, ModPatcherTweaker.class.getClassLoader());
48+
49+
// org.spongepowered.asm.service.mojang.MixinServiceLaunchWrapper.excludeTransformers
50+
Field excludeTransformersField = mixinServiceLaunchWrapperClass.getDeclaredField("excludeTransformers");
51+
excludeTransformersField.setAccessible(true);
52+
53+
Set<String> values = (Set<String>) excludeTransformersField.get(null);
54+
values.add(ModPatcherTransformer.class.getName());
55+
} catch (ClassNotFoundException ex) {
3056
// TODO Silence this once confirmed working?
31-
PatcherLog.trace("Failed to find mixin environment, normal for non-spongepowered", ignored);
32-
} catch (NoSuchFieldException | IllegalAccessException e) {
33-
PatcherLog.warn("Failed to add mixin transformer exclusion for our transformer", e);
57+
PatcherLog.trace("Failed to find mixin environment, normal for non-spongepowered", ex);
58+
} catch (Exception ex) {
59+
PatcherLog.warn("Failed to add mixin transformer exclusion for our transformer", ex);
3460
}
3561
}
3662

0 commit comments

Comments
 (0)