|
1 | 1 | package net.devtech.grossfabrichacks.bootstrap;
|
2 | 2 |
|
| 3 | +import java.lang.annotation.Retention; |
| 4 | +import java.lang.annotation.RetentionPolicy; |
3 | 5 | import java.lang.reflect.Field;
|
4 | 6 | import java.lang.reflect.InvocationTargetException;
|
5 | 7 | import java.lang.reflect.Method;
|
|
16 | 18 | import org.spongepowered.asm.transformers.TreeTransformer;
|
17 | 19 |
|
18 | 20 | public class ClassBootstrap implements Opcodes {
|
| 21 | + private ClassBootstrap() {} |
| 22 | + |
19 | 23 | private static final Logger LOGGER = Logger.getLogger("Evil");
|
20 | 24 | public static final Method READ_CLASS;
|
21 | 25 | public static final Method WRITE_CLASS;
|
22 | 26 | public static final Field PROCESSOR;
|
23 | 27 | public static final Method APPLY_MIXINS;
|
24 | 28 |
|
25 |
| - /** |
26 |
| - * only those intelligent enough to mixin into the right place here get to wield such power |
27 |
| - */ |
| 29 | + @Retention(RetentionPolicy.CLASS) |
| 30 | + @interface Hint {String value();} |
| 31 | + |
| 32 | + @Hint("only those intelligent enough to mixin into the right place here get to wield such power") |
28 | 33 | public static byte[] transformClass(Object mixinTransformer, MixinEnvironment environment, String name, byte[] classBytes) throws InvocationTargetException, IllegalAccessException {
|
29 | 34 | TreeTransformer transformer = (TreeTransformer) mixinTransformer;
|
30 | 35 | // todo now turn this into an api, allowing mods to mixin to this for now
|
@@ -74,21 +79,7 @@ public static byte[] transformClass(Object mixinTransformer, MixinEnvironment en
|
74 | 79 | hacked = Class.forName("org.spongepowered.asm.mixin.transformer.HackedMixinTransformer", false, loader);
|
75 | 80 | }
|
76 | 81 |
|
77 |
| - Class<?> type = Class.forName("net.fabricmc.loader.launch.knot.KnotClassLoader"); |
78 |
| - Field delegateField = type.getDeclaredField("delegate"); |
79 |
| - delegateField.setAccessible(true); |
80 |
| - Object knotClassDelegate = delegateField.get(Thread.currentThread() |
81 |
| - .getContextClassLoader()); |
82 |
| - LOGGER.info("KnotClassDelegate found! " + knotClassDelegate); |
83 |
| - |
84 |
| - Field fabricMixinTransformerField = delegateField.getType().getDeclaredField("mixinTransformer"); |
85 |
| - fabricMixinTransformerField.setAccessible(true); |
86 |
| - Object fabricMixinTransformer = fabricMixinTransformerField.get(knotClassDelegate); |
87 |
| - LOGGER.info("FabricMixinTransformerProxy found! " + fabricMixinTransformer); |
88 |
| - |
89 |
| - Field transformerField = FabricMixinTransformerProxy.class.getDeclaredField("transformer"); |
90 |
| - transformerField.setAccessible(true); |
91 |
| - Object mixinTransformer = transformerField.get(fabricMixinTransformer); |
| 82 | + Object mixinTransformer = MixinEnvironment.getCurrentEnvironment().getActiveTransformer(); |
92 | 83 | LOGGER.info("MixinTransformer found! " + mixinTransformer);
|
93 | 84 |
|
94 | 85 | long klass = UnsafeUtil.getKlass(UnsafeUtil.UNSAFE.allocateInstance(hacked));
|
|
0 commit comments