diff --git a/pom.xml b/pom.xml index 964ddfb..4ed5c5d 100644 --- a/pom.xml +++ b/pom.xml @@ -9,13 +9,13 @@ 11 UTF-8 UTF-8 - 1.1.3 + 1.2.0 cc.carm.plugin ultradepository jar - 1.2.2 + 1.2.3 UltraDepository 超级仓库插件,支持设定不同物品的存储仓库。 @@ -92,39 +92,28 @@ - - org.bstats - bstats-bukkit - 2.2.1 - compile - - cc.carm.lib easyplugin-main - ${easyplugin.version} - compile + true cc.carm.lib easyplugin-configuration - ${easyplugin.version} - compile + true cc.carm.lib easyplugin-gui - ${easyplugin.version} - compile + true cc.carm.lib easyplugin-database - ${easyplugin.version} - compile + true @@ -141,6 +130,13 @@ provided + + org.bstats + bstats-bukkit + 2.2.1 + compile + + com.github.MilkBowl VaultAPI @@ -157,6 +153,20 @@ + + + + + cc.carm.lib + easyplugin-bom + ${easyplugin.version} + pom + import + + + + + diff --git a/src/main/java/cc/carm/plugin/ultradepository/storage/DataStorage.java b/src/main/java/cc/carm/plugin/ultradepository/storage/DataStorage.java index 93c73ca..16fca45 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/storage/DataStorage.java +++ b/src/main/java/cc/carm/plugin/ultradepository/storage/DataStorage.java @@ -27,7 +27,7 @@ public interface DataStorage { * @return 正确ID数据 * @since v1.1.6 */ - default String getFixedTypeID(String typeID) { + static String getFixedTypeID(String typeID) { String trueID = typeID; if (typeID.contains(":")) { try { diff --git a/src/main/java/cc/carm/plugin/ultradepository/storage/impl/JSONStorage.java b/src/main/java/cc/carm/plugin/ultradepository/storage/impl/JSONStorage.java index 7c7176b..b973c73 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/storage/impl/JSONStorage.java +++ b/src/main/java/cc/carm/plugin/ultradepository/storage/impl/JSONStorage.java @@ -30,8 +30,8 @@ public class JSONStorage implements DataStorage { private File dataContainer; - public static final Gson GSON = new Gson(); - public static final JsonParser PARSER = new JsonParser(); + protected static final Gson GSON = new Gson(); + protected static final JsonParser PARSER = new JsonParser(); @Override public boolean initialize() { @@ -66,18 +66,9 @@ public class JSONStorage implements DataStorage { JsonObject dataObject = dataElement.getAsJsonObject(); int dateInt = dataObject.get("date").getAsInt(); - JsonObject repositoriesObject = dataObject.getAsJsonObject("depositories"); - UserData userData = new UserData(uuid, new HashMap<>(), dateInt); - for (Map.Entry entry : repositoriesObject.entrySet()) { - Depository depository = UltraDepository.getDepositoryManager().getDepository(entry.getKey()); - if (depository == null) continue; - - DepositoryData contentsData = parseContentsData(depository, userData, entry.getValue()); - if (contentsData != null) userData.setDepository(contentsData); - - } + loadDepositoriesInto(userData, dataObject.getAsJsonObject("depositories")); return userData; } @@ -86,7 +77,7 @@ public class JSONStorage implements DataStorage { public void saveUserData(@NotNull UserData data) throws Exception { JsonObject dataObject = new JsonObject(); dataObject.addProperty("date", data.getDateInt()); - dataObject.add("depositories", GSON.toJsonTree(data.serializeToMap())); + dataObject.add("depositories", saveDepositoriesToJson(data)); FileWriter writer = new FileWriter(new File(getDataContainer(), data.getUserUUID() + ".json")); writer.write(GSON.toJson(dataObject)); @@ -94,18 +85,36 @@ public class JSONStorage implements DataStorage { writer.close(); } - protected DepositoryData parseContentsData(@NotNull Depository source, - @NotNull UserData owner, - @NotNull JsonElement contentsElement) { - return contentsElement.isJsonObject() ? parseContentsData(source, owner, contentsElement.getAsJsonObject()) : null; + public static JsonElement saveDepositoriesToJson(UserData data) { + return GSON.toJsonTree(data.serializeToMap()); } - protected DepositoryData parseContentsData(@NotNull Depository source, - @NotNull UserData owner, - @NotNull JsonObject contentsObject) { + public static String serializeDepositories(UserData data) { + return GSON.toJson(saveDepositoriesToJson(data)); + } + + public static void loadDepositoriesInto(UserData data, JsonElement depositoriesElement) { + if (depositoriesElement == null || !depositoriesElement.isJsonObject()) return; + + for (Map.Entry entry : depositoriesElement.getAsJsonObject().entrySet()) { + Depository depository = UltraDepository.getDepositoryManager().getDepository(entry.getKey()); + if (depository == null) continue; + + DepositoryData contentsData = parseContentsData(depository, data, entry.getValue()); + if (contentsData != null) data.setDepository(contentsData); + + } + } + + public static DepositoryData parseContentsData(@NotNull Depository source, + @NotNull UserData owner, + @NotNull JsonElement contentsElement) { + if (!contentsElement.isJsonObject()) return null; + JsonObject contentsObject = contentsElement.getAsJsonObject(); + DepositoryData data = DepositoryData.emptyContents(source, owner); for (Map.Entry entry : contentsObject.entrySet()) { - DepositoryItem item = source.getItems().get(getFixedTypeID(entry.getKey())); + DepositoryItem item = source.getItems().get(DataStorage.getFixedTypeID(entry.getKey())); if (item == null) continue; DepositoryItemData itemData = parseItemData(item, data, entry.getValue()); @@ -115,15 +124,13 @@ public class JSONStorage implements DataStorage { return data; } - protected DepositoryItemData parseItemData(@NotNull DepositoryItem source, - @NotNull DepositoryData owner, - @NotNull JsonElement itemElement) { - return itemElement.isJsonObject() ? parseItemData(source, owner, itemElement.getAsJsonObject()) : null; - } - protected DepositoryItemData parseItemData(@NotNull DepositoryItem source, - @NotNull DepositoryData owner, - @NotNull JsonObject itemObject) { + public static DepositoryItemData parseItemData(@NotNull DepositoryItem source, + @NotNull DepositoryData owner, + @NotNull JsonElement itemElement) { + if (!itemElement.isJsonObject()) return null; + JsonObject itemObject = itemElement.getAsJsonObject(); + int amount = itemObject.has("amount") ? itemObject.get("amount").getAsInt() : 0; int sold = itemObject.has("sold") ? itemObject.get("sold").getAsInt() : 0; if (amount == 0 && sold == 0) return null; diff --git a/src/main/java/cc/carm/plugin/ultradepository/storage/impl/MySQLStorage.java b/src/main/java/cc/carm/plugin/ultradepository/storage/impl/MySQLStorage.java index c1c5b2d..768da19 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/storage/impl/MySQLStorage.java +++ b/src/main/java/cc/carm/plugin/ultradepository/storage/impl/MySQLStorage.java @@ -5,15 +5,9 @@ import cc.carm.lib.easyplugin.database.DatabaseTable; import cc.carm.lib.easyplugin.database.EasySQL; import cc.carm.lib.easyplugin.database.api.SQLManager; import cc.carm.lib.easyplugin.database.api.action.query.PreparedQueryAction; -import cc.carm.lib.easyplugin.database.api.action.query.SQLQuery; import cc.carm.plugin.ultradepository.UltraDepository; -import cc.carm.plugin.ultradepository.configuration.depository.Depository; -import cc.carm.plugin.ultradepository.data.DepositoryData; import cc.carm.plugin.ultradepository.data.UserData; import cc.carm.plugin.ultradepository.util.DateIntUtil; -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -21,39 +15,37 @@ import java.sql.Date; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; -import java.util.Map; import java.util.UUID; public class MySQLStorage extends JSONStorage { private static final ConfigValue DRIVER_NAME = new ConfigValue<>( - "storage.mysql.driver", String.class, "com.mysql.jdbc.Driver" + "storage.mysql.driver", String.class, + "com.mysql.jdbc.Driver" ); private static final ConfigValue URL = new ConfigValue<>( - "storage.mysql.url", String.class, "jdbc:mysql://127.0.0.1:3306/minecraft" + "storage.mysql.url", String.class, + "jdbc:mysql://127.0.0.1:3306/minecraft" ); private static final ConfigValue USERNAME = new ConfigValue<>( - "storage.mysql.username", String.class, "username" + "storage.mysql.username", String.class, + "root" ); + private static final ConfigValue PASSWORD = new ConfigValue<>( - "storage.mysql.password", String.class, "password" + "storage.mysql.password", String.class, + "password" ); - private static final DatabaseTable USER_TABLE = new DatabaseTable( - "ub_data", - new String[]{ - "`uuid` VARCHAR(36) NOT NULL PRIMARY KEY", // 用户的UUID - "`data` MEDIUMTEXT NOT NULL",// 背包内具体物品 - "`day` DATE NOT NULL", // 记录卖出数量的所在天 - }); - - - public static final Gson GSON = new Gson(); - public static final JsonParser PARSER = new JsonParser(); + private static final ConfigValue TABLE_NAME = new ConfigValue<>( + "storage.mysql.table", String.class, + "ud_data" + ); SQLManager sqlManager; + DatabaseTable userDataTable; @Override public boolean initialize() { @@ -71,7 +63,17 @@ public class MySQLStorage extends JSONStorage { try { UltraDepository.getInstance().log(" 创建插件所需表..."); - USER_TABLE.createTable(sqlManager); + + this.userDataTable = new DatabaseTable( + TABLE_NAME.getOptional().orElse("ud_data"), + new String[]{ + "`uuid` VARCHAR(36) NOT NULL PRIMARY KEY", // 用户的UUID + "`data` MEDIUMTEXT NOT NULL",// 背包内具体物品 + "`day` DATE NOT NULL", // 记录卖出数量的所在天 + }); + + getUserDataTable().createTable(sqlManager); + } catch (SQLException exception) { UltraDepository.getInstance().error("无法创建插件所需的表,请检查数据库权限。"); UltraDepository.getInstance().error("Could not create necessary tables, please check the database privileges."); @@ -90,38 +92,25 @@ public class MySQLStorage extends JSONStorage { @Override public @Nullable UserData loadData(@NotNull UUID uuid) throws Exception { - try (SQLQuery query = createAction(uuid).execute()) { + return createAction(uuid).executeFunction((query) -> { ResultSet resultSet = query.getResultSet(); if (resultSet == null || !resultSet.next()) return null; - String dataJSON = resultSet.getString("data"); Date date = resultSet.getDate("day"); UserData data = new UserData(uuid, new HashMap<>(), DateIntUtil.getDateInt(date)); - JsonElement dataElement = PARSER.parse(dataJSON); - if (dataElement.isJsonObject()) { - for (Map.Entry entry : dataElement.getAsJsonObject().entrySet()) { - Depository depository = UltraDepository.getDepositoryManager().getDepository(entry.getKey()); - if (depository == null) continue; + loadDepositoriesInto(data, PARSER.parse(resultSet.getString("data"))); - DepositoryData contentsData = parseContentsData(depository, data, entry.getValue()); - if (contentsData != null) data.setDepository(contentsData); - - } - } return data; - - } catch (Exception exception) { - throw new Exception(exception); - } + }); } @Override public void saveUserData(@NotNull UserData data) throws Exception { - getSQLManager().createReplace(USER_TABLE.getTableName()) + getSQLManager().createReplace(getUserDataTable().getTableName()) .setColumnNames("uuid", "data", "day") - .setParams(data.getUserUUID(), GSON.toJson(data.serializeToMap()), data.getDate()) + .setParams(data.getUserUUID(), serializeDepositories(data), data.getDate()) .execute(); } @@ -129,8 +118,12 @@ public class MySQLStorage extends JSONStorage { return sqlManager; } + public DatabaseTable getUserDataTable() { + return userDataTable; + } + private PreparedQueryAction createAction(UUID uuid) { - return USER_TABLE.createQuery(sqlManager) + return getUserDataTable().createQuery(getSQLManager()) .addCondition("uuid", uuid.toString()) .setLimit(1).build(); } diff --git a/src/main/java/cc/carm/plugin/ultradepository/storage/impl/YAMLStorage.java b/src/main/java/cc/carm/plugin/ultradepository/storage/impl/YAMLStorage.java index bf32d0b..c88dcc2 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/storage/impl/YAMLStorage.java +++ b/src/main/java/cc/carm/plugin/ultradepository/storage/impl/YAMLStorage.java @@ -73,7 +73,7 @@ public class YAMLStorage implements DataStorage { for (String itemTypeID : depositorySection.getKeys(false)) { - DepositoryItem item = depository.getItems().get(getFixedTypeID(itemTypeID)); + DepositoryItem item = depository.getItems().get(DataStorage.getFixedTypeID(itemTypeID)); if (item == null) continue; ConfigurationSection itemSection = depositorySection.getConfigurationSection(itemTypeID); diff --git a/src/main/java/cc/carm/plugin/ultradepository/util/DateIntUtil.java b/src/main/java/cc/carm/plugin/ultradepository/util/DateIntUtil.java index 863e0f2..a177b79 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/util/DateIntUtil.java +++ b/src/main/java/cc/carm/plugin/ultradepository/util/DateIntUtil.java @@ -27,7 +27,8 @@ public class DateIntUtil { public static Date getDate(int dateInt) { try { - return (Date) getFormat().parse(Integer.toString(dateInt)); + long millis = getFormat().parse(Integer.toString(dateInt)).getTime(); + return new java.sql.Date(millis); } catch (ParseException | NumberFormatException e) { return new Date(System.currentTimeMillis()); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b288968..477ce3d 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -29,6 +29,7 @@ storage: # 数据库驱动路径 driver: "com.mysql.jdbc.Driver" url: "jdbc:mysql://127.0.0.1:3306/" + table: "ud_data" # 插件表名,允许自定义 username: "username" password: "password"