@@ -55,8 +55,7 @@ public static void main(String[] args) {
55
55
private static void removeFromSysArgs () {
56
56
// Remove SpongeCoremod from args as we load it ourselves
57
57
List <String > coreModsArgs = new ArrayList <String >(Arrays .asList (System .getProperty ("fml.coreMods.load" , "" ).split ("," )));
58
- while (coreModsArgs .contains (COREMOD )) {
59
- coreModsArgs .remove (COREMOD );
58
+ while (coreModsArgs .remove (COREMOD )) {
60
59
}
61
60
StringBuilder coreMods = new StringBuilder ();
62
61
for (String cm : coreModsArgs ) {
@@ -181,10 +180,27 @@ public static class PostFMLTweaker extends SimpleTweaker {
181
180
@ Override
182
181
public void injectIntoClassLoader (LaunchClassLoader classLoader ) {
183
182
// Mixin system already loaded early so don't load twice
184
- List <?> tweakClasses = (List <?>) Launch .blackboard .get ("TweakClasses" );
183
+ @ SuppressWarnings ("unchecked" )
184
+ List <String > tweakClasses = (List <String >) Launch .blackboard .get ("TweakClasses" );
185
+ boolean duplicateMixin = false ;
185
186
while (tweakClasses .remove ("org.spongepowered.asm.launch.MixinTweaker" )) {
187
+ duplicateMixin = true ;
188
+ }
189
+ // Another mod is using mixin system
190
+ if (duplicateMixin ) {
191
+ try {
192
+ // This feels wrong but it works
193
+ // For some reason 'register' gets called before 'preInit'
194
+ // even though MixinTweaker calls preInit in constructor
195
+ Class <?> c = Class .forName ("org.spongepowered.asm.launch.MixinBootstrap" );
196
+ Field init = c .getDeclaredField ("initialised" );
197
+ init .setAccessible (true );
198
+ init .set (null , true );
199
+ tweakClasses .add ("org.spongepowered.asm.launch.MixinTweaker" );
200
+ } catch (Exception e ) {
201
+ e .printStackTrace ();
202
+ }
186
203
}
187
- System .out .println (Launch .blackboard );
188
204
}
189
205
}
190
206
0 commit comments