Skip to content

Commit f165724

Browse files
committed
Skip classgraph scanning on Forge
1 parent 56b6320 commit f165724

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

common/src/main/java/gay/object/caduceus/mixin/MixinConfigPlugin.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,18 @@
3131
public class MixinConfigPlugin implements IMixinConfigPlugin {
3232
private static final Logger LOGGER = LogManager.getLogger("caduceus-mixins");
3333
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;
3535

3636
@Override
3737
public void onLoad(String rawMixinPackage) {
3838
var mixinPackage = rawMixinPackage.replace('.', '/');
3939

40+
// :(
41+
if (isForge()) {
42+
LOGGER.error("Forge detected, falling back to default ContinuationFrame mixin targets :(");
43+
return;
44+
}
45+
4046
LOGGER.info("Scanning class graph.");
4147
var graph = new ClassGraph()
4248
.enableClassInfo()
@@ -49,13 +55,12 @@ public void onLoad(String rawMixinPackage) {
4955
"net.fabricmc",
5056
"net.minecraftforge"
5157
);
52-
//noinspection UnreachableCode
5358
try (
54-
// on Fabric, scan deadlocks if NOT on main thread
5559
// 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)
5964
) {
6065
var targetClasses = scanResult
6166
.getClassesImplementing(ContinuationFrame.class)
@@ -65,14 +70,14 @@ public void onLoad(String rawMixinPackage) {
6570
);
6671
LOGGER.info("Target ContinuationFrame subclasses:\n {}", String.join("\n ", targetClasses.getNames()));
6772

68-
var mixinName = mixinPackage + "/" + mixinClassname;
73+
var mixinName = mixinPackage + "/" + BASE_MIXIN_CLASSNAME;
6974
LOGGER.info("Creating mixin: {}", mixinName);
7075

7176
var writer = new ClassWriter(0);
7277

7378
// move mixin out of template package
7479
var remapper = new ClassRemapper(writer, new SimpleRemapper(
75-
mixinPackage + "/template/" + mixinClassname,
80+
mixinPackage + "/template/" + BASE_MIXIN_CLASSNAME,
7681
mixinName
7782
));
7883

@@ -105,7 +110,7 @@ public AnnotationVisitor visitArray(String name) {
105110

106111
var node = MixinService.getService()
107112
.getBytecodeProvider()
108-
.getClassNode(rawMixinPackage + ".template." + mixinClassname);
113+
.getClassNode(rawMixinPackage + ".template." + BASE_MIXIN_CLASSNAME);
109114
node.accept(visitor);
110115

111116
// FIXME: only works on Fabric :(
@@ -142,9 +147,15 @@ public Permission getPermission() {
142147
)
143148
);
144149
} 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;
147152
}
153+
154+
mixinClassname = BASE_MIXIN_CLASSNAME;
155+
}
156+
157+
private static boolean isForge() {
158+
return ArchitecturyTarget.getCurrentTarget().contains("forge");
148159
}
149160

150161
// see: https://github.com/Chocohead/Fabric-ASM/blob/39abe596bce4e353594bea207eae43eee181ce9c/src/com/chocohead/mm/Plugin.java

0 commit comments

Comments
 (0)