1212import org .spongepowered .asm .mixin .injection .At ;
1313import org .spongepowered .asm .mixin .injection .Inject ;
1414import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
15- import org .spongepowered .asm .mixin .transformer .MixinTransformer ;
15+ import org .spongepowered .asm .mixin .transformer .MixinProcessor ;
1616import org .spongepowered .asm .mixin .transformer .Proxy ;
1717
1818import java .lang .reflect .Field ;
2222
2323@ Mixin (Loader .class )
2424public 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 ;
2727
2828 /**
2929 * @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
4444 if (VanillaFixLoadingPlugin .config .textureFixes ) Mixins .addConfiguration ("mixins.vanillafix.textures.modsupport.json" );
4545 Proxy mixinProxy = (Proxy ) Launch .classLoader .getTransformers ().stream ().filter (transformer -> transformer instanceof Proxy ).findFirst ().get ();
4646 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+
4750 Field transformerField = Proxy .class .getDeclaredField ("transformer" );
4851 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 );
5058
51- Method selectConfigsMethod = MixinTransformer .class .getDeclaredMethod ("selectConfigs" , MixinEnvironment .class );
59+ Method selectConfigsMethod = MixinProcessor .class .getDeclaredMethod ("selectConfigs" , MixinEnvironment .class );
5260 selectConfigsMethod .setAccessible (true );
53- selectConfigsMethod .invoke (transformer , MixinEnvironment .getCurrentEnvironment ());
61+ selectConfigsMethod .invoke (processor , MixinEnvironment .getCurrentEnvironment ());
5462
55- Method prepareConfigsMethod = MixinTransformer .class .getDeclaredMethod ("prepareConfigs" , MixinEnvironment .class );
63+ Method prepareConfigsMethod = MixinProcessor .class .getDeclaredMethod ("prepareConfigs" , MixinEnvironment .class );
5664 prepareConfigsMethod .setAccessible (true );
57- prepareConfigsMethod .invoke (transformer , MixinEnvironment .getCurrentEnvironment ());
65+ prepareConfigsMethod .invoke (processor , MixinEnvironment .getCurrentEnvironment ());
5866 } catch (ReflectiveOperationException e ) {
5967 throw new RuntimeException (e );
6068 }
0 commit comments