diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 1e48e716a..1599ea003 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -74,5 +74,6 @@ object Versions { object CLI { const val nbt = "6.1" const val logback = "1.5.8" + const val picocli = "4.7.6" } } \ No newline at end of file diff --git a/platforms/cli/build.gradle.kts b/platforms/cli/build.gradle.kts index 5070c047f..74661ecb5 100644 --- a/platforms/cli/build.gradle.kts +++ b/platforms/cli/build.gradle.kts @@ -10,6 +10,9 @@ dependencies { shadedApi("commons-io", "commons-io", Versions.Libraries.Internal.apacheIO) shadedApi("com.github.Querz", "NBT", Versions.CLI.nbt) + shadedImplementation("info.picocli", "picocli", Versions.CLI.picocli) + annotationProcessor("info.picocli", "picocli-codegen", Versions.CLI.picocli) + shadedImplementation("com.google.guava", "guava", Versions.Libraries.Internal.guava) shadedImplementation("ch.qos.logback", "logback-classic", Versions.CLI.logback) @@ -26,6 +29,12 @@ tasks.withType { } } +tasks.withType { + doFirst { + options.compilerArgs.add("-Aproject=${project.group}/${project.name}") + } +} + application { mainClass.set(javaMainClass) } diff --git a/platforms/cli/src/main/java/com/dfsek/terra/cli/TerraCLI.java b/platforms/cli/src/main/java/com/dfsek/terra/cli/TerraCLI.java index 8f62528bc..9fd69c92d 100644 --- a/platforms/cli/src/main/java/com/dfsek/terra/cli/TerraCLI.java +++ b/platforms/cli/src/main/java/com/dfsek/terra/cli/TerraCLI.java @@ -5,25 +5,48 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.util.concurrent.Callable; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.api.util.vector.Vector2Int; import com.dfsek.terra.cli.world.CLIWorld; +import picocli.CommandLine; +import picocli.CommandLine.Command; +import picocli.CommandLine.Option; -public final class TerraCLI { - private static final Logger LOGGER = LoggerFactory.getLogger(TerraCLI.class); - public static void main(String... args) { +//TODO auto pull in version +@Command(name = "TerraCLI", mixinStandardHelpOptions = true, version = "6.6.0", + description = "Generates a Terra World and saves it in minecraft region format.") +public final class TerraCLI implements Callable { + @Option(names = { "-s", "--size"}, description = "Number of regions to generate.") + private int size = 2; + + @Option(names = { "-p", "--pack"}, description = "Config pack to use.") + private String pack = "OVERWORLD"; + + @Option(names = { "--seed"}, description = "Seed for world generation.") + private long seed = 0; + + @Option(names = { "--max-height"}, description = "Maximum height of the world.") + private int maxHeight = 384; + + @Option(names = { "--min-height"}, description = "Minimum height of the world.") + private int minHeight = -64; + + @Override + public Integer call() throws Exception { // your business logic goes here... + Logger LOGGER = LoggerFactory.getLogger(TerraCLI.class); LOGGER.info("Starting Terra CLI..."); CLIPlatform platform = new CLIPlatform(); platform.getEventManager().callEvent(new PlatformInitializationEvent()); - ConfigPack generate = platform.getConfigRegistry().getByID("OVERWORLD").orElseThrow(); // TODO: make this a cli argument + ConfigPack generate = platform.getConfigRegistry().getByID(pack).orElseThrow(); - CLIWorld world = new CLIWorld(2, 2, 384, -64, generate); + CLIWorld world = new CLIWorld(size, seed, maxHeight, minHeight, generate); world.generate(); @@ -40,6 +63,11 @@ public final class TerraCLI { LOGGER.info("Wrote region to file."); }); LOGGER.info("Done."); - System.exit(0); + return 0; + } + + public static void main(String... args) { + int exitCode = new CommandLine(new TerraCLI()).execute(args); + System.exit(exitCode); } } diff --git a/platforms/cli/src/main/java/com/dfsek/terra/cli/world/CLIWorld.java b/platforms/cli/src/main/java/com/dfsek/terra/cli/world/CLIWorld.java index a4af0d02e..3d2b5dd51 100644 --- a/platforms/cli/src/main/java/com/dfsek/terra/cli/world/CLIWorld.java +++ b/platforms/cli/src/main/java/com/dfsek/terra/cli/world/CLIWorld.java @@ -73,6 +73,7 @@ public class CLIWorld implements ServerWorld, NBTSerializable CPSHistory = new ArrayList<>(); int sizeChunks = size * 32; List> futures = new ArrayList<>(); final AtomicLong start = new AtomicLong(System.nanoTime()); @@ -91,6 +92,7 @@ public class CLIWorld implements ServerWorld, NBTSerializable d).average().orElse(0)); } @Override