Updated to the new Configuration api

This commit is contained in:
Nathan Adams 2011-10-10 21:10:48 +01:00
parent 255778b388
commit c818414fd5
5 changed files with 93 additions and 42 deletions

View File

@ -1,9 +1,15 @@
package org.bukkit.craftbukkit; package org.bukkit.craftbukkit;
import java.util.LinkedHashMap;
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.SerializableAs;
public class CraftOfflinePlayer implements OfflinePlayer { @SerializableAs("Player")
public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializable {
private final String name; private final String name;
private final CraftServer server; private final CraftServer server;
@ -61,4 +67,22 @@ public class CraftOfflinePlayer implements OfflinePlayer {
server.getHandle().removeWhitelist(name.toLowerCase()); server.getHandle().removeWhitelist(name.toLowerCase());
} }
} }
public Map<String, Object> serialize() {
Map<String, Object> result = new LinkedHashMap<String, Object>();
result.put("name", name);
return result;
}
public static OfflinePlayer deserialize(Map<String, Object> args) {
System.out.println("Deserializing CraftOfflinePlayer with args " + args);
return Bukkit.getServer().getOfflinePlayer((String)args.get("name"));
}
@Override
public String toString() {
return getClass().getSimpleName() + "[name=" + name + "]";
}
} }

View File

