aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJuuxel <6596629+Juuxel@users.noreply.github.com>2020-07-30 17:22:03 +0300
committerJuuxel <6596629+Juuxel@users.noreply.github.com>2020-07-30 17:22:03 +0300
commit0f5efe13c92cb9a156d4178b90b1497886bca8a2 (patch)
tree033fe9c97c7bfc352c833899612e5ac3ebdfe54e /src
parent7f2104a44c1a3b2ff93c205251afa06c83095b0a (diff)
downloadarchitectury-loom-0f5efe13c92cb9a156d4178b90b1497886bca8a2.tar.gz
architectury-loom-0f5efe13c92cb9a156d4178b90b1497886bca8a2.tar.bz2
architectury-loom-0f5efe13c92cb9a156d4178b90b1497886bca8a2.zip
Copy userdev 'inject' files into the game jar
Diffstat (limited to 'src')
-rw-r--r--src/main/java/net/fabricmc/loom/LoomGradleExtension.java5
-rw-r--r--src/main/java/net/fabricmc/loom/providers/ForgeUserdevProvider.java11
-rw-r--r--src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java35
-rw-r--r--src/main/java/net/fabricmc/loom/util/function/FsPathConsumer.java4
4 files changed, 45 insertions, 10 deletions
diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
index 02fcb15c..cc2f369c 100644
--- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
+++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
@@ -49,6 +49,7 @@ import org.gradle.api.plugins.BasePluginConvention;
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
import net.fabricmc.loom.processors.JarProcessorManager;
import net.fabricmc.loom.providers.ForgeUniversalProvider;
+import net.fabricmc.loom.providers.ForgeUserdevProvider;
import net.fabricmc.loom.providers.MappingsProvider;
import net.fabricmc.loom.providers.MinecraftMappedProvider;
import net.fabricmc.loom.providers.MinecraftProvider;
@@ -346,6 +347,10 @@ public class LoomGradleExtension {
return getDependencyManager().getProvider(ForgeUniversalProvider.class);
}
+ public ForgeUserdevProvider getForgeUserdevProvider() {
+ return getDependencyManager().getProvider(ForgeUserdevProvider.class);
+ }
+
public void setDependencyManager(LoomDependencyManager dependencyManager) {
this.dependencyManager = dependencyManager;
}
diff --git a/src/main/java/net/fabricmc/loom/providers/ForgeUserdevProvider.java b/src/main/java/net/fabricmc/loom/providers/ForgeUserdevProvider.java
index 93f1e50f..58d27204 100644
--- a/src/main/java/net/fabricmc/loom/providers/ForgeUserdevProvider.java
+++ b/src/main/java/net/fabricmc/loom/providers/ForgeUserdevProvider.java
@@ -43,19 +43,24 @@ import net.fabricmc.loom.util.Constants;
import net.fabricmc.loom.util.DependencyProvider;
public class ForgeUserdevProvider extends DependencyProvider {
+ private File userdevJar;
+
public ForgeUserdevProvider(Project project) {
super(project);
}
@Override
public void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception {
+ userdevJar = new File(getExtension().getProjectPersistentCache(), "forge-" + dependency.getDependency().getVersion() + "-userdev.jar");
+
Path configJson = getExtension()
.getProjectPersistentCache()
.toPath()
.resolve("forge-config-" + dependency.getDependency().getVersion() + ".json");
- if (Files.notExists(configJson) || isRefreshDeps()) {
+ if (!userdevJar.exists() || Files.notExists(configJson) || isRefreshDeps()) {
File resolved = dependency.resolveFile().orElseThrow(() -> new RuntimeException("Could not resolve Forge userdev"));
+ Files.copy(resolved.toPath(), userdevJar.toPath());
try (FileSystem fs = FileSystems.newFileSystem(new URI("jar:" + resolved.toURI()), ImmutableMap.of("create", false))) {
Files.copy(fs.getPath("config.json"), configJson);
@@ -80,6 +85,10 @@ public class ForgeUserdevProvider extends DependencyProvider {
// That'd require me to run the "MCP environment" fully up to merging.
}
+ public File getUserdevJar() {
+ return userdevJar;
+ }
+
@Override
public String getTargetConfig() {
return Constants.FORGE_USERDEV;
diff --git a/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java b/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java
index 36621ba0..65c542f5 100644
--- a/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java
+++ b/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java
@@ -275,6 +275,9 @@ public class MinecraftProvider extends DependencyProvider {
logger.lifecycle(":injecting forge classes into minecraft");
copyAll(getExtension().getForgeUniversalProvider().getForge(), minecraftClientPatchedSrgJar);
copyAll(getExtension().getForgeUniversalProvider().getForge(), minecraftServerPatchedSrgJar);
+
+ copyUserdevFiles(getExtension().getForgeUserdevProvider().getUserdevJar(), minecraftClientPatchedSrgJar);
+ copyUserdevFiles(getExtension().getForgeUserdevProvider().getUserdevJar(), minecraftServerPatchedSrgJar);
}
private void remapPatchedJars(Logger logger) throws IOException {
@@ -352,10 +355,8 @@ public class MinecraftProvider extends DependencyProvider {
.filter(java.nio.file.Files::isRegularFile)
.filter(filter)
.forEach(it -> {
- Path targetPath = targetFs.getPath(it.toString());
-
try {
- action.accept(sourceFs, targetFs, it, targetPath);
+ action.accept(sourceFs, targetFs, it);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
@@ -371,7 +372,9 @@ public class MinecraftProvider extends DependencyProvider {
}
private void copyMissingClasses(File source, File target) throws IOException {
- walkFileSystems(source, target, it -> it.toString().endsWith(".class"), (sourceFs, targetFs, sourcePath, targetPath) -> {
+ walkFileSystems(source, target, it -> it.toString().endsWith(".class"), (sourceFs, targetFs, it) -> {
+ Path targetPath = targetFs.getPath(it.toString());
+
if (java.nio.file.Files.exists(targetPath)) return;
Path parent = targetPath.getParent();
@@ -379,7 +382,7 @@ public class MinecraftProvider extends DependencyProvider {
java.nio.file.Files.createDirectories(parent);
}
- java.nio.file.Files.copy(sourcePath, targetPath);
+ java.nio.file.Files.copy(it, targetPath);
});
}
@@ -387,14 +390,32 @@ public class MinecraftProvider extends DependencyProvider {
walkFileSystems(source, target, it -> !it.toString().endsWith(".class"), this::copyReplacing);
}
- private void copyReplacing(FileSystem sourceFs, FileSystem targetFs, Path sourcePath, Path targetPath) throws IOException {
+ private void copyReplacing(FileSystem sourceFs, FileSystem targetFs, Path it) throws IOException {
+ Path targetPath = targetFs.getPath(it.toString());
Path parent = targetPath.getParent();
if (parent != null) {
java.nio.file.Files.createDirectories(parent);
}
- java.nio.file.Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
+ java.nio.file.Files.copy(it, targetPath, StandardCopyOption.REPLACE_EXISTING);
+ }
+
+ private void copyUserdevFiles(File source, File target) throws IOException {
+ walkFileSystems(source, target, java.nio.file.Files::isRegularFile, (sourceFs, targetFs, it) -> {
+ Path inject = sourceFs.getPath("inject");
+
+ if (it.startsWith(inject)) {
+ Path targetPath = targetFs.getPath(inject.relativize(it).toString());
+ Path parent = targetPath.getParent();
+
+ if (parent != null) {
+ java.nio.file.Files.createDirectories(parent);
+ }
+
+ java.nio.file.Files.copy(it, targetPath);
+ }
+ });
}
public File getMergedJar() {
diff --git a/src/main/java/net/fabricmc/loom/util/function/FsPathConsumer.java b/src/main/java/net/fabricmc/loom/util/function/FsPathConsumer.java
index 6c6f073a..9a1b7f70 100644
--- a/src/main/java/net/fabricmc/loom/util/function/FsPathConsumer.java
+++ b/src/main/java/net/fabricmc/loom/util/function/FsPathConsumer.java
@@ -29,11 +29,11 @@ import java.nio.file.FileSystem;
import java.nio.file.Path;
/**
- * Consumes two file systems and an equivalent path object for both of them.
+ * Consumes two file systems and a path object in the first one.
*
* @author Juuz
*/
@FunctionalInterface
public interface FsPathConsumer {
- void accept(FileSystem sourceFs, FileSystem targetFs, Path sourcePath, Path targetPath) throws IOException;
+ void accept(FileSystem sourceFs, FileSystem targetFs, Path it) throws IOException;
}