aboutsummaryrefslogtreecommitdiffhomepage
path: root/CraftBukkit-Patches/0005-Spigot-Configuration.patch
diff options
context:
space:
mode:
Diffstat (limited to 'CraftBukkit-Patches/0005-Spigot-Configuration.patch')
-rw-r--r--CraftBukkit-Patches/0005-Spigot-Configuration.patch314
1 files changed, 314 insertions, 0 deletions
diff --git a/CraftBukkit-Patches/0005-Spigot-Configuration.patch b/CraftBukkit-Patches/0005-Spigot-Configuration.patch
new file mode 100644
index 0000000000..e93d098cd1
--- /dev/null
+++ b/CraftBukkit-Patches/0005-Spigot-Configuration.patch
@@ -0,0 +1,314 @@
+From 2d68f826e2ef628afb3b6a375cec19d50c8be8d7 Mon Sep 17 00:00:00 2001
+From: md_5 <[email protected]>
+Date: Sun, 7 Jul 2013 09:32:53 +1000
+Subject: [PATCH] Spigot Configuration
+
+Provides the basic infrastructure to load and save the Spigot configuration file, spigot.yml
+
+diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
+index 83f2dad..c591de0 100644
+--- a/src/main/java/net/minecraft/server/DedicatedServer.java
++++ b/src/main/java/net/minecraft/server/DedicatedServer.java
+@@ -116,6 +116,11 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
+ if (this.L() < 0) {
+ this.setPort(this.propertyManager.getInt("server-port", 25565));
+ }
++ // Spigot start
++ this.a((PlayerList) (new DedicatedPlayerList(this)));
++ org.spigotmc.SpigotConfig.init();
++ org.spigotmc.SpigotConfig.registerCommands();
++ // Spigot end
+
+ i.info("Generating keypair");
+ this.a(MinecraftEncryption.b());
+@@ -130,7 +135,11 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
+ return false;
+ }
+
+- this.a((PlayerList) (new DedicatedPlayerList(this))); // CraftBukkit
++ // Spigot Start - Move DedicatedPlayerList up and bring plugin loading from CraftServer to here
++ // this.a((PlayerList) (new DedicatedPlayerList(this))); // CraftBukkit
++ server.loadPlugins();
++ server.enablePlugins(org.bukkit.plugin.PluginLoadOrder.STARTUP);
++ // Spigot End
+
+ if (!this.getOnlineMode()) {
+ i.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!");
+diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
+index 08c506c..12c613c 100644
+--- a/src/main/java/net/minecraft/server/World.java
++++ b/src/main/java/net/minecraft/server/World.java
+@@ -106,6 +106,7 @@ public abstract class World implements IBlockAccess {
+ public boolean pvpMode;
+ public boolean keepSpawnInMemory = true;
+ public ChunkGenerator generator;
++ public final org.spigotmc.SpigotWorldConfig spigotConfig; // Spigot
+
+ public CraftWorld getWorld() {
+ return this.world;
+@@ -121,6 +122,7 @@ public abstract class World implements IBlockAccess {
+
+ // Changed signature - added gen and env
+ public World(IDataManager idatamanager, String s, WorldSettings worldsettings, WorldProvider worldprovider, MethodProfiler methodprofiler, 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.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit
+diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+index eb0b342..d997b48 100644
+--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+@@ -323,8 +323,10 @@ public final class CraftServer implements Server {
+ updater.getOnUpdate().addAll(configuration.getStringList("auto-updater.on-update"));
+ updater.check(serverVersion);
+
+- loadPlugins();
+- enablePlugins(PluginLoadOrder.STARTUP);
++ // Spigot Start - Moved to old location of new DedicatedPlayerList in DedicatedServer
++ // loadPlugins();
++ // enablePlugins(PluginLoadOrder.STARTUP);
++ // Spigot End
+ }
+
+ public boolean getCommandBlockOverride(String command) {
+@@ -789,6 +791,7 @@ public final class CraftServer implements Server {
+ logger.log(Level.WARNING, "Failed to load banned-players.json, " + ex.getMessage());
+ }
+
++ org.spigotmc.SpigotConfig.init(); // Spigot
+ for (WorldServer world : console.worlds) {
+ world.difficulty = difficulty;
+ world.setSpawnFlags(monsters, animals);
+@@ -803,11 +806,14 @@ public final class CraftServer implements Server {
+ } else {
+ world.ticksPerMonsterSpawns = this.getTicksPerMonsterSpawns();
+ }
++ world.spigotConfig.init(); // Spigot
+ }
+
+ pluginManager.clearPlugins();
+ commandMap.clearCommands();
+ resetRecipes();
++ org.spigotmc.SpigotConfig.registerCommands(); // Spigot
++
+ overrideAllCommandBlockCommands = commandsConfiguration.getStringList("command-block-overrides").contains("*");
+
+ int pollCount = 0;
+diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
+new file mode 100644
+index 0000000..a4de4e9
+--- /dev/null
++++ b/src/main/java/org/spigotmc/SpigotConfig.java
+@@ -0,0 +1,132 @@
++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.HashMap;
++import java.util.List;
++import java.util.Map;
++import java.util.logging.Level;
++import net.minecraft.server.MinecraftServer;
++import org.bukkit.Bukkit;
++import org.bukkit.command.Command;
++import org.bukkit.configuration.InvalidConfigurationException;
++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/\n";
++ /*========================================================================*/
++ static YamlConfiguration config;
++ static int version;
++ static Map<String, Command> commands;
++ /*========================================================================*/
++
++ public static void init()
++ {
++ config = new YamlConfiguration();
++ try
++ {
++ config.load( CONFIG_FILE );
++ } catch ( IOException ex )
++ {
++ } catch ( InvalidConfigurationException ex )
++ {
++ Bukkit.getLogger().log( Level.SEVERE, "Could not load spigot.yml, please correct your syntax errors", ex );
++ throw Throwables.propagate( ex );
++ }
++
++ config.options().header( HEADER );
++ config.options().copyDefaults( true );
++
++ commands = new HashMap<String, Command>();
++
++ version = getInt( "config-version", 6 );
++ set( "config-version", 6 );
++ readConfig( SpigotConfig.class, null );
++ }
++
++ public static void registerCommands()
++ {
++ for ( Map.Entry<String, Command> entry : commands.entrySet() )
++ {
++ MinecraftServer.getServer().server.getCommandMap().register( entry.getKey(), "Spigot", entry.getValue() );
++ }
++ }
++
++ static void readConfig(Class<?> clazz, Object instance)
++ {
++ for ( Method method : clazz.getDeclaredMethods() )
++ {
++ if ( Modifier.isPrivate( method.getModifiers() ) )
++ {
++ if ( method.getParameterTypes().length == 0 && method.getReturnType() == Void.TYPE )
++ {
++ try
++ {
++ method.setAccessible( true );
++ method.invoke( instance );
++ } catch ( InvocationTargetException ex )
++ {
++ throw Throwables.propagate( ex.getCause() );
++ } catch ( Exception ex )
++ {
++ Bukkit.getLogger().log( Level.SEVERE, "Error invoking " + method, ex );
++ }
++ }
++ }
++ }
++
++ try
++ {
++ config.save( CONFIG_FILE );
++ } catch ( IOException ex )
++ {
++ Bukkit.getLogger().log( Level.SEVERE, "Could not save " + CONFIG_FILE, ex );
++ }
++ }
++
++ private static void set(String path, Object val)
++ {
++ config.set( path, val );
++ }
++
++ private static boolean getBoolean(String path, boolean def)
++ {
++ config.addDefault( path, def );
++ return config.getBoolean( path, config.getBoolean( path ) );
++ }
++
++ private static int getInt(String path, int def)
++ {
++ config.addDefault( path, def );
++ return config.getInt( path, config.getInt( path ) );
++ }
++
++ private static <T> List getList(String path, T def)
++ {
++ config.addDefault( path, def );
++ return (List<T>) config.getList( path, config.getList( path ) );
++ }
++
++ private static String getString(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..961ddb4
+--- /dev/null
++++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
+@@ -0,0 +1,71 @@
++package org.spigotmc;
++
++import java.util.List;
++import org.bukkit.Bukkit;
++import org.bukkit.configuration.file.YamlConfiguration;
++
++public class SpigotWorldConfig
++{
++
++ private final String worldName;
++ private final YamlConfiguration config;
++ private boolean verbose;
++
++ public SpigotWorldConfig(String worldName)
++ {
++ this.worldName = worldName;
++ this.config = SpigotConfig.config;
++ init();
++ }
++
++ public void init()
++ {
++ this.verbose = getBoolean( "verbose", true );
++
++ log( "-------- World Settings For [" + worldName + "] --------" );
++ SpigotConfig.readConfig( SpigotWorldConfig.class, this );
++ }
++
++ private void log(String s)
++ {
++ if ( verbose )
++ {
++ Bukkit.getLogger().info( s );
++ }
++ }
++
++ private void set(String path, Object val)
++ {
++ config.set( "world-settings.default." + path, val );
++ }
++
++ private boolean getBoolean(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 double getDouble(String path, double def)
++ {
++ config.addDefault( "world-settings.default." + path, def );
++ return config.getDouble( "world-settings." + worldName + "." + path, config.getDouble( "world-settings.default." + path ) );
++ }
++
++ private int getInt(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 <T> List getList(String path, T def)
++ {
++ config.addDefault( "world-settings.default." + path, def );
++ return (List<T>) config.getList( "world-settings." + worldName + "." + path, config.getList( "world-settings.default." + path ) );
++ }
++
++ private String getString(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.9.1
+