704728d670
Now we maintain a new list of blocks to replace with ores in engine mode 2, to ensure that we only update when players mine blocks that are potentially not an ore. We could perhaps even elimate this slight lag from mode 2 by reducing the need for calling update(x,y,z)
300 lines
11 KiB
Diff
300 lines
11 KiB
Diff
From 64d8f6301c45ffcaa96adc2efaa76226dc944bea Mon Sep 17 00:00:00 2001
|
|
From: md_5 <md_5@live.com.au>
|
|
Date: Sun, 7 Jul 2013 09:32:53 +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 30ce5f4..c9bb3a6 100644
|
|
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
|
|
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
|
|
@@ -109,6 +109,11 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
|
if (this.J() < 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
|
|
|
|
h.info("Generating keypair");
|
|
this.a(MinecraftEncryption.b());
|
|
@@ -123,7 +128,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)));
|
|
+ server.loadPlugins();
|
|
+ server.enablePlugins(org.bukkit.plugin.PluginLoadOrder.STARTUP);
|
|
+ // Spigot End
|
|
|
|
if (!this.getOnlineMode()) {
|
|
h.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 f850a0f..cd529ec 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -107,6 +107,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;
|
|
@@ -118,6 +119,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 15a5a5d..93e1782 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -230,8 +230,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
|
|
}
|
|
|
|
private File getConfigFile() {
|
|
@@ -581,6 +583,7 @@ public final class CraftServer implements Server {
|
|
playerList.getIPBans().load();
|
|
playerList.getNameBans().load();
|
|
|
|
+ org.spigotmc.SpigotConfig.init(); // Spigot
|
|
for (WorldServer world : console.worlds) {
|
|
world.difficulty = difficulty;
|
|
world.setSpawnFlags(monsters, animals);
|
|
@@ -595,11 +598,13 @@ 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
|
|
|
|
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..3dfe4ed
|
|
--- /dev/null
|
|
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
|
@@ -0,0 +1,120 @@
|
|
+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.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 = YamlConfiguration.loadConfiguration( CONFIG_FILE );
|
|
+ config.options().header( HEADER );
|
|
+ config.options().copyDefaults( true );
|
|
+
|
|
+ commands = new HashMap<String, Command>();
|
|
+
|
|
+ version = getInt( "config-version", 5 );
|
|
+ set( "config-version", 5 );
|
|
+ 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 )
|
|
+ {
|
|
+ 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.8.3.2
|
|
|