/* * SK's Minecraft Launcher * Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors * Please see LICENSE.txt for license information. */ package com.skcraft.launcher.builder; import com.beust.jcommander.JCommander; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import com.skcraft.launcher.model.minecraft.VersionManifest; import com.skcraft.launcher.model.modpack.Manifest; import com.skcraft.launcher.util.SimpleLogFormatter; import lombok.NonNull; import lombok.extern.java.Log; import java.io.File; import java.io.IOException; /** * Builds packages for the launcher. */ @Log public class PackageBuilder { private final ObjectMapper mapper; private final Manifest manifest; /** * Create a new package builder. * * @param mapper the mapper * @param manifest the manifest */ public PackageBuilder(@NonNull ObjectMapper mapper, @NonNull Manifest manifest) { this.mapper = mapper; this.manifest = manifest; } /** * Add the files in the given directory. * * @param dir the directory * @param destDir the directory to copy the files to * @throws IOException thrown on I/O error */ private void addFiles(File dir, File destDir) throws IOException { ClientFileCollector collector = new ClientFileCollector(this.manifest, destDir); collector.walk(dir); } /** * Write the manifest to a file. * * @param path the path * @throws IOException thrown on I/O error */ public void writeManifest(@NonNull File path) throws IOException { path.getParentFile().mkdirs(); mapper.writeValue(path, manifest); } private static PackageOptions parseArgs(String[] args) { PackageOptions options = new PackageOptions(); new JCommander(options, args); return options; } /** * Build a package given the arguments. * * @param args arguments * @throws IOException thrown on I/O error */ public static void main(String[] args) throws IOException { // May throw error here PackageOptions options = parseArgs(args); SimpleLogFormatter.configureGlobalLogger(); ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_DEFAULT); Manifest manifest = new Manifest(); manifest.setName(options.getName()); manifest.setTitle(options.getTitle()); manifest.setVersion(options.getVersion()); manifest.setGameVersion(options.getGameVersion()); manifest.setLibrariesLocation(options.getLibrariesLocation()); manifest.setObjectsLocation(options.getObjectsLocation()); File path = options.getVersionManifestPath(); if (path != null) { manifest.setVersionManifest(mapper.readValue(path, VersionManifest.class)); } PackageBuilder builder = new PackageBuilder(mapper, manifest); log.info("Adding files..."); builder.addFiles(options.getFilesDir(), options.getObjectsDir()); builder.writeManifest(options.getManifestPath()); log.info("Wrote manifest to " + options.getManifestPath().getAbsolutePath()); log.info("Done."); } }