diff options
| author | Juuxel <6596629+Juuxel@users.noreply.github.com> | 2020-07-30 17:22:03 +0300 |
|---|---|---|
| committer | Juuxel <6596629+Juuxel@users.noreply.github.com> | 2020-07-30 17:22:03 +0300 |
| commit | 0f5efe13c92cb9a156d4178b90b1497886bca8a2 (patch) | |
| tree | 033fe9c97c7bfc352c833899612e5ac3ebdfe54e /src/main/java/net/fabricmc | |
| parent | 7f2104a44c1a3b2ff93c205251afa06c83095b0a (diff) | |
| download | architectury-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/main/java/net/fabricmc')
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; } |