@ -52,6 +52,9 @@ import net.minecraft.server.WorldMap;
import net.minecraft.server.WorldMapCollection; import net.minecraft.server.WorldMapCollection;
import net.minecraft.server.WorldSettings; import net.minecraft.server.WorldSettings;
import org.bukkit.*; import org.bukkit.*;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.permissions.Permissible; import org.bukkit.permissions.Permissible;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
@ -71,8 +74,6 @@ import org.bukkit.util.permissions.DefaultPermissions;
import org.bukkit.event.world.WorldInitEvent; import org.bukkit.event.world.WorldInitEvent;
import org.bukkit.permissions.Permission; import org.bukkit.permissions.Permission;
import org.bukkit.plugin.PluginLoadOrder; import org.bukkit.plugin.PluginLoadOrder;
import org.bukkit.util.config.Configuration;
import org.bukkit.util.config.ConfigurationNode;
import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.SafeConstructor; import org.yaml.snakeyaml.constructor.SafeConstructor;
import org.yaml.snakeyaml.error.MarkedYAMLException; import org.yaml.snakeyaml.error.MarkedYAMLException;
@ -88,10 +89,14 @@ public final class CraftServer implements Server {
protected final MinecraftServer console; protected final MinecraftServer console;
protected final ServerConfigurationManager server; protected final ServerConfigurationManager server;
private final Map<String, World> worlds = new LinkedHashMap<String, World>(); private final Map<String, World> worlds = new LinkedHashMap<String, World>();
private final Configuration configuration; private YamlConfiguration configuration;
private final Yaml yaml = new Yaml(new SafeConstructor()); private final Yaml yaml = new Yaml(new SafeConstructor());
private final Map<String, OfflinePlayer> offlinePlayers = new MapMaker().softValues().makeMap(); private final Map<String, OfflinePlayer> offlinePlayers = new MapMaker().softValues().makeMap();
static {
ConfigurationSerialization.registerClass(CraftOfflinePlayer.class);
}
public CraftServer(MinecraftServer console, ServerConfigurationManager server) { public CraftServer(MinecraftServer console, ServerConfigurationManager server) {
this.console = console; this.console = console;
this.server = server; this.server = server;
@ -99,35 +104,27 @@ public final class CraftServer implements Server {
Bukkit.setServer(this); Bukkit.setServer(this);
configuration = new Configuration((File) console.options.valueOf("bukkit-settings")); configuration = YamlConfiguration.loadConfiguration(getConfigFile());
loadConfig(); configuration.options().copyDefaults(true);
configuration.setDefaults(YamlConfiguration.loadConfiguration(getClass().getClassLoader().getResourceAsStream("configurations/bukkit.yml")));
saveConfig();
loadPlugins(); loadPlugins();
enablePlugins(PluginLoadOrder.STARTUP); enablePlugins(PluginLoadOrder.STARTUP);
ChunkCompressionThread.startThread(); ChunkCompressionThread.startThread();
} }
private void loadConfig() { private File getConfigFile() {
configuration.load(); return (File)console.options.valueOf("bukkit-settings");
configuration.getString("database.url", "jdbc:sqlite:{DIR}{NAME}.db"); }
configuration.getString("database.username", "bukkit");
configuration.getString("database.password", "walrus");
configuration.getString("database.driver", "org.sqlite.JDBC");
configuration.getString("database.isolation", "SERIALIZABLE");
configuration.getString("settings.update-folder", "update"); private void saveConfig() {
configuration.getInt("settings.spawn-radius", 16); try {
configuration.save(getConfigFile());
configuration.getString("settings.permissions-file", "permissions.yml"); } catch (IOException ex) {
Logger.getLogger(CraftServer.class.getName()).log(Level.SEVERE, "Could not save " + getConfigFile(), ex);
configuration.getInt("settings.ping-packet-limit", 100);
if (configuration.getNode("aliases") == null) {
List<String> icanhasbukkit = new ArrayList<String>();
icanhasbukkit.add("version");
configuration.setProperty("aliases.icanhasbukkit", icanhasbukkit);
} }
configuration.save();
} }
public void loadPlugins() { public void loadPlugins() {
@ -365,7 +362,7 @@ public final class CraftServer implements Server {
} }
public void reload() { public void reload() {
loadConfig(); configuration = YamlConfiguration.loadConfiguration(getConfigFile());
PropertyManager config = new PropertyManager(console.options); PropertyManager config = new PropertyManager(console.options);
console.propertyManager = config; console.propertyManager = config;
@ -692,17 +689,18 @@ public final class CraftServer implements Server {
} }
public Map<String, String[]> getCommandAliases() { public Map<String, String[]> getCommandAliases() {
ConfigurationNode node = configuration.getNode("aliases"); ConfigurationSection section = configuration.getConfigurationSection("aliases");
Map<String, String[]> result = new LinkedHashMap<String, String[]>(); Map<String, String[]> result = new LinkedHashMap<String, String[]>();
if (node != null) { if (section != null) {
for (String key : node.getKeys()) { for (String key : section.getKeys(false)) {
List<String> commands = new ArrayList<String>(); List<String> commands = null;
if (node.getProperty(key) instanceof List) { if (section.isList(key)) {
commands = node.getStringList(key, null); commands = section.getList(key);
} else { } else {
commands.add(node.getString(key)); commands = new ArrayList<String>();
commands.add(section.getString(key));
} }
result.put(key, commands.toArray(new String[0])); result.put(key, commands.toArray(new String[0]));
@ -717,8 +715,8 @@ public final class CraftServer implements Server {
} }
public void setSpawnRadius(int value) { public void setSpawnRadius(int value) {
configuration.setProperty("settings.spawn-radius", value); configuration.set("settings.spawn-radius", value);
configuration.save(); saveConfig();
} }
public boolean getOnlineMode() { public boolean getOnlineMode() {
@ -730,14 +728,14 @@ public final class CraftServer implements Server {
} }
public ChunkGenerator getGenerator(String world) { public ChunkGenerator getGenerator(String world) {
ConfigurationNode node = configuration.getNode("worlds"); ConfigurationSection section = configuration.getConfigurationSection("worlds");
ChunkGenerator result = null; ChunkGenerator result = null;
if (node != null) { if (section != null) {
node = node.getNode(world); section = section.getConfigurationSection(world);
if (node != null) { if (section != null) {
String name = node.getString("generator"); String name = section.getString("generator");
if ((name != null) && (!name.equals(""))) { if ((name != null) && (!name.equals(""))) {
String[] split = name.split(":", 2); String[] split = name.split(":", 2);

View File

@ -2,6 +2,8 @@ package org.bukkit.craftbukkit.entity;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.SocketAddress; import java.net.SocketAddress;
import java.util.LinkedHashMap;
import java.util.Map;
import net.minecraft.server.EntityHuman; import net.minecraft.server.EntityHuman;
import net.minecraft.server.EntityPlayer; import net.minecraft.server.EntityPlayer;
import net.minecraft.server.Packet131; import net.minecraft.server.Packet131;
@ -24,6 +26,8 @@ import org.bukkit.Material;
import org.bukkit.Note; import org.bukkit.Note;
import org.bukkit.Statistic; import org.bukkit.Statistic;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.configuration.serialization.DelegateDeserialization;
import org.bukkit.craftbukkit.CraftOfflinePlayer;
import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.map.CraftMapView; import org.bukkit.craftbukkit.map.CraftMapView;
@ -33,6 +37,7 @@ import org.bukkit.event.player.PlayerGameModeChangeEvent;
import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.map.MapView; import org.bukkit.map.MapView;
@DelegateDeserialization(CraftOfflinePlayer.class)
public class CraftPlayer extends CraftHumanEntity implements Player { public class CraftPlayer extends CraftHumanEntity implements Player {
public CraftPlayer(CraftServer server, EntityPlayer entity) { public CraftPlayer(CraftServer server, EntityPlayer entity) {
super(server, entity); super(server, entity);
@ -535,4 +540,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return null; return null;
} }
} }
public Map<String, Object> serialize() {
Map<String, Object> result = new LinkedHashMap<String, Object>();
result.put("name", getName());
return result;
}
} }

View File

@ -2,7 +2,9 @@ package org.bukkit.craftbukkit.inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.configuration.serialization.DelegateDeserialization;
@DelegateDeserialization(ItemStack.class)
public class CraftItemStack extends ItemStack { public class CraftItemStack extends ItemStack {
protected net.minecraft.server.ItemStack item; protected net.minecraft.server.ItemStack item;

View File

@ -0,0 +1,14 @@
settings:
spawn-radius: 16
permissions-file: permissions.yml
update-folder: update
ping-packet-limit: 100
aliases:
icanhasbukkit:
- version
database:
username: bukkit
isolation: SERIALIZABLE
driver: org.sqlite.JDBC
password: walrus
url: jdbc:sqlite:{DIR}{NAME}.db