Search in sources :

Example 1 with Logger

use of org.tinylog.Logger in project SpongeCommon by SpongePowered.

the class InstallerMain method remapMinecraft.

private Path remapMinecraft(final Path inputJar, final Path serverMappings, final ExecutorService service) throws IOException {
    Logger.info("Checking if we need to remap Minecraft...");
    final Path outputJar = this.expectedRemappedLocation(inputJar);
    final Path tempOutput = outputJar.resolveSibling(Constants.Libraries.MINECRAFT_SERVER_JAR_NAME + "_remapped.jar.tmp");
    if (Files.exists(outputJar)) {
        Logger.info("Remapped Minecraft detected, skipping...");
        return outputJar;
    }
    Logger.info("Remapping Minecraft. This may take a while...");
    final IMappingFile mappings = IMappingFile.load(serverMappings.toFile()).reverse();
    Renamer.builder().input(inputJar.toFile()).output(tempOutput.toFile()).add(Transformer.parameterAnnotationFixerFactory()).add(ctx -> {
        final Transformer backing = Transformer.renamerFactory(mappings).create(ctx);
        return new Transformer() {

            @Override
            public ClassEntry process(final ClassEntry entry) {
                final String name = entry.getName();
                if (name.startsWith("it/unimi") || name.startsWith("com/google") || name.startsWith("com/mojang/datafixers") || name.startsWith("com/mojang/brigadier") || name.startsWith("org/apache")) {
                    return entry;
                }
                return backing.process(entry);
            }

            @Override
            public ManifestEntry process(final ManifestEntry entry) {
                return backing.process(entry);
            }

            @Override
            public ResourceEntry process(final ResourceEntry entry) {
                return backing.process(entry);
            }

            @Override
            public Collection<? extends Entry> getExtras() {
                return backing.getExtras();
            }
        };
    }).add(Transformer.recordFixerFactory()).add(Transformer.parameterAnnotationFixerFactory()).add(Transformer.sourceFixerFactory(SourceFixerConfig.JAVA)).add(Transformer.signatureStripperFactory(SignatureStripperConfig.ALL)).logger(// quiet
    Logger::debug).build().run();
    // Restore file
    try {
        Files.move(tempOutput, outputJar, StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING);
    } catch (final AccessDeniedException ex) {
        // Thanks Windows!
        for (int tries = 0; tries < InstallerMain.MAX_TRIES; ++tries) {
            // Pause for a bit
            try {
                Thread.sleep(5 * tries);
                Files.move(tempOutput, outputJar, StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING);
            } catch (final AccessDeniedException ex2) {
                if (tries == InstallerMain.MAX_TRIES - 1) {
                    throw ex;
                }
            } catch (final InterruptedException exInterrupt) {
                Thread.currentThread().interrupt();
                throw ex;
            }
        }
    }
    return outputJar;
}
Also used : Path(java.nio.file.Path) URL(java.net.URL) MessageDigest(java.security.MessageDigest) CompletableFuture(java.util.concurrent.CompletableFuture) JsonReader(com.google.gson.stream.JsonReader) Renamer(net.minecraftforge.fart.api.Renamer) StandardCopyOption(java.nio.file.StandardCopyOption) ArrayList(java.util.ArrayList) Gson(com.google.gson.Gson) URLConnection(java.net.URLConnection) Path(java.nio.file.Path) ExecutorService(java.util.concurrent.ExecutorService) Transformer(net.minecraftforge.fart.api.Transformer) Files(java.nio.file.Files) Collection(java.util.Collection) VersionManifest(org.spongepowered.vanilla.installer.model.mojang.VersionManifest) SourceFixerConfig(net.minecraftforge.fart.api.SourceFixerConfig) IOException(java.io.IOException) IMappingFile(net.minecraftforge.srgutils.IMappingFile) InputStreamReader(java.io.InputStreamReader) Logger(org.tinylog.Logger) SignatureStripperConfig(net.minecraftforge.fart.api.SignatureStripperConfig) InvocationTargetException(java.lang.reflect.InvocationTargetException) ExecutionException(java.util.concurrent.ExecutionException) Version(org.spongepowered.vanilla.installer.model.mojang.Version) List(java.util.List) AccessDeniedException(java.nio.file.AccessDeniedException) Collections(java.util.Collections) AccessDeniedException(java.nio.file.AccessDeniedException) Transformer(net.minecraftforge.fart.api.Transformer) IMappingFile(net.minecraftforge.srgutils.IMappingFile) Logger(org.tinylog.Logger) Collection(java.util.Collection)

Aggregations

Gson (com.google.gson.Gson)1 JsonReader (com.google.gson.stream.JsonReader)1 IOException (java.io.IOException)1 InputStreamReader (java.io.InputStreamReader)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 URL (java.net.URL)1 URLConnection (java.net.URLConnection)1 AccessDeniedException (java.nio.file.AccessDeniedException)1 Files (java.nio.file.Files)1 Path (java.nio.file.Path)1 StandardCopyOption (java.nio.file.StandardCopyOption)1 MessageDigest (java.security.MessageDigest)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 List (java.util.List)1 CompletableFuture (java.util.concurrent.CompletableFuture)1 ExecutionException (java.util.concurrent.ExecutionException)1 ExecutorService (java.util.concurrent.ExecutorService)1 Renamer (net.minecraftforge.fart.api.Renamer)1