aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java6
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java11
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java10
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProviderImpl.java14
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java42
-rw-r--r--src/main/java/net/fabricmc/loom/util/RecordComponentFixVisitor.java4
-rw-r--r--src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy2
-rw-r--r--src/test/groovy/net/fabricmc/loom/test/integration/FabricAPITest.groovy8
-rw-r--r--src/test/resources/patches/fabric_api.patch22
-rw-r--r--src/test/resources/projects/java16/gradle.properties8
-rw-r--r--src/test/resources/projects/multiproject/core/build.gradle7
-rw-r--r--src/test/resources/projects/multiproject/example/src/main/java/net/fabricmc/example/ExampleMod.java9
12 files changed, 73 insertions, 70 deletions
diff --git a/src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java b/src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java
index 496e432e..ceccd3b2 100644
--- a/src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java
+++ b/src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java
@@ -46,6 +46,7 @@ import org.gradle.api.artifacts.result.ComponentArtifactsResult;
import org.gradle.api.artifacts.result.ResolvedArtifactResult;
import org.gradle.api.file.FileCollection;
import org.gradle.api.logging.Logger;
+import org.gradle.api.plugins.JavaPlugin;
import org.gradle.jvm.JvmLibrary;
import org.gradle.language.base.artifact.SourcesArtifact;
import org.jetbrains.annotations.Nullable;
@@ -160,6 +161,11 @@ public class ModCompileRemapper {
if (entry.replacedWith() != null && !modDependencies.isEmpty()) {
extension.getDeprecationHelper().replaceWithInLoom0_11(entry.sourceConfiguration(), entry.replacedWith());
}
+
+ // Export to other projects
+ if (entry.targetConfiguration().equals(JavaPlugin.API_CONFIGURATION_NAME)) {
+ project.getConfigurations().getByName(Constants.Configurations.NAMED_ELEMENTS).extendsFrom(remappedConfig);
+ }
});
}
}
diff --git a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java
index 548e946d..9e9646c2 100644
--- a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java
+++ b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java
@@ -24,10 +24,14 @@
package net.fabricmc.loom.configuration;
+import java.nio.charset.StandardCharsets;
+
import org.gradle.api.Project;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginConvention;
+import org.gradle.api.tasks.AbstractCopyTask;
import org.gradle.api.tasks.SourceSet;
+import org.gradle.api.tasks.compile.JavaCompile;
import org.gradle.api.tasks.javadoc.Javadoc;
import org.gradle.jvm.tasks.Jar;
@@ -106,6 +110,7 @@ public final class CompileConfiguration {
extension.createLazyConfiguration(Constants.Configurations.NAMED_ELEMENTS).configure(configuration -> {
configuration.setCanBeConsumed(true);
configuration.setCanBeResolved(false);
+ configuration.extendsFrom(project.getConfigurations().getByName(JavaPlugin.API_CONFIGURATION_NAME));
});
extendsFrom(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, Constants.Configurations.MAPPING_CONSTANTS, project);
@@ -219,6 +224,12 @@ public final class CompileConfiguration {
// Add the "dev" jar to the "namedElements" configuration
p.artifacts(artifactHandler -> artifactHandler.add(Constants.Configurations.NAMED_ELEMENTS, p.getTasks().getByName("jar")));
+ // Ensure that the encoding is set to UTF-8, no matter what the system default is
+ // this fixes some edge cases with special characters not displaying correctly
+ // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
+ p.getTasks().withType(AbstractCopyTask.class).configureEach(abstractCopyTask -> abstractCopyTask.setFilteringCharset(StandardCharsets.UTF_8.name()));
+ p.getTasks().withType(JavaCompile.class).configureEach(javaCompile -> javaCompile.getOptions().setEncoding(StandardCharsets.UTF_8.name()));
+
if (p.getPluginManager().hasPlugin("org.jetbrains.kotlin.kapt")) {
// If loom is applied after kapt, then kapt will use the AP arguments too early for loom to pass the arguments we need for mixin.
throw new IllegalArgumentException("fabric-loom must be applied BEFORE kapt in the plugins { } block.");
diff --git a/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java
index 49403099..66f0481f 100644
--- a/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java
+++ b/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java
@@ -78,7 +78,15 @@ public class RemapConfiguration {
return;
}
- PublishArtifact artifact = artifacts.add(JavaPlugin.SOURCES_ELEMENTS_CONFIGURATION_NAME, task.getOutput());
+ PublishArtifact artifact = artifacts.add(JavaPlugin.SOURCES_ELEMENTS_CONFIGURATION_NAME, task.getOutput(), configurablePublishArtifact -> {
+ Task remapJarTask = task;
+
+ if (extension.getShareRemapCaches().get()) {
+ remapJarTask = project.getRootProject().getTasks().getByName(DEFAULT_REMAP_ALL_JARS_TASK_NAME);
+ }
+
+ configurablePublishArtifact.builtBy(remapJarTask);
+ });
// Remove the existing artifact that does not run remapSourcesJar.
// It doesn't seem to hurt, but I'm not sure if the file-level duplicates cause issues.
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProviderImpl.java b/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProviderImpl.java
index 39ba664d..1967bb72 100644
--- a/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProviderImpl.java
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProviderImpl.java
@@ -298,8 +298,13 @@ public class MinecraftProviderImpl extends DependencyProvider implements Minecra
}
String jarPath = null;
+ String[] versions = versionsList.split("\n");
- for (String version : versionsList.split("\n")) {
+ if (versions.length != 1) {
+ throw new UnsupportedOperationException("Expected only 1 version in META-INF/versions.list, but got %d".formatted(versions.length));
+ }
+
+ for (String version : versions) {
if (version.isBlank()) continue;
String[] split = version.split("\t");
@@ -310,10 +315,9 @@ public class MinecraftProviderImpl extends DependencyProvider implements Minecra
final String id = split[1];
final String path = split[2];
- if (minecraftVersion().equals(id)) {
- jarPath = path;
- break;
- }
+ // Take the first (only) version we find.
+ jarPath = path;
+ break;
}
Objects.requireNonNull(jarPath, "Could not find minecraft server jar for " + minecraftVersion());
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java
index 8d9b2186..550ab640 100644
--- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java
@@ -83,8 +83,6 @@ import net.fabricmc.mappingio.tree.MappingTree;
import net.fabricmc.mappingio.tree.MemoryMappingTree;
import net.fabricmc.stitch.Command;
import net.fabricmc.stitch.commands.CommandProposeFieldNames;
-import net.fabricmc.stitch.commands.tinyv2.CommandMergeTinyV2;
-import net.fabricmc.stitch.commands.tinyv2.CommandReorderTinyV2;
import net.fabricmc.stitch.commands.tinyv2.TinyFile;
import net.fabricmc.stitch.commands.tinyv2.TinyV2Writer;
@@ -225,7 +223,7 @@ public class MappingsProviderImpl extends DependencyProvider implements Mappings
if (processorManager.active() || (extension.isForge() && patchedProvider.usesProjectCache())) {
mappedProvider = new MinecraftProcessedProvider(getProject(), processorManager);
- getProject().getLogger().lifecycle("Using project based jar storage");
+ getProject().getLogger().info("Using project based jar storage");
} else {
mappedProvider = new MinecraftMappedProvider(getProject());
}
@@ -447,18 +445,22 @@ public class MappingsProviderImpl extends DependencyProvider implements Mappings
Stopwatch stopwatch = Stopwatch.createStarted();
project.getLogger().info(":merging mappings");
- MemoryMappingTree tree = new MemoryMappingTree();
- MappingSourceNsSwitch sourceNsSwitch = new MappingSourceNsSwitch(tree, MappingsNamespace.OFFICIAL.toString());
- readIntermediaryTree().accept(sourceNsSwitch);
+ MemoryMappingTree intermediaryTree = new MemoryMappingTree();
+ readIntermediaryTree().accept(new MappingSourceNsSwitch(intermediaryTree, MappingsNamespace.INTERMEDIARY.toString()));
try (BufferedReader reader = Files.newBufferedReader(from, StandardCharsets.UTF_8)) {
- Tiny2Reader.read(reader, tree);
+ Tiny2Reader.read(reader, intermediaryTree);
}
- inheritMappedNamesOfEnclosingClasses(tree);
+ MemoryMappingTree officialTree = new MemoryMappingTree();
+ MappingNsCompleter nsCompleter = new MappingNsCompleter(officialTree, Map.of(MappingsNamespace.OFFICIAL.toString(), MappingsNamespace.INTERMEDIARY.toString()));
+ MappingSourceNsSwitch nsSwitch = new MappingSourceNsSwitch(nsCompleter, MappingsNamespace.OFFICIAL.toString());
+ intermediaryTree.accept(nsSwitch);
+
+ inheritMappedNamesOfEnclosingClasses(officialTree);
try (Tiny2Writer writer = new Tiny2Writer(Files.newBufferedWriter(out, StandardCharsets.UTF_8), false)) {
- tree.accept(writer);
+ officialTree.accept(writer);
}
project.getLogger().info(":merged mappings in " + stopwatch.stop());
@@ -509,28 +511,6 @@ public class MappingsProviderImpl extends DependencyProvider implements Mappings
return tree;
}
- private void reorderMappings(Path oldMappings, Path newMappings, String... newOrder) {
- Command command = new CommandReorderTinyV2();
- String[] args = new String[2 + newOrder.length];
- args[0] = oldMappings.toAbsolutePath().toString();
- args[1] = newMappings.toAbsolutePath().toString();
- System.arraycopy(newOrder, 0, args, 2, newOrder.length);
- runCommand(command, args);
- }
-
- private void mergeMappings(Path intermediaryMappings, Path yarnMappings, Path newMergedMappings) {
- try {
- Command command = new CommandMergeTinyV2();
- runCommand(command, intermediaryMappings.toAbsolutePath().toString(),
- yarnMappings.toAbsolutePath().toString(),
- newMergedMappings.toAbsolutePath().toString(),
- MappingsNamespace.INTERMEDIARY.toString(), MappingsNamespace.OFFICIAL.toString());
- } catch (Exception e) {
- throw new RuntimeException("Could not merge mappings from " + intermediaryMappings.toString()
- + " with mappings from " + yarnMappings, e);
- }
- }
-
private void suggestFieldNames(MinecraftProviderImpl minecraftProvider, Path oldMappings, Path newMappings) {
Command command = new CommandProposeFieldNames();
runCommand(command, minecraftProvider.getMergedJar().getAbsolutePath(),
diff --git a/src/main/java/net/fabricmc/loom/util/RecordComponentFixVisitor.java b/src/main/java/net/fabricmc/loom/util/RecordComponentFixVisitor.java
index 14b26e20..fecab246 100644
--- a/src/main/java/net/fabricmc/loom/util/RecordComponentFixVisitor.java
+++ b/src/main/java/net/fabricmc/loom/util/RecordComponentFixVisitor.java
@@ -24,6 +24,8 @@
package net.fabricmc.loom.util;
+import java.util.Objects;
+
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.RecordComponentVisitor;
@@ -60,7 +62,7 @@ public class RecordComponentFixVisitor extends ClassVisitor {
@Override
public FieldVisitor visitField(int access, String name, String descriptor, String signature, Object value) {
- String intermediaryName = mappings.getField(owner, name, descriptor).getName(intermediaryNsId);
+ String intermediaryName = Objects.requireNonNull(mappings.getField(owner, name, descriptor), "Could not get field for %s:%s%s".formatted(owner, name, descriptor)).getName(intermediaryNsId);
if (!hasExistingComponents && intermediaryName != null && intermediaryName.startsWith("comp_")) {
super.visitRecordComponent(name, descriptor, signature);
diff --git a/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy b/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy
index 5329c9fe..8156fce6 100644
--- a/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy
+++ b/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy
@@ -28,7 +28,7 @@ import org.gradle.util.GradleVersion
class LoomTestConstants {
public final static String DEFAULT_GRADLE = GradleVersion.current().getVersion()
- public final static String PRE_RELEASE_GRADLE = "7.4-20211023222429+0000"
+ public final static String PRE_RELEASE_GRADLE = "7.4-20211110232442+0000"
public final static String[] STANDARD_TEST_VERSIONS = [DEFAULT_GRADLE, PRE_RELEASE_GRADLE]
}
diff --git a/src/test/groovy/net/fabricmc/loom/test/integration/FabricAPITest.groovy b/src/test/groovy/net/fabricmc/loom/test/integration/FabricAPITest.groovy
index 7c1246b5..40ca45f0 100644
--- a/src/test/groovy/net/fabricmc/loom/test/integration/FabricAPITest.groovy
+++ b/src/test/groovy/net/fabricmc/loom/test/integration/FabricAPITest.groovy
@@ -43,14 +43,14 @@ class FabricAPITest extends Specification implements GradleProjectTestTrait {
def "build and run (gradle #version)"() {
setup:
def gradle = gradleProject(
- repo: "https://github.com/FabricMC/fabric.git",
- commit: "46582230fb580d4c1f71e4b0737df27417ec9cb1",
+ repo: "https://github.com/modmuss50/fabric.git",
+ commit: "e954edb6069e36139fd70428cfe4cddb5826c498",
version: version,
- patch: "fabric_api"
+// patch: "fabric_api"
)
// Set the version to something constant
- gradle.buildGradle.text = gradle.buildGradle.text.replace('Globals.baseVersion + "+" + (ENV.GITHUB_RUN_NUMBER ? "" : "local-") + getBranch()', "\"$API_VERSION\"")
+ gradle.buildGradle.text = gradle.buildGradle.text.replace('project.version + "+" + (ENV.GITHUB_RUN_NUMBER ? "" : "local-") + getBranch()', "\"$API_VERSION\"")
.replace('id "fabric-loom" version "0.9.50"', 'id "dev.architectury.loom"')
.replace('"fabric-loom"', '"dev.architectury.loom"')
diff --git a/src/test/resources/patches/fabric_api.patch b/src/test/resources/patches/fabric_api.patch
deleted file mode 100644
index cce2c1a8..00000000
--- a/src/test/resources/patches/fabric_api.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/build.gradle b/build.gradle
---- a/build.gradle (revision fc40aa9d88e9457957bdf3f8cec9698846828cd3)
-+++ b/build.gradle (date 1631009569915)
-@@ -257,6 +257,9 @@
- setupRepositories(repositories)
- }
-
-+ // Required as moduleDependencies modifies the pom
-+ loom.disableDeprecatedPomGeneration(publishing.publications.mavenJava)
-+
- javadoc.enabled = false
- }
-
-@@ -296,6 +299,8 @@
- setupRepositories(repositories)
- }
-
-+loom.disableDeprecatedPomGeneration(publishing.publications.mavenJava)
-+
- void setupRepositories(RepositoryHandler repositories) {
- //repositories.mavenLocal() // uncomment for testing
- def ENV = System.getenv()
diff --git a/src/test/resources/projects/java16/gradle.properties b/src/test/resources/projects/java16/gradle.properties
index 753673c4..cdc647ce 100644
--- a/src/test/resources/projects/java16/gradle.properties
+++ b/src/test/resources/projects/java16/gradle.properties
@@ -1,9 +1,9 @@
org.gradle.jvmargs=-Xmx1G
-minecraft_version=21w39a
-yarn_mappings=21w39a+build.1
-loader_version=0.11.7
-fabric_version=0.40.4+1.18
+minecraft_version=1.18-pre1
+yarn_mappings=1.18-pre1+build.2
+loader_version=0.12.5
+fabric_version=0.42.1+1.18
mod_version = 1.0.0
maven_group = com.example
diff --git a/src/test/resources/projects/multiproject/core/build.gradle b/src/test/resources/projects/multiproject/core/build.gradle
index 8a09f64b..652eb359 100644
--- a/src/test/resources/projects/multiproject/core/build.gradle
+++ b/src/test/resources/projects/multiproject/core/build.gradle
@@ -1 +1,6 @@
-archivesBaseName = "core" \ No newline at end of file
+archivesBaseName = "core"
+
+dependencies {
+ // An example api dep to be used by the other sub project.
+ modApi "TechReborn:TechReborn-1.16:3.8.4+build.236"
+} \ No newline at end of file
diff --git a/src/test/resources/projects/multiproject/example/src/main/java/net/fabricmc/example/ExampleMod.java b/src/test/resources/projects/multiproject/example/src/main/java/net/fabricmc/example/ExampleMod.java
index e5ed082e..2afebd00 100644
--- a/src/test/resources/projects/multiproject/example/src/main/java/net/fabricmc/example/ExampleMod.java
+++ b/src/test/resources/projects/multiproject/example/src/main/java/net/fabricmc/example/ExampleMod.java
@@ -1,6 +1,9 @@
package net.fabricmc.example;
import net.fabricmc.api.ModInitializer;
+import net.minecraft.block.BlockState;
+import techreborn.blocks.cable.CableShapeUtil;
+import net.minecraft.util.shape.VoxelShape;
public class ExampleMod implements ModInitializer {
@Override
@@ -10,5 +13,11 @@ public class ExampleMod implements ModInitializer {
// Proceed with mild caution.
System.out.println("Hello Fabric world!");
+
+ if (false) {
+ // Just here to make sure it compiles as named, not to test it runs
+ BlockState state = null;
+ VoxelShape shape = new CableShapeUtil(null).getShape(state);
+ }
}
}