12
12
import org .spongepowered .asm .mixin .injection .At ;
13
13
import org .spongepowered .asm .mixin .injection .Inject ;
14
14
import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
15
- import org .spongepowered .asm .mixin .transformer .MixinTransformer ;
15
+ import org .spongepowered .asm .mixin .transformer .MixinProcessor ;
16
16
import org .spongepowered .asm .mixin .transformer .Proxy ;
17
17
18
18
import java .lang .reflect .Field ;
22
22
23
23
@ Mixin (Loader .class )
24
24
public class MixinLoader {
25
- @ Shadow private List <ModContainer > mods ;
26
- @ Shadow private ModClassLoader modClassLoader ;
25
+ @ Shadow ( remap = false ) private List <ModContainer > mods ;
26
+ @ Shadow ( remap = false ) private ModClassLoader modClassLoader ;
27
27
28
28
/**
29
29
* @reason Load all mods now and load mod support mixin configs. This can't be done later
@@ -44,17 +44,25 @@ private void beforeConstructingMods(List<String> injectedModContainers, Callback
44
44
if (VanillaFixLoadingPlugin .config .textureFixes ) Mixins .addConfiguration ("mixins.vanillafix.textures.modsupport.json" );
45
45
Proxy mixinProxy = (Proxy ) Launch .classLoader .getTransformers ().stream ().filter (transformer -> transformer instanceof Proxy ).findFirst ().get ();
46
46
try {
47
+ //This will very likely break on the next major mixin release.
48
+ Class mixinTransformerClass = Class .forName ("org.spongepowered.asm.mixin.transformer.MixinTransformer" );
49
+
47
50
Field transformerField = Proxy .class .getDeclaredField ("transformer" );
48
51
transformerField .setAccessible (true );
49
- MixinTransformer transformer = (MixinTransformer ) transformerField .get (mixinProxy );
52
+ Object transformer = transformerField .get (mixinProxy );
53
+
54
+ //Get MixinProcessor from MixinTransformer
55
+ Field processorField = mixinTransformerClass .getDeclaredField ("processor" );
56
+ processorField .setAccessible (true );
57
+ Object processor = processorField .get (transformer );
50
58
51
- Method selectConfigsMethod = MixinTransformer .class .getDeclaredMethod ("selectConfigs" , MixinEnvironment .class );
59
+ Method selectConfigsMethod = MixinProcessor .class .getDeclaredMethod ("selectConfigs" , MixinEnvironment .class );
52
60
selectConfigsMethod .setAccessible (true );
53
- selectConfigsMethod .invoke (transformer , MixinEnvironment .getCurrentEnvironment ());
61
+ selectConfigsMethod .invoke (processor , MixinEnvironment .getCurrentEnvironment ());
54
62
55
- Method prepareConfigsMethod = MixinTransformer .class .getDeclaredMethod ("prepareConfigs" , MixinEnvironment .class );
63
+ Method prepareConfigsMethod = MixinProcessor .class .getDeclaredMethod ("prepareConfigs" , MixinEnvironment .class );
56
64
prepareConfigsMethod .setAccessible (true );
57
- prepareConfigsMethod .invoke (transformer , MixinEnvironment .getCurrentEnvironment ());
65
+ prepareConfigsMethod .invoke (processor , MixinEnvironment .getCurrentEnvironment ());
58
66
} catch (ReflectiveOperationException e ) {
59
67
throw new RuntimeException (e );
60
68
}
0 commit comments