Add support for mixin files outside of root in MixinRefmapHelper (#536)
* Add support for mixin files outside of root in MixinRefmapHelper * Fix checkstyle + Integration tests + Checks all srcDirs from sourceSet * Redid part that failed to save for last commit * Other issues fixed * Checkstyle again * Made getting root paths safer Co-authored-by: Juuxel <6596629+Juuxel@users.noreply.github.com> * CodeNarc for test * Normalized all paths to fix issues on Windows * Removed debug line used to test return value of lamdba Co-authored-by: Juuxel <6596629+Juuxel@users.noreply.github.com> Co-authored-by: modmuss50 <modmuss50@gmail.com>
This commit is contained in:
parent
63f2b51b2c
commit
7611e3a632
6 changed files with 57 additions and 2 deletions
|
@ -76,7 +76,7 @@ public class MixinExtensionImpl extends MixinExtensionApiImpl implements MixinEx
|
||||||
protected PatternSet add0(SourceSet sourceSet, Provider<String> refmapName) {
|
protected PatternSet add0(SourceSet sourceSet, Provider<String> refmapName) {
|
||||||
if (!super.getUseLegacyMixinAp().get()) throw new IllegalStateException("You need to set useLegacyMixinAp = true to configure Mixin annotation processor.");
|
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));
|
MixinExtension.setMixinInformationContainer(sourceSet, new MixinExtension.MixinInformationContainer(sourceSet, refmapName, pattern));
|
||||||
|
|
||||||
isDefault = false;
|
isDefault = false;
|
||||||
|
|
|
@ -136,12 +136,34 @@ public abstract class RemapJarTask extends AbstractRemapJarTask {
|
||||||
MixinExtension.getMixinInformationContainer(sourceSet)
|
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 String refmapName = container.refmapNameProvider().get();
|
||||||
final List<String> mixinConfigs = container.sourceSet().getResources()
|
final List<String> mixinConfigs = container.sourceSet().getResources()
|
||||||
.matching(container.mixinConfigPattern())
|
.matching(container.mixinConfigPattern())
|
||||||
.getFiles()
|
.getFiles()
|
||||||
.stream()
|
.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)
|
.filter(allMixinConfigs::contains)
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,9 @@ class MixinApAutoRefmapTest extends Specification implements GradleProjectTestTr
|
||||||
def j5 = JsonParser.parseReader(new InputStreamReader(jar.getInputStream(jar.getEntry("irrelevant.mixins.json"))))
|
def j5 = JsonParser.parseReader(new InputStreamReader(jar.getInputStream(jar.getEntry("irrelevant.mixins.json"))))
|
||||||
!j5.asJsonObject.has("refmap")
|
!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:
|
where:
|
||||||
version << STANDARD_TEST_VERSIONS
|
version << STANDARD_TEST_VERSIONS
|
||||||
}
|
}
|
||||||
|
|
|
@ -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!");
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,6 +24,7 @@
|
||||||
},
|
},
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"main.mixins.json",
|
"main.mixins.json",
|
||||||
|
"subfolder/subfolder.mixins.json",
|
||||||
{
|
{
|
||||||
"config": "blabla.json",
|
"config": "blabla.json",
|
||||||
"environment": "client"
|
"environment": "client"
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"required": true,
|
||||||
|
"minVersion": "0.8",
|
||||||
|
"package": "net.fabricmc.example.mixin",
|
||||||
|
"compatibilityLevel": "JAVA_16",
|
||||||
|
"mixins": [
|
||||||
|
],
|
||||||
|
"client": [
|
||||||
|
"ExampleMixinSubfolder"
|
||||||
|
],
|
||||||
|
"injectors": {
|
||||||
|
"defaultRequire": 1
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue