diff --git a/src/main/java/net/fabricmc/loom/extension/MixinExtensionImpl.java b/src/main/java/net/fabricmc/loom/extension/MixinExtensionImpl.java index c8bf56a..d79f5d6 100644 --- a/src/main/java/net/fabricmc/loom/extension/MixinExtensionImpl.java +++ b/src/main/java/net/fabricmc/loom/extension/MixinExtensionImpl.java @@ -76,7 +76,7 @@ public class MixinExtensionImpl extends MixinExtensionApiImpl implements MixinEx protected PatternSet add0(SourceSet sourceSet, Provider refmapName) { if (!super.getUseLegacyMixinAp().get()) throw new IllegalStateException("You need to set useLegacyMixinAp = true to configure Mixin annotation processor."); - PatternSet pattern = new PatternSet().setIncludes(Collections.singletonList("*.json")); + PatternSet pattern = new PatternSet().setIncludes(Collections.singletonList("**/*.json")); MixinExtension.setMixinInformationContainer(sourceSet, new MixinExtension.MixinInformationContainer(sourceSet, refmapName, pattern)); isDefault = false; diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java index 16b8642..a9d357a 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java @@ -136,12 +136,34 @@ public abstract class RemapJarTask extends AbstractRemapJarTask { MixinExtension.getMixinInformationContainer(sourceSet) ); + String[] rootPaths = sourceSet.getResources().getSrcDirs().stream() + .map(root -> { + String rootPath = root.getAbsolutePath().replace("\\", "/"); + + if (rootPath.charAt(rootPath.length() - 1) != '/') { + rootPath += '/'; + } + + return rootPath; + }) + .toArray(String[]::new); + final String refmapName = container.refmapNameProvider().get(); final List mixinConfigs = container.sourceSet().getResources() .matching(container.mixinConfigPattern()) .getFiles() .stream() - .map(File::getName) + .map(file -> { + String s = file.getAbsolutePath().replace("\\", "/"); + + for (String rootPath : rootPaths) { + if (s.startsWith(rootPath)) { + s = s.substring(rootPath.length()); + } + } + + return s; + }) .filter(allMixinConfigs::contains) .toList(); diff --git a/src/test/groovy/net/fabricmc/loom/test/integration/MixinApAutoRefmapTest.groovy b/src/test/groovy/net/fabricmc/loom/test/integration/MixinApAutoRefmapTest.groovy index f8b5b6d..69bfa93 100644 --- a/src/test/groovy/net/fabricmc/loom/test/integration/MixinApAutoRefmapTest.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/integration/MixinApAutoRefmapTest.groovy @@ -67,6 +67,9 @@ class MixinApAutoRefmapTest extends Specification implements GradleProjectTestTr def j5 = JsonParser.parseReader(new InputStreamReader(jar.getInputStream(jar.getEntry("irrelevant.mixins.json")))) !j5.asJsonObject.has("refmap") + def j6 = JsonParser.parseReader(new InputStreamReader(jar.getInputStream(jar.getEntry("subfolder/subfolder.mixins.json")))) + j6.asJsonObject.getAsJsonPrimitive("refmap").getAsString() == "refmap0001.json" + where: version << STANDARD_TEST_VERSIONS } diff --git a/src/test/resources/projects/mixinApAutoRefmap/src/main/java/net/fabricmc/example/mixin/ExampleMixinSubfolder.java b/src/test/resources/projects/mixinApAutoRefmap/src/main/java/net/fabricmc/example/mixin/ExampleMixinSubfolder.java new file mode 100644 index 0000000..519929e --- /dev/null +++ b/src/test/resources/projects/mixinApAutoRefmap/src/main/java/net/fabricmc/example/mixin/ExampleMixinSubfolder.java @@ -0,0 +1,15 @@ +package net.fabricmc.example.mixin; + +import net.minecraft.client.gui.screen.ChatScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ChatScreen.class) +public class ExampleMixinSubfolder { + @Inject(at = @At("HEAD"), method = "init()V") + private void init(CallbackInfo info) { + System.out.println("This line is printed by an example mod mixin!"); + } +} diff --git a/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/fabric.mod.json b/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/fabric.mod.json index 62efe82..c92f0ce 100644 --- a/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/fabric.mod.json +++ b/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/fabric.mod.json @@ -24,6 +24,7 @@ }, "mixins": [ "main.mixins.json", + "subfolder/subfolder.mixins.json", { "config": "blabla.json", "environment": "client" diff --git a/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/subfolder/subfolder.mixins.json b/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/subfolder/subfolder.mixins.json new file mode 100644 index 0000000..ef124ca --- /dev/null +++ b/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/subfolder/subfolder.mixins.json @@ -0,0 +1,14 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.fabricmc.example.mixin", + "compatibilityLevel": "JAVA_16", + "mixins": [ + ], + "client": [ + "ExampleMixinSubfolder" + ], + "injectors": { + "defaultRequire": 1 + } +}