diff --git a/CraftBukkit-Patches/0004-Spigot-Configuration.patch b/CraftBukkit-Patches/0004-Spigot-Configuration.patch index ff0d860cec..a037a6ed94 100644 --- a/CraftBukkit-Patches/0004-Spigot-Configuration.patch +++ b/CraftBukkit-Patches/0004-Spigot-Configuration.patch @@ -1,100 +1,192 @@ -From 21486d9d244f3c22b6e8643c9495592493bcc1f9 Mon Sep 17 00:00:00 2001 +From fba3fb120161a1618a8991784bd0822087af733d Mon Sep 17 00:00:00 2001 From: md_5 -Date: Tue, 14 May 2013 12:06:27 +1000 +Date: Thu, 20 Jun 2013 17:28:01 +1000 Subject: [PATCH] Spigot Configuration diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index 7261dc9..10ce69d 100644 +index 7261dc9..6668b7e 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -55,6 +55,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -47,6 +47,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer + System.setOut(new PrintStream(new LoggerOutputStream(this.getLogger().getLogger(), Level.INFO), true)); + System.setErr(new PrintStream(new LoggerOutputStream(this.getLogger().getLogger(), Level.SEVERE), true)); + // CraftBukkit end ++ org.spigotmc.SpigotConfig.init(); // Spigot - this.getLogger().info("Loading properties"); - this.propertyManager = new PropertyManager(this.options, this.getLogger()); // CraftBukkit - CLI argument support -+ this.a((PlayerList) (new DedicatedPlayerList(this))); // Spigot - moved up from below - if (this.I()) { - this.d("127.0.0.1"); - } else { -@@ -103,7 +104,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer - return false; - } - -- this.a((PlayerList) (new DedicatedPlayerList(this))); // CraftBukkit -+ // this.a((PlayerList) (new DedicatedPlayerList(this))); // CraftBukkit // Spigot - moved to top of method - - if (!this.getOnlineMode()) { - this.getLogger().warning("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!"); + this.getLogger().info("Starting minecraft server version 1.5.2"); + if (Runtime.getRuntime().maxMemory() / 1024L / 1024L < 512L) { diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 3a4ddea..e67f520 100644 +index 3a4ddea..de052bd 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -111,7 +111,7 @@ public abstract class World implements IBlockAccess { +@@ -99,6 +99,7 @@ public abstract class World implements IBlockAccess { + int lastXAccessed = Integer.MIN_VALUE; + int lastZAccessed = Integer.MIN_VALUE; + final Object chunkLock = new Object(); ++ public final org.spigotmc.SpigotWorldConfig spigotConfig; // Spigot + + public CraftWorld getWorld() { + return this.world; +@@ -110,6 +111,7 @@ public abstract class World implements IBlockAccess { + // Changed signature public World(IDataManager idatamanager, String s, WorldSettings worldsettings, WorldProvider worldprovider, MethodProfiler methodprofiler, IConsoleLogManager iconsolelogmanager, ChunkGenerator gen, org.bukkit.World.Environment env) { ++ this.spigotConfig = new org.spigotmc.SpigotWorldConfig( s ); // Spigot this.generator = gen; -- this.world = new CraftWorld((WorldServer) this, gen, env); -+ this.world = new CraftWorld((WorldServer) this, gen, env, s); // Spigot + this.world = new CraftWorld((WorldServer) this, gen, env); this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit - this.ticksPerMonsterSpawns = this.getServer().getTicksPerMonsterSpawns(); // CraftBukkit - // CraftBukkit end -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 6cb50b7..2956e75 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -145,7 +145,7 @@ public final class CraftServer implements Server { - protected final MinecraftServer console; - protected final DedicatedPlayerList playerList; - private final Map worlds = new LinkedHashMap(); -- private YamlConfiguration configuration; -+ public YamlConfiguration configuration; // Spigot - private final Yaml yaml = new Yaml(new SafeConstructor()); - private final Map offlinePlayers = new MapMaker().softValues().makeMap(); - private final AutoUpdater updater; -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index c0fb528..e6fdbe5 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -67,8 +67,14 @@ public class CraftWorld implements World { - private int chunkGCTickCount; - - private static final Random rand = new Random(); -- -+ -+ // Spigot start - public CraftWorld(WorldServer world, ChunkGenerator gen, Environment env) { -+ this( world, gen, env, "default" ); +diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java +new file mode 100644 +index 0000000..7bb7712 +--- /dev/null ++++ b/src/main/java/org/spigotmc/SpigotConfig.java +@@ -0,0 +1,91 @@ ++package org.spigotmc; ++ ++import com.google.common.base.Throwables; ++import java.io.File; ++import java.io.IOException; ++import java.lang.reflect.InvocationTargetException; ++import java.lang.reflect.Method; ++import java.lang.reflect.Modifier; ++import java.util.logging.Level; ++import org.bukkit.Bukkit; ++import org.bukkit.configuration.file.YamlConfiguration; ++ ++public class SpigotConfig ++{ ++ ++ private static final File CONFIG_FILE = new File( "spigot.yml" ); ++ private static final String HEADER = "This is the main configuration file for Spigot.\n" ++ + "As you can see, there's tons to configure. Some options may impact gameplay, so use\n" ++ + "with caution, and make sure you know what each option does before configuring.\n" ++ + "For a reference for any variable inside this file, check out the Spigot wiki at\n" ++ + "http://www.spigotmc.org/wiki/spigot-configuration/\n" ++ + "\n" ++ + "If you need help with the configuration or have any questions related to Spigot,\n" ++ + "join us at the IRC or drop by our forums and leave a post.\n" ++ + "\n" ++ + "IRC: #spigot @ irc.esper.net ( http://webchat.esper.net/?channel=spigot )\n" ++ + "Forums: http://www.spigotmc.org/forum/"; ++ /*========================================================================*/ ++ static YamlConfiguration config; ++ static int version; ++ /*========================================================================*/ ++ ++ public static void init() ++ { ++ config = YamlConfiguration.loadConfiguration( CONFIG_FILE ); ++ config.options().header( HEADER ); ++ config.options().copyDefaults( true ); ++ ++ version = getInt( config, "config-version", 1 ); ++ readConfig( SpigotConfig.class ); + } + -+ public CraftWorld(WorldServer world, ChunkGenerator gen, Environment env, String name) { -+ // Spigot end - this.world = world; - this.generator = gen; - -@@ -77,6 +83,23 @@ public class CraftWorld implements World { - if (server.chunkGCPeriod > 0) { - chunkGCTickCount = rand.nextInt(server.chunkGCPeriod); - } -+ // Spigot start -+ org.bukkit.configuration.file.YamlConfiguration configuration = server.configuration; -+ name = name.replaceAll( " ", "_" ); -+ -+ // Load defaults first -+ boolean info = configuration.getBoolean( "world-settings.default.info", true ); -+ -+ // Override defaults with world specific, if they exist -+ info = configuration.getBoolean( "world-settings." + name + ".info", info ); -+ -+ if ( info ) ++ static void readConfig(Class clazz) ++ { ++ for ( Method method : SpigotConfig.class.getDeclaredMethods() ) + { -+ server.getLogger().info( "-------------- Spigot ----------------" ); -+ server.getLogger().info( "-------- World Settings For [" + name + "] --------" ); -+ server.getLogger().info( "-------------------------------------------------" ); ++ if ( Modifier.isPrivate( method.getModifiers() ) && Modifier.isStatic( method.getModifiers() ) ) ++ { ++ if ( method.getParameterTypes().length == 1 && method.getParameterTypes()[0] == YamlConfiguration.class ) ++ { ++ try ++ { ++ method.invoke( null, config ); ++ } catch ( InvocationTargetException ex ) ++ { ++ Throwables.propagate( ex.getCause() ); ++ } catch ( ReflectiveOperationException ex ) ++ { ++ Bukkit.getLogger().log( Level.SEVERE, "Error invoking " + method, ex ); ++ } ++ } ++ } + } -+ // Spigot end - } - - public Block getBlockAt(int x, int y, int z) { ++ ++ try ++ { ++ config.save( CONFIG_FILE ); ++ } catch ( IOException ex ) ++ { ++ Bukkit.getLogger().log( Level.SEVERE, "Could not save " + CONFIG_FILE, ex ); ++ } ++ } ++ ++ private static boolean getBoolean(YamlConfiguration config, String path, boolean def) ++ { ++ config.addDefault( path, def ); ++ return config.getBoolean( path, config.getBoolean( path ) ); ++ } ++ ++ private static int getInt(YamlConfiguration config, String path, int def) ++ { ++ config.addDefault( path, def ); ++ return config.getInt( path, config.getInt( path ) ); ++ } ++ ++ private static String getString(YamlConfiguration config, String path, String def) ++ { ++ config.addDefault( path, def ); ++ return config.getString( path, config.getString( path ) ); ++ } ++} +diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java +new file mode 100644 +index 0000000..9818836 +--- /dev/null ++++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java +@@ -0,0 +1,48 @@ ++package org.spigotmc; ++ ++import org.bukkit.Bukkit; ++import org.bukkit.configuration.file.YamlConfiguration; ++ ++public class SpigotWorldConfig ++{ ++ ++ private final String worldName; ++ private final boolean verbose; ++ ++ public SpigotWorldConfig(String worldName) ++ { ++ this.worldName = worldName; ++ this.verbose = getBoolean( SpigotConfig.config, "verbose", true ); ++ ++ log( "-------------- Spigot ----------------" ); ++ log( "-------- World Settings For [" + worldName + "] --------" ); ++ log( "-------------------------------------------------" ); ++ SpigotConfig.readConfig( SpigotWorldConfig.class ); ++ } ++ ++ private void log(String s) ++ { ++ if ( verbose ) ++ { ++ Bukkit.getLogger().info( s ); ++ } ++ } ++ ++ private boolean getBoolean(YamlConfiguration config, String path, boolean def) ++ { ++ config.addDefault( "world-settings.default." + path, def ); ++ return config.getBoolean( "world-settings." + worldName + "." + path, config.getBoolean( "world-settings.default." + path ) ); ++ } ++ ++ private int getInt(YamlConfiguration config, String path, int def) ++ { ++ config.addDefault( "world-settings.default." + path, def ); ++ return config.getInt( "world-settings." + worldName + "." + path, config.getInt( "world-settings.default." + path ) ); ++ } ++ ++ private String getString(YamlConfiguration config, String path, String def) ++ { ++ config.addDefault( "world-settings.default." + path, def ); ++ return config.getString( "world-settings." + worldName + "." + path, config.getString( "world-settings.default." + path ) ); ++ } ++} -- 1.8.1.2