diff options
| author | Juuxel <6596629+Juuxel@users.noreply.github.com> | 2020-11-30 20:29:00 +0200 |
|---|---|---|
| committer | Juuxel <6596629+Juuxel@users.noreply.github.com> | 2020-11-30 20:29:00 +0200 |
| commit | 385e0c9544fb4ce4dce73896def0f5a99f306bbb (patch) | |
| tree | 551db91400076269cf4dee1a58f2248da88bf103 /src/main | |
| parent | a22a9b476c1711b07bf917086bf8a16607823a36 (diff) | |
| download | architectury-loom-385e0c9544fb4ce4dce73896def0f5a99f306bbb.tar.gz architectury-loom-385e0c9544fb4ce4dce73896def0f5a99f306bbb.tar.bz2 architectury-loom-385e0c9544fb4ce4dce73896def0f5a99f306bbb.zip | |
Add yarn naming service that is injected to the game jar
If Forge can do it, so can I.
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java b/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java index 73e763e9..15490f56 100644 --- a/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/providers/MinecraftProvider.java @@ -36,6 +36,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.FileSystem; import java.nio.file.FileSystems; import java.nio.file.Path; +import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.Collections; import java.util.Optional; @@ -275,11 +276,20 @@ public class MinecraftProvider extends DependencyProvider { private void injectForgeClasses(Logger logger) throws IOException { logger.lifecycle(":injecting forge classes into minecraft"); - copyAll(getExtension().getForgeUniversalProvider().getForge(), minecraftClientPatchedSrgJar); - copyAll(getExtension().getForgeUniversalProvider().getForge(), minecraftServerPatchedSrgJar); + copyAll(getExtension().getForgeUniversalProvider().getForge().toPath(), minecraftClientPatchedSrgJar.toPath()); + copyAll(getExtension().getForgeUniversalProvider().getForge().toPath(), minecraftServerPatchedSrgJar.toPath()); - copyUserdevFiles(getExtension().getForgeUserdevProvider().getUserdevJar(), minecraftClientPatchedSrgJar); - copyUserdevFiles(getExtension().getForgeUserdevProvider().getUserdevJar(), minecraftServerPatchedSrgJar); + copyUserdevFiles(getExtension().getForgeUserdevProvider().getUserdevJar().toPath(), minecraftClientPatchedSrgJar.toPath()); + copyUserdevFiles(getExtension().getForgeUserdevProvider().getUserdevJar().toPath(), minecraftServerPatchedSrgJar.toPath()); + + try { + logger.lifecycle(":injecting loom classes into minecraft"); + Path injection = Paths.get(MinecraftProvider.class.getResource("/inject/injection.jar").toURI()); + copyAll(injection, minecraftClientPatchedSrgJar.toPath()); + copyAll(injection, minecraftServerPatchedSrgJar.toPath()); + } catch (URISyntaxException e) { + throw new IOException(e); + } } private void remapPatchedJars(Logger logger) throws IOException { @@ -317,8 +327,8 @@ public class MinecraftProvider extends DependencyProvider { patchJars(minecraftServerSrgJar, minecraftServerPatchedSrgJar, patchProvider.serverPatches); logger.lifecycle(":copying missing classes into patched jars"); - copyMissingClasses(minecraftClientSrgJar, minecraftClientPatchedSrgJar); - copyMissingClasses(minecraftServerSrgJar, minecraftServerPatchedSrgJar); + copyMissingClasses(minecraftClientSrgJar.toPath(), minecraftClientPatchedSrgJar.toPath()); + copyMissingClasses(minecraftServerSrgJar.toPath(), minecraftServerPatchedSrgJar.toPath()); } private void patchJars(File clean, File output, Path patches) throws IOException { @@ -337,8 +347,8 @@ public class MinecraftProvider extends DependencyProvider { logger.lifecycle(":copying resources"); // Copy resources - copyNonClassFiles(minecraftClientJar, minecraftMergedJar); - copyNonClassFiles(minecraftServerJar, minecraftMergedJar); + copyNonClassFiles(minecraftClientJar.toPath(), minecraftMergedJar.toPath()); + copyNonClassFiles(minecraftServerJar.toPath(), minecraftMergedJar.toPath()); } else { logger.lifecycle(":merging jars"); @@ -349,9 +359,9 @@ public class MinecraftProvider extends DependencyProvider { } } - private void walkFileSystems(File source, File target, Predicate<Path> filter, Function<FileSystem, Iterable<Path>> toWalk, FsPathConsumer action) throws IOException { - try (FileSystem sourceFs = FileSystems.newFileSystem(new URI("jar:" + source.toURI()), ImmutableMap.of("create", false)); - FileSystem targetFs = FileSystems.newFileSystem(new URI("jar:" + target.toURI()), ImmutableMap.of("create", false))) { + private void walkFileSystems(Path source, Path target, Predicate<Path> filter, Function<FileSystem, Iterable<Path>> toWalk, FsPathConsumer action) throws IOException { + try (FileSystem sourceFs = FileSystems.newFileSystem(new URI("jar:" + source.toUri()), ImmutableMap.of("create", false)); + FileSystem targetFs = FileSystems.newFileSystem(new URI("jar:" + target.toUri()), ImmutableMap.of("create", false))) { for (Path sourceDir : toWalk.apply(sourceFs)) { Path dir = sourceDir.toAbsolutePath(); java.nio.file.Files.walk(dir) @@ -374,15 +384,15 @@ public class MinecraftProvider extends DependencyProvider { } } - private void walkFileSystems(File source, File target, Predicate<Path> filter, FsPathConsumer action) throws IOException { + private void walkFileSystems(Path source, Path target, Predicate<Path> filter, FsPathConsumer action) throws IOException { walkFileSystems(source, target, filter, FileSystem::getRootDirectories, action); } - private void copyAll(File source, File target) throws IOException { + private void copyAll(Path source, Path target) throws IOException { walkFileSystems(source, target, it -> true, this::copyReplacing); } - private void copyMissingClasses(File source, File target) throws IOException { + private void copyMissingClasses(Path source, Path target) throws IOException { walkFileSystems(source, target, it -> it.toString().endsWith(".class"), (sourceFs, targetFs, sourcePath, targetPath) -> { if (java.nio.file.Files.exists(targetPath)) return; Path parent = targetPath.getParent(); @@ -395,7 +405,7 @@ public class MinecraftProvider extends DependencyProvider { }); } - private void copyNonClassFiles(File source, File target) throws IOException { + private void copyNonClassFiles(Path source, Path target) throws IOException { walkFileSystems(source, target, it -> !it.toString().endsWith(".class"), this::copyReplacing); } @@ -409,7 +419,7 @@ public class MinecraftProvider extends DependencyProvider { java.nio.file.Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING); } - private void copyUserdevFiles(File source, File target) throws IOException { + private void copyUserdevFiles(Path source, Path target) throws IOException { walkFileSystems(source, target, file -> true, fs -> Collections.singleton(fs.getPath("inject")), (sourceFs, targetFs, sourcePath, targetPath) -> { Path parent = targetPath.getParent(); |
