diff --git a/paper-server/pom.xml b/paper-server/pom.xml
index 59d9f90a04..aa623a25b1 100644
--- a/paper-server/pom.xml
+++ b/paper-server/pom.xml
@@ -27,6 +27,11 @@
jar
compile
+
+ net.sf.jopt-simple
+ jopt-simple
+ 3.2
+
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index e575805136..216a26b6e5 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -27,7 +27,7 @@ public final class CraftServer implements Server {
pluginManager.RegisterInterface(JavaPluginLoader.class);
- File pluginFolder = new File("plugins");
+ File pluginFolder = (File)console.options.valueOf("plugins");
if (pluginFolder.exists()) {
try {
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index 5cd587b200..31b9d0f0e3 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -42,6 +42,10 @@ public class CraftWorld implements World {
return block;
}
+
+ public int getHighestBlockYAt(int x, int z) {
+ return world.d(x, z);
+ }
public Chunk getChunkAt(int x, int z) {
ChunkCoordinate loc = new ChunkCoordinate(x, z);
diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/Main.java b/paper-server/src/main/java/org/bukkit/craftbukkit/Main.java
index 786e56d840..db33837468 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -1,16 +1,86 @@
package org.bukkit.craftbukkit;
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import joptsimple.OptionParser;
+import joptsimple.OptionSet;
import net.minecraft.server.MinecraftServer;
public class Main {
public static void main(String[] args) {
// Todo: Installation script
+ OptionParser parser = new OptionParser() {
+ {
+ acceptsAll(asList("?", "help"), "Show the help");
+
+ acceptsAll(asList("c", "config"), "Properties file to use")
+ .withRequiredArg()
+ .ofType(File.class)
+ .defaultsTo(new File("server.properties"))
+ .describedAs("Properties file");
+
+ acceptsAll(asList("P", "plugins"), "Plugin directory to use")
+ .withRequiredArg()
+ .ofType(File.class)
+ .defaultsTo(new File("plugins"))
+ .describedAs("Plugin directory");
+
+ acceptsAll(asList("h", "host", "server-ip"), "Host to listen on")
+ .withRequiredArg()
+ .ofType(String.class)
+ .describedAs("Hostname or IP");
+
+ acceptsAll(asList("w", "world", "level-name"), "World directory")
+ .withRequiredArg()
+ .ofType(String.class)
+ .describedAs("World dir");
+
+ acceptsAll(asList("p", "port", "server-port"), "Port to listen on")
+ .withRequiredArg()
+ .ofType(Integer.class)
+ .describedAs("Port");
+
+ acceptsAll(asList("o", "online-mode"), "Whether to use online authentication")
+ .withRequiredArg()
+ .ofType(Boolean.class)
+ .describedAs("Authentication");
+
+ acceptsAll(asList("s", "size", "max-players"), "Maximum amount of players")
+ .withRequiredArg()
+ .ofType(Integer.class)
+ .describedAs("Server size");
+ }
+ };
+
+ OptionSet options = null;
try {
- MinecraftServer.main(args);
- } catch (Throwable t) {
- t.printStackTrace();
+ options = parser.parse(args);
+ } catch (joptsimple.OptionException ex) {
+ Logger.getLogger(Main.class.getName()).log(Level.SEVERE, ex.getLocalizedMessage());
+ }
+
+ if ((options == null) || (options.has("?"))) {
+ try {
+ parser.printHelpOn(System.out);
+ } catch (IOException ex) {
+ Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ } else {
+ try {
+ MinecraftServer.main(options);
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
}
}
+
+ private static List asList(String... params) {
+ return Arrays.asList(params);
+ }
}