diff --git a/pom.xml b/pom.xml index cc30412..98e5a22 100644 --- a/pom.xml +++ b/pom.xml @@ -1,59 +1,53 @@ - - 4.0.0 - cn.CityCraft - RealBackpacks - 0.1.3-SNAPSHOT - RealBackpacks - - src - - - src - - **/*.java - - - - - - maven-compiler-plugin - 3.1 - - 1.7 - 1.7 - - - - - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - - - org.spigotmc - spigot-api - jar - 1.8.3-R0.1-SNAPSHOT - - - cn.CityCraft - BVLib - 0.0.1-SNAPSHOT - jar - - - net.milkbowl.vault - VaultAPI - 1.5 - system - ${project.basedir}/lib/Vault.jar - - - - UTF-8 - + + 4.0.0 + cn.CityCraft + RealBackpacks + 0.1.3-SNAPSHOT + RealBackpacks + + src + + + src + + **/*.java + + + + + + maven-compiler-plugin + 3.1 + + 1.7 + 1.7 + + + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/groups/public/ + + + + + org.spigotmc + spigot-api + jar + 1.8.3-R0.1-SNAPSHOT + + + net.milkbowl.vault + VaultAPI + 1.5 + system + ${project.basedir}/lib/Vault.jar + + + + UTF-8 + \ No newline at end of file diff --git a/src/cn/citycraft/plugins/MainCommand.java b/src/cn/citycraft/plugins/MainCommand.java index 5e0d411..cb9ee12 100644 --- a/src/cn/citycraft/plugins/MainCommand.java +++ b/src/cn/citycraft/plugins/MainCommand.java @@ -16,8 +16,8 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import cn.citycraft.Utils.config.FileConfig; -import cn.citycraft.Utils.config.PlayerConfig; +import cn.citycraft.plugins.config.FileConfig; +import cn.citycraft.plugins.config.PlayerConfig; import cn.citycraft.plugins.util.MysqlFunctions; import cn.citycraft.plugins.util.RBUtil; import cn.citycraft.plugins.util.Serialization; diff --git a/src/cn/citycraft/plugins/config/Config.java b/src/cn/citycraft/plugins/config/Config.java index 5b65631..5f027b0 100644 --- a/src/cn/citycraft/plugins/config/Config.java +++ b/src/cn/citycraft/plugins/config/Config.java @@ -5,8 +5,7 @@ import java.io.IOException; import org.bukkit.plugin.Plugin; -import cn.citycraft.Utils.config.ConfigLoader; -import cn.citycraft.Utils.config.FileConfig; + public class Config extends ConfigLoader { private static String CONFIG_NAME = "config.yml"; diff --git a/src/cn/citycraft/plugins/config/ConfigLoader.java b/src/cn/citycraft/plugins/config/ConfigLoader.java new file mode 100644 index 0000000..bcbe575 --- /dev/null +++ b/src/cn/citycraft/plugins/config/ConfigLoader.java @@ -0,0 +1,102 @@ +package cn.citycraft.plugins.config; + +import java.io.File; +import java.io.IOException; + +import org.bukkit.plugin.Plugin; + +public class ConfigLoader extends FileConfig { + protected static FileConfig config; + protected static boolean tip = true; + protected static Plugin plugin; + + public ConfigLoader(Plugin p, File file) { + ConfigLoader.plugin = p; + config = loadConfig(p, file, null, true); + } + + public ConfigLoader(Plugin p, File file, boolean res) { + ConfigLoader.plugin = p; + config = loadConfig(p, file, null, res); + } + + public ConfigLoader(Plugin p, File file, String ver) { + ConfigLoader.plugin = p; + config = loadConfig(p, file, ver, true); + } + + public ConfigLoader(Plugin p, File file, String ver, boolean res) { + ConfigLoader.plugin = p; + config = loadConfig(p, file, ver, res); + } + + public ConfigLoader(Plugin p, String filename) { + ConfigLoader.plugin = p; + config = loadConfig(p, new File(p.getDataFolder(), filename), null, + true); + } + + public ConfigLoader(Plugin p, String filename, boolean res) { + ConfigLoader.plugin = p; + config = loadConfig(p, new File(p.getDataFolder(), filename), null, res); + } + + public ConfigLoader(Plugin p, String filename, String ver) { + ConfigLoader.plugin = p; + config = loadConfig(p, new File(p.getDataFolder(), filename), ver, true); + } + + public ConfigLoader(Plugin p, String filename, String ver, boolean res) { + ConfigLoader.plugin = p; + config = loadConfig(p, new File(p.getDataFolder(), filename), ver, true); + } + + public static FileConfig getInstance() { + return config; + } + + public FileConfig loadConfig(Plugin p, File file, String ver, boolean res) { + tip = res ; + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + p.getLogger().info("创建新的文件夹" + file.getParentFile().getAbsolutePath() + "..."); + } + if (!file.exists()) { + fileCreate(p, file, res); + } else { + if (ver != null) { + FileConfig configcheck = init(file); + String version = configcheck.getString("version"); + if (version == null || !version.equals(ver)) { + p.saveResource(file.getName(), true); + p.getLogger().warning( + "配置文件: " + file.getName() + " 版本过低 正在升级..."); + } + } + } + if (tip) + p.getLogger().info( + "载入配置文件: " + file.getName() + + (ver != null ? " 版本: " + ver : "")); + return init(file); + } + + private void fileCreate(Plugin p, File file, boolean res) { + if (res) { + p.saveResource(file.getName(), false); + } else { + try { + p.getLogger().info("创建新的配置文件" + file.getAbsolutePath() + "..."); + file.createNewFile(); + } catch (IOException e) { + p.getLogger().info("配置文件" + file.getName() + "创建失败..."); + e.printStackTrace(); + } + } + } + + public static void saveError(File file) { + plugin.getLogger().info("配置文件" + file.getName() + "保存错误..."); + } + +} diff --git a/src/cn/citycraft/plugins/config/FileConfig.java b/src/cn/citycraft/plugins/config/FileConfig.java new file mode 100644 index 0000000..5a64b70 --- /dev/null +++ b/src/cn/citycraft/plugins/config/FileConfig.java @@ -0,0 +1,88 @@ +package cn.citycraft.plugins.config; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.logging.Level; + +import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; +import org.bukkit.configuration.Configuration; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.configuration.file.YamlConstructor; +import org.bukkit.configuration.file.YamlRepresenter; +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.representer.Representer; + +import com.google.common.base.Charsets; +import com.google.common.io.Files; + +/** + * An implementation of {@link Configuration} which saves all files in Yaml. + * Note that this implementation is not synchronized. + */ +public class FileConfig extends YamlConfiguration { + + protected final DumperOptions yamlOptions = new DumperOptions(); + protected final Representer yamlRepresenter = new YamlRepresenter(); + protected final Yaml yaml = new Yaml(new YamlConstructor(), + yamlRepresenter, yamlOptions); + + public static FileConfig init(File file) { + return FileConfig.loadConfiguration(file); + } + + public static FileConfig loadConfiguration(File file) { + Validate.notNull(file, "File cannot be null"); + FileConfig config = new FileConfig(); + try { + config.load(file); + } catch (FileNotFoundException ex) { + } catch (IOException ex) { + Bukkit.getLogger().log(Level.SEVERE, "Cannot load " + file, ex); + } catch (InvalidConfigurationException ex) { + Bukkit.getLogger().log(Level.SEVERE, "Cannot load " + file, ex); + } + return config; + } + + @Override + public String saveToString() { + yamlOptions.setIndent(options().indent()); + yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + yamlRepresenter.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + String header = buildHeader(); + String dump = yaml.dump(getValues(false)); + if (dump.equals(BLANK_CONFIG)) { + dump = ""; + } + return header + dump; + } + + public void load(File file) throws FileNotFoundException, IOException, + InvalidConfigurationException { + Validate.notNull(file, "File cannot be null"); + final FileInputStream stream = new FileInputStream(file); + load(new InputStreamReader(stream, Charsets.UTF_8)); + } + + public void save(File file) throws IOException { + Validate.notNull(file, "File cannot be null"); + Files.createParentDirs(file); + String data = saveToString(); + Writer writer = new OutputStreamWriter(new FileOutputStream(file), + Charsets.UTF_8); + try { + writer.write(data); + } finally { + writer.close(); + } + } +} diff --git a/src/cn/citycraft/plugins/config/PlayerConfig.java b/src/cn/citycraft/plugins/config/PlayerConfig.java new file mode 100644 index 0000000..dff85e1 --- /dev/null +++ b/src/cn/citycraft/plugins/config/PlayerConfig.java @@ -0,0 +1,48 @@ +package cn.citycraft.plugins.config; + +import java.io.File; +import java.io.IOException; + +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +public class PlayerConfig extends ConfigLoader { + private static String CONFIG_FOLDER = "userdate"; + private static FileConfig instance; + private static File file; + + public PlayerConfig(Plugin p, String player) { + super(p, CONFIG_FOLDER + File.separator + player + ".yml", false); + file = new File(p.getDataFolder(), CONFIG_FOLDER + File.separator + + player + ".yml"); + instance = super.getInstance(); + } + + public static FileConfig getInstance(Plugin p, Player player) { + new PlayerConfig(p, player.getName()); + return instance; + } + + public static FileConfig getInstance(Plugin p, String player) { + new PlayerConfig(p, player); + return instance; + } + + public static String getMessage(String path) { + String message = instance.getString(path).replaceAll("&", "§"); + return message; + } + + public static String[] getStringArray(String path) { + return instance.getStringList(path).toArray(new String[0]); + } + + public static void save() { + try { + instance.save(file); + } catch (IOException e) { + saveError(file); + e.printStackTrace(); + } + } +} diff --git a/src/cn/citycraft/plugins/listeners/InventoryListener.java b/src/cn/citycraft/plugins/listeners/InventoryListener.java index f5a917b..bd5c077 100644 --- a/src/cn/citycraft/plugins/listeners/InventoryListener.java +++ b/src/cn/citycraft/plugins/listeners/InventoryListener.java @@ -14,8 +14,8 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import cn.citycraft.Utils.config.PlayerConfig; import cn.citycraft.plugins.RealBackpacks; +import cn.citycraft.plugins.config.PlayerConfig; import cn.citycraft.plugins.util.MysqlFunctions; import cn.citycraft.plugins.util.RBUtil; import cn.citycraft.plugins.util.Serialization; diff --git a/src/cn/citycraft/plugins/listeners/PlayerListener.java b/src/cn/citycraft/plugins/listeners/PlayerListener.java index c09cf2d..1124212 100644 --- a/src/cn/citycraft/plugins/listeners/PlayerListener.java +++ b/src/cn/citycraft/plugins/listeners/PlayerListener.java @@ -19,9 +19,9 @@ import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import cn.citycraft.Utils.config.FileConfig; -import cn.citycraft.Utils.config.PlayerConfig; import cn.citycraft.plugins.RealBackpacks; +import cn.citycraft.plugins.config.FileConfig; +import cn.citycraft.plugins.config.PlayerConfig; import cn.citycraft.plugins.util.MysqlFunctions; import cn.citycraft.plugins.util.RBUtil; import cn.citycraft.plugins.util.Serialization; diff --git a/src/cn/citycraft/plugins/util/RBUtil.java b/src/cn/citycraft/plugins/util/RBUtil.java index 5e63110..6c4af17 100644 --- a/src/cn/citycraft/plugins/util/RBUtil.java +++ b/src/cn/citycraft/plugins/util/RBUtil.java @@ -7,8 +7,8 @@ import java.util.List; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; -import cn.citycraft.Utils.config.PlayerConfig; import cn.citycraft.plugins.RealBackpacks; +import cn.citycraft.plugins.config.PlayerConfig; public class RBUtil { diff --git a/src/cn/citycraft/plugins/util/Serialization.java b/src/cn/citycraft/plugins/util/Serialization.java index 96ee76d..d78a99e 100644 --- a/src/cn/citycraft/plugins/util/Serialization.java +++ b/src/cn/citycraft/plugins/util/Serialization.java @@ -26,7 +26,8 @@ import cn.citycraft.plugins.json.JSONObject; * */ public class Serialization { - + public static String NullString = "|-空-|"; + public static String SplitString = "|-分割-|"; @SuppressWarnings("unchecked") public static Map toMap(final JSONObject object) throws JSONException { final Map map = new HashMap(); @@ -59,7 +60,7 @@ public class Serialization { } public static List stringToList(final String listString) { - return Arrays.asList(listString.split("<->")); + return Arrays.asList(listString.split(SplitString)); } public static String listToString(final List list) { @@ -68,7 +69,7 @@ public class Serialization { if (newString == null) { newString = s; } else { - newString = newString + "<->" + s; + newString = newString + SplitString + s; } } return newString; @@ -82,7 +83,7 @@ public class Serialization { } for (final ConfigurationSerializable cs : items) { if (cs == null) { - result.add("null"); + result.add(NullString); } else { result.add(new JSONObject(serialize(cs)).toString()); } @@ -94,7 +95,7 @@ public class Serialization { final Inventory inv = Bukkit.createInventory(null, size, ChatColor.translateAlternateColorCodes('&', name)); final List contents = new ArrayList(); for (final String piece : stringItems) { - if (piece.equalsIgnoreCase("null")) { + if (piece.equalsIgnoreCase(NullString)) { contents.add(null); } else { try {