mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-02 04:56:50 +01:00
Merge remote branch 'upstream/master'
This commit is contained in:
commit
4c483edf08
6 changed files with 186 additions and 11 deletions
5
pom.xml
5
pom.xml
|
@ -27,6 +27,11 @@
|
||||||
<type>jar</type>
|
<type>jar</type>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.sf.jopt-simple</groupId>
|
||||||
|
<artifactId>jopt-simple</artifactId>
|
||||||
|
<version>3.2</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<!-- This builds a completely 'ready to start' jar with all dependencies inside -->
|
<!-- This builds a completely 'ready to start' jar with all dependencies inside -->
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -11,6 +11,7 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
import joptsimple.OptionSet;
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.CraftServer;
|
import org.bukkit.craftbukkit.CraftServer;
|
||||||
|
|
||||||
|
@ -37,14 +38,18 @@ implements ICommandListener, Runnable {
|
||||||
public boolean n;
|
public boolean n;
|
||||||
|
|
||||||
public CraftServer server; // CraftBukkit
|
public CraftServer server; // CraftBukkit
|
||||||
|
public OptionSet options; // CraftBukkit
|
||||||
|
|
||||||
public MinecraftServer() {
|
// CraftBukkit: Added arg "OptionSet options"
|
||||||
|
public MinecraftServer(final OptionSet options) {
|
||||||
o = true;
|
o = true;
|
||||||
g = false;
|
g = false;
|
||||||
h = 0;
|
h = 0;
|
||||||
p = new ArrayList<IUpdatePlayerListBox>();
|
p = new ArrayList<IUpdatePlayerListBox>();
|
||||||
q = Collections.synchronizedList(new ArrayList<ServerCommand>());
|
q = Collections.synchronizedList(new ArrayList<ServerCommand>());
|
||||||
new ThreadSleepForever(this);
|
new ThreadSleepForever(this);
|
||||||
|
|
||||||
|
this.options = options; // CraftBukkit
|
||||||
}
|
}
|
||||||
|
|
||||||
// CraftBukkit: added throws UnknownHostException
|
// CraftBukkit: added throws UnknownHostException
|
||||||
|
@ -60,7 +65,7 @@ implements ICommandListener, Runnable {
|
||||||
a.warning("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\"");
|
a.warning("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\"");
|
||||||
}
|
}
|
||||||
a.info("Loading properties");
|
a.info("Loading properties");
|
||||||
d = new PropertyManager(new File("server.properties"));
|
d = new PropertyManager(options); // Craftbukkit
|
||||||
String s = d.a("server-ip", "");
|
String s = d.a("server-ip", "");
|
||||||
|
|
||||||
l = d.a("online-mode", true);
|
l = d.a("online-mode", true);
|
||||||
|
@ -450,18 +455,17 @@ implements ICommandListener, Runnable {
|
||||||
p.add(iupdateplayerlistbox);
|
p.add(iupdateplayerlistbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String args[]) {
|
// Craftbukkit start - replaces main(String args[])
|
||||||
|
public static void main(final OptionSet options) {
|
||||||
try {
|
try {
|
||||||
MinecraftServer minecraftserver = new MinecraftServer();
|
MinecraftServer minecraftserver = new MinecraftServer(options);
|
||||||
|
|
||||||
if (!java.awt.GraphicsEnvironment.isHeadless() && (args.length <= 0 || !args[0].equals("nogui"))) {
|
|
||||||
ServerGUI.a(minecraftserver);
|
|
||||||
}
|
|
||||||
(new ThreadServerApplication("Server thread", minecraftserver)).start();
|
(new ThreadServerApplication("Server thread", minecraftserver)).start();
|
||||||
} catch (Exception exception) {
|
} catch (Exception exception) {
|
||||||
a.log(Level.SEVERE, "Failed to start the minecraft server", exception);
|
a.log(Level.SEVERE, "Failed to start the minecraft server", exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Craftbukkit end
|
||||||
|
|
||||||
public File a(String s) {
|
public File a(String s) {
|
||||||
return new File(s);
|
return new File(s);
|
||||||
|
|
92
src/main/java/net/minecraft/server/PropertyManager.java
Normal file
92
src/main/java/net/minecraft/server/PropertyManager.java
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
package net.minecraft.server;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import joptsimple.OptionSet;
|
||||||
|
|
||||||
|
|
||||||
|
public class PropertyManager {
|
||||||
|
|
||||||
|
public static Logger a = Logger.getLogger("Minecraft");
|
||||||
|
private Properties b;
|
||||||
|
private File c;
|
||||||
|
|
||||||
|
private OptionSet options = null; // Craftbukkit
|
||||||
|
|
||||||
|
public PropertyManager(File file) {
|
||||||
|
b = new Properties();
|
||||||
|
c = file;
|
||||||
|
if (file.exists()) {
|
||||||
|
try {
|
||||||
|
b.load(new FileInputStream(file));
|
||||||
|
} catch (Exception exception) {
|
||||||
|
a.log(Level.WARNING, (new StringBuilder()).append("Failed to load ").append(file).toString(), exception);
|
||||||
|
a();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
a.log(Level.WARNING, (new StringBuilder()).append(file).append(" does not exist").toString());
|
||||||
|
a();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Craftbukkit start
|
||||||
|
public PropertyManager(final OptionSet options) {
|
||||||
|
this((File)options.valueOf("config"));
|
||||||
|
|
||||||
|
this.options = options;
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T> T getOverride(String name, T value) {
|
||||||
|
if ((options != null) && (options.has(name))) {
|
||||||
|
return (T)options.valueOf(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
// Craftbukkit end
|
||||||
|
|
||||||
|
public void a() {
|
||||||
|
a.log(Level.INFO, "Generating new properties file");
|
||||||
|
b();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void b() {
|
||||||
|
try {
|
||||||
|
b.store(new FileOutputStream(c), "Minecraft server properties");
|
||||||
|
} catch (Exception exception) {
|
||||||
|
a.log(Level.WARNING, (new StringBuilder()).append("Failed to save ").append(c).toString(), exception);
|
||||||
|
a();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String a(String s, String s1) {
|
||||||
|
if (!b.containsKey(s)) {
|
||||||
|
b.setProperty(s, getOverride(s, s1)); // Craftbukkit
|
||||||
|
b();
|
||||||
|
}
|
||||||
|
return getOverride(s, b.getProperty(s, s1)); // Craftbukkit
|
||||||
|
}
|
||||||
|
|
||||||
|
public int a(String s, int i) {
|
||||||
|
try {
|
||||||
|
return getOverride(s, Integer.parseInt(a(s, String.valueOf(i)))); // Craftbukkit
|
||||||
|
} catch (Exception exception) {
|
||||||
|
b.setProperty(s, getOverride(s, i).toString()); // Craftbukkit
|
||||||
|
}
|
||||||
|
return getOverride(s, i); // Craftbukkit
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean a(String s, boolean flag) {
|
||||||
|
try {
|
||||||
|
return getOverride(s, Boolean.parseBoolean(a(s, String.valueOf(flag)))); // Craftbukkit
|
||||||
|
} catch (Exception exception) {
|
||||||
|
b.setProperty(s, getOverride(s, flag).toString()); // Craftbukkit
|
||||||
|
}
|
||||||
|
return getOverride(s, flag); // Craftbukkit
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ public final class CraftServer implements Server {
|
||||||
|
|
||||||
pluginManager.RegisterInterface(JavaPluginLoader.class);
|
pluginManager.RegisterInterface(JavaPluginLoader.class);
|
||||||
|
|
||||||
File pluginFolder = new File("plugins");
|
File pluginFolder = (File)console.options.valueOf("plugins");
|
||||||
|
|
||||||
if (pluginFolder.exists()) {
|
if (pluginFolder.exists()) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -43,6 +43,10 @@ public class CraftWorld implements World {
|
||||||
return block;
|
return block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getHighestBlockYAt(int x, int z) {
|
||||||
|
return world.d(x, z);
|
||||||
|
}
|
||||||
|
|
||||||
public Chunk getChunkAt(int x, int z) {
|
public Chunk getChunkAt(int x, int z) {
|
||||||
ChunkCoordinate loc = new ChunkCoordinate(x, z);
|
ChunkCoordinate loc = new ChunkCoordinate(x, z);
|
||||||
Chunk chunk = chunkCache.get(loc);
|
Chunk chunk = chunkCache.get(loc);
|
||||||
|
|
|
@ -1,16 +1,86 @@
|
||||||
|
|
||||||
package org.bukkit.craftbukkit;
|
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;
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
// Todo: Installation script
|
// 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 {
|
try {
|
||||||
MinecraftServer.main(args);
|
options = parser.parse(args);
|
||||||
} catch (Throwable t) {
|
} catch (joptsimple.OptionException ex) {
|
||||||
t.printStackTrace();
|
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<String> asList(String... params) {
|
||||||
|
return Arrays.asList(params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue