31
31
public class MixinConfigPlugin implements IMixinConfigPlugin {
32
32
private static final Logger LOGGER = LogManager .getLogger ("caduceus-mixins" );
33
33
private static final String BASE_MIXIN_CLASSNAME = "MixinAllContinuationFrames" ;
34
- private static String mixinClassname = BASE_MIXIN_CLASSNAME ;
34
+ private static String mixinClassname = "template." + BASE_MIXIN_CLASSNAME ;
35
35
36
36
@ Override
37
37
public void onLoad (String rawMixinPackage ) {
38
38
var mixinPackage = rawMixinPackage .replace ('.' , '/' );
39
39
40
+ // :(
41
+ if (isForge ()) {
42
+ LOGGER .error ("Forge detected, falling back to default ContinuationFrame mixin targets :(" );
43
+ return ;
44
+ }
45
+
40
46
LOGGER .info ("Scanning class graph." );
41
47
var graph = new ClassGraph ()
42
48
.enableClassInfo ()
@@ -49,13 +55,12 @@ public void onLoad(String rawMixinPackage) {
49
55
"net.fabricmc" ,
50
56
"net.minecraftforge"
51
57
);
52
- //noinspection UnreachableCode
53
58
try (
54
- // on Fabric, scan deadlocks if NOT on main thread
55
59
// on Forge, scan is cancelled if ON main thread
56
- var scanResult = ArchitecturyTarget .getCurrentTarget ().equals ("fabric" )
57
- ? graph .scan (MoreExecutors .newDirectExecutorService (), 1 )
58
- : graph .scan ()
60
+ // on Fabric, scan deadlocks if NOT ON main thread
61
+ var scanResult = isForge ()
62
+ ? graph .scan ()
63
+ : graph .scan (MoreExecutors .newDirectExecutorService (), 1 )
59
64
) {
60
65
var targetClasses = scanResult
61
66
.getClassesImplementing (ContinuationFrame .class )
@@ -65,14 +70,14 @@ public void onLoad(String rawMixinPackage) {
65
70
);
66
71
LOGGER .info ("Target ContinuationFrame subclasses:\n {}" , String .join ("\n " , targetClasses .getNames ()));
67
72
68
- var mixinName = mixinPackage + "/" + mixinClassname ;
73
+ var mixinName = mixinPackage + "/" + BASE_MIXIN_CLASSNAME ;
69
74
LOGGER .info ("Creating mixin: {}" , mixinName );
70
75
71
76
var writer = new ClassWriter (0 );
72
77
73
78
// move mixin out of template package
74
79
var remapper = new ClassRemapper (writer , new SimpleRemapper (
75
- mixinPackage + "/template/" + mixinClassname ,
80
+ mixinPackage + "/template/" + BASE_MIXIN_CLASSNAME ,
76
81
mixinName
77
82
));
78
83
@@ -105,7 +110,7 @@ public AnnotationVisitor visitArray(String name) {
105
110
106
111
var node = MixinService .getService ()
107
112
.getBytecodeProvider ()
108
- .getClassNode (rawMixinPackage + ".template." + mixinClassname );
113
+ .getClassNode (rawMixinPackage + ".template." + BASE_MIXIN_CLASSNAME );
109
114
node .accept (visitor );
110
115
111
116
// FIXME: only works on Fabric :(
@@ -142,9 +147,15 @@ public Permission getPermission() {
142
147
)
143
148
);
144
149
} catch (Throwable t ) {
145
- LOGGER .error ("Mixin generation failed, falling back to default targets :(" , t );
146
- mixinClassname = "template." + BASE_MIXIN_CLASSNAME ;
150
+ LOGGER .error ("Mixin generation failed, falling back to default ContinuationFrame mixin targets :(" , t );
151
+ return ;
147
152
}
153
+
154
+ mixinClassname = BASE_MIXIN_CLASSNAME ;
155
+ }
156
+
157
+ private static boolean isForge () {
158
+ return ArchitecturyTarget .getCurrentTarget ().contains ("forge" );
148
159
}
149
160
150
161
// see: https://github.com/Chocohead/Fabric-ASM/blob/39abe596bce4e353594bea207eae43eee181ce9c/src/com/chocohead/mm/Plugin.java
0 commit comments