diff options
Diffstat (limited to 'CraftBukkit-Patches/0005-Spigot-Configuration.patch')
-rw-r--r-- | CraftBukkit-Patches/0005-Spigot-Configuration.patch | 314 |
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 + |