mirror of
https://github.com/CarmJos/UltraDepository.git
synced 2024-09-19 19:55:45 +00:00
调整数据结构,完成MySQL数据存储部分
This commit is contained in:
parent
fc72bf2fe3
commit
abf82e1a91
@ -1,18 +0,0 @@
|
||||
title: "&e&l农业仓库"
|
||||
|
||||
capacity:
|
||||
default: 1000
|
||||
permissions:
|
||||
5000: "ub.farmer.vip"
|
||||
|
||||
|
||||
|
||||
|
||||
items:
|
||||
"POTATO":
|
||||
slot: 5
|
||||
limit: 500
|
||||
price: 10
|
||||
name: "土豆"
|
||||
lore:
|
||||
- "香甜的土豆。"
|
@ -3,24 +3,23 @@ name: "&c&l矿业仓库"
|
||||
capacity:
|
||||
default: 1000
|
||||
permissions:
|
||||
5000: "ub.miner.vip"
|
||||
- "ub.miner.vip:5000"
|
||||
|
||||
gui:
|
||||
title: "&c&l矿业仓库"
|
||||
lines: 6
|
||||
items:
|
||||
"CLOSE":
|
||||
icon:
|
||||
==: org.bukkit.ItemStack
|
||||
slot: 0
|
||||
type: BARRIER
|
||||
data: 0
|
||||
name: "关闭界面"
|
||||
lore:
|
||||
- "点击关闭界面"
|
||||
actions:
|
||||
- "[CLOSE]"
|
||||
- "[LEFT:CLOSE]"
|
||||
- "[SHIFT_LEFT:CLOSE]"
|
||||
|
||||
items:
|
||||
"DIAMOND":
|
||||
original: true #只允许无任何特殊属性的物品被收入
|
||||
slot: 5
|
||||
limit: 500
|
||||
price: 10
|
||||
|
13
README.md
13
README.md
@ -38,6 +38,19 @@
|
||||
|
||||
## 插件指令
|
||||
|
||||
指令主指令为 /UltraBackpack (/ub | /backpack)
|
||||
|
||||
<details>
|
||||
<summary>展开查看所有子指令</summary>
|
||||
|
||||
```text
|
||||
|
||||
|
||||
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## 插件变量 ([PlaceholderAPI](https://www.spigotmc.org/resources/6245/))
|
||||
|
||||
变量部分基于 [PlaceholderAPI](https://www.spigotmc.org/resources/6245/) 实现,如需使用变量请安装其插件。
|
||||
|
@ -0,0 +1,12 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.configuration.backpack;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface BackpackCapacity {
|
||||
|
||||
|
||||
int getDefault();
|
||||
|
||||
Map<Integer, String> getPermissions();
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.configuration.backpack;
|
||||
|
||||
import cc.carm.plugin.ultrabackpack.api.configuration.gui.GUIConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface BackpackConfiguration {
|
||||
|
||||
@NotNull String getIdentifier();
|
||||
|
||||
@NotNull String getName();
|
||||
|
||||
@NotNull GUIConfiguration getGUIConfiguration();
|
||||
|
||||
@NotNull BackpackCapacity getCapacity();
|
||||
|
||||
int getCapacityFor(Player player);
|
||||
|
||||
@NotNull Map<String, BackpackItem> getItems();
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.configuration.backpack;
|
||||
|
||||
import org.bukkit.Material;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface BackpackItem {
|
||||
|
||||
Material getMaterial();
|
||||
|
||||
int getData();
|
||||
|
||||
int getSoldLimit();
|
||||
|
||||
int getSoldPrice();
|
||||
|
||||
int getDisplaySlot();
|
||||
|
||||
String getDisplayName();
|
||||
|
||||
List<String> getDisplayLore();
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.configuration.gui;
|
||||
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public interface GUIAction {
|
||||
|
||||
enum ActionType {
|
||||
|
||||
COMMAND,
|
||||
CONSOLE,
|
||||
MESSAGE,
|
||||
SOUND,
|
||||
CLOSE
|
||||
|
||||
}
|
||||
|
||||
@Nullable ClickType getClickType();
|
||||
|
||||
@NotNull ActionType getActionType();
|
||||
|
||||
@NotNull String getActionContent();
|
||||
|
||||
void executeAction();
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.configuration.gui;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface GUIConfiguration {
|
||||
|
||||
|
||||
String getTitle();
|
||||
|
||||
int getLines();
|
||||
|
||||
Map<Integer, GUIItemDetail> getItems();
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.configuration.gui;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface GUIItemDetail {
|
||||
|
||||
|
||||
ItemStack getIcon();
|
||||
|
||||
List<GUIAction> getActions();
|
||||
|
||||
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.data;
|
||||
|
||||
import cc.carm.lib.easysql.api.SQLManager;
|
||||
|
||||
import java.sql.SQLException;
|
||||
|
||||
public enum DatabaseTables {
|
||||
|
||||
USER_DATA("ub_data", new String[]{
|
||||
"`uuid` VARCHAR(36) NOT NULL PRIMARY KEY", // 用户的UUID
|
||||
"`backpack` VARCHAR(32) NOT NULL",// 背包组名
|
||||
"`type` VARCHAR(32) NOT NULL",// 背包内具体物品类型
|
||||
"`amount` INT(11) NOT NULL DEFAULT 0", // 该物品的数量
|
||||
"`sold` INT(11) NOT NULL DEFAULT 0", // 一周卖出次数
|
||||
"`day` DATE NOT NULL", // 记录卖出数量的所在天
|
||||
"PRIMARY KEY `data`(`uuid`,`backpack`,`type`)" // 联合主键索引
|
||||
}),
|
||||
;
|
||||
|
||||
String name;
|
||||
String[] columns;
|
||||
|
||||
DatabaseTables(String name, String[] columns) {
|
||||
this.name = name;
|
||||
this.columns = columns;
|
||||
}
|
||||
|
||||
|
||||
public static void createTables(SQLManager sqlManager) throws SQLException {
|
||||
for (DatabaseTables value : DatabaseTables.values()) {
|
||||
sqlManager.createTable(value.getName())
|
||||
.setColumns(value.getColumns())
|
||||
.build().execute();
|
||||
}
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String[] getColumns() {
|
||||
return columns;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.data;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class UBContentsData {
|
||||
|
||||
private final Map<String, UBItemData> contents;
|
||||
|
||||
public UBContentsData(Map<String, UBItemData> contents) {
|
||||
this.contents = contents;
|
||||
}
|
||||
|
||||
public Map<String, UBItemData> getContents() {
|
||||
return this.contents;
|
||||
}
|
||||
|
||||
public UBItemData getItemData(String itemType) {
|
||||
return getContents().get(itemType);
|
||||
}
|
||||
|
||||
|
||||
public static UBContentsData emptyContents() {
|
||||
return new UBContentsData(new HashMap<>());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.data;
|
||||
|
||||
public class UBItemData {
|
||||
|
||||
int amount;
|
||||
int sold;
|
||||
|
||||
public UBItemData(int amount, int sold) {
|
||||
this.amount = amount;
|
||||
this.sold = sold;
|
||||
}
|
||||
|
||||
public int getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
public int getSold() {
|
||||
return sold;
|
||||
}
|
||||
|
||||
public void clearSold() {
|
||||
this.sold = 0;
|
||||
}
|
||||
|
||||
public static UBItemData emptyItemData() {
|
||||
return new UBItemData(0, 0);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.data;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.sql.Date;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface UBUserData {
|
||||
|
||||
|
||||
@NotNull UUID getUserUUID();
|
||||
|
||||
@Nullable UBContentsData getBackpack(String backpackID);
|
||||
|
||||
@NotNull Set<String> getBackpackIDs();
|
||||
|
||||
int getItemAmount(String backpackID, String typeID);
|
||||
|
||||
int getItemSold(String backpackID, String typeID);
|
||||
|
||||
Date getDataDay();
|
||||
|
||||
boolean isCurrentDay();
|
||||
|
||||
void updateDate();
|
||||
|
||||
void save() throws Exception;
|
||||
|
||||
}
|
@ -1,4 +1,22 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.manager;
|
||||
|
||||
import cc.carm.plugin.ultrabackpack.api.data.UBUserData;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public interface UBUserManager {
|
||||
|
||||
@Nullable
|
||||
UBUserData getData(@NotNull UUID userUUID);
|
||||
|
||||
@NotNull
|
||||
UBUserData getData(@NotNull Player player);
|
||||
|
||||
@NotNull
|
||||
UBUserData loaData(@NotNull UUID userUUID);
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,18 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.storage;
|
||||
|
||||
import cc.carm.plugin.ultrabackpack.api.data.UBUserData;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public interface UBStorage {
|
||||
|
||||
|
||||
boolean initialize();
|
||||
|
||||
@NotNull
|
||||
UBUserData loadData(@NotNull UUID uuid) throws Exception;
|
||||
|
||||
void saveUserData(@NotNull UBUserData data) throws Exception;
|
||||
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
package cc.carm.plugin.ultrabackpack.api.user;
|
||||
|
||||
public interface UBUserData {
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
package cc.carm.plugin.ultrabackpack;
|
||||
|
||||
import cc.carm.plugin.ultrabackpack.configuration.PluginConfig;
|
||||
import cc.carm.plugin.ultrabackpack.manager.ConfigManager;
|
||||
import cc.carm.plugin.ultrabackpack.util.ColorParser;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
@ -13,7 +15,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
public class Main extends JavaPlugin {
|
||||
|
||||
private static Main instance;
|
||||
public static boolean debugMode = true;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
@ -22,8 +23,7 @@ public class Main extends JavaPlugin {
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
log("加载配置文件...");
|
||||
saveDefaultConfig();
|
||||
reloadConfig();
|
||||
ConfigManager.initConfig();
|
||||
|
||||
|
||||
log("注册监听器...");
|
||||
@ -56,10 +56,12 @@ public class Main extends JavaPlugin {
|
||||
Bukkit.getConsoleSender().sendMessage(ColorParser.parse("[" + getInstance().getName() + "] " + message));
|
||||
}
|
||||
|
||||
public static void error(String message) {
|
||||
log("&c[ERROR] &r" + message);
|
||||
}
|
||||
|
||||
public static void debug(@Nullable String message) {
|
||||
if (debugMode) {
|
||||
log("[DEBUG] " + message);
|
||||
}
|
||||
if (PluginConfig.DEBUG.get()) log("[DEBUG] " + message);
|
||||
}
|
||||
|
||||
public static Main getInstance() {
|
||||
|
@ -8,24 +8,4 @@ public class PluginConfig {
|
||||
"debug", Boolean.class
|
||||
);
|
||||
|
||||
public static class Database {
|
||||
public static final ConfigValue<String> DRIVER_NAME = new ConfigValue<>(
|
||||
"database.driver", String.class, "com.mysql.jdbc.Driver"
|
||||
);
|
||||
|
||||
public static final ConfigValue<String> URL = new ConfigValue<>(
|
||||
"database.url", String.class, "jdbc:mysql://127.0.0.1:3306/minecraft"
|
||||
);
|
||||
|
||||
|
||||
public static final ConfigValue<String> USERNAME = new ConfigValue<>(
|
||||
"database.username", String.class, "username"
|
||||
);
|
||||
public static final ConfigValue<String> PASSWORD = new ConfigValue<>(
|
||||
"database.password", String.class, "password"
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,81 @@
|
||||
package cc.carm.plugin.ultrabackpack.data;
|
||||
|
||||
import cc.carm.plugin.ultrabackpack.api.data.UBContentsData;
|
||||
import cc.carm.plugin.ultrabackpack.api.data.UBUserData;
|
||||
import cc.carm.plugin.ultrabackpack.api.storage.UBStorage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.sql.Date;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class UserData implements UBUserData {
|
||||
|
||||
public final UUID userUUID;
|
||||
|
||||
UBStorage storage;
|
||||
Map<String, UBContentsData> backpacks;
|
||||
|
||||
Date day;
|
||||
|
||||
public UserData(UUID userUUID, UBStorage storage, Map<String, UBContentsData> backpacks, Date day) {
|
||||
this.userUUID = userUUID;
|
||||
this.storage = storage;
|
||||
this.backpacks = backpacks;
|
||||
this.day = day;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull UUID getUserUUID() {
|
||||
return this.userUUID;
|
||||
}
|
||||
|
||||
public @NotNull Map<String, UBContentsData> getBackpacks() {
|
||||
return this.backpacks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull UBContentsData getBackpack(String backpackID) {
|
||||
if (!getBackpacks().containsKey(backpackID)) {
|
||||
getBackpacks().put(backpackID, UBContentsData.emptyContents());
|
||||
}
|
||||
return getBackpacks().get(backpackID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Set<String> getBackpackIDs() {
|
||||
return getBackpacks().keySet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemAmount(String backpackID, String typeID) {
|
||||
return getBackpack(backpackID).getItemData(typeID).getAmount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemSold(String backpackID, String typeID) {
|
||||
return getBackpack(backpackID).getItemData(typeID).getSold();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date getDataDay() {
|
||||
return this.day;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCurrentDay() {
|
||||
return this.day.equals(new Date(System.currentTimeMillis()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDate() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save() throws Exception {
|
||||
this.storage.saveUserData(this);
|
||||
}
|
||||
|
||||
}
|
@ -3,7 +3,6 @@ package cc.carm.plugin.ultrabackpack.manager;
|
||||
|
||||
import cc.carm.plugin.ultrabackpack.Main;
|
||||
import cc.carm.plugin.ultrabackpack.configuration.file.FileConfig;
|
||||
import org.bukkit.Material;
|
||||
|
||||
public class ConfigManager {
|
||||
|
||||
|
@ -0,0 +1,32 @@
|
||||
package cc.carm.plugin.ultrabackpack.storage;
|
||||
|
||||
import cc.carm.plugin.ultrabackpack.api.data.UBUserData;
|
||||
import cc.carm.plugin.ultrabackpack.api.storage.UBStorage;
|
||||
import cc.carm.plugin.ultrabackpack.data.UserData;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.sql.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
public class FileStorage implements UBStorage {
|
||||
|
||||
private File dataContainer;
|
||||
|
||||
@Override
|
||||
public boolean initialize() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull UserData loadData(@NotNull UUID uuid) {
|
||||
return new UserData(uuid, this, new HashMap<>(), new Date(System.currentTimeMillis()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveUserData(@NotNull UBUserData data) {
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,213 @@
|
||||
package cc.carm.plugin.ultrabackpack.storage;
|
||||
|
||||
import cc.carm.lib.easysql.EasySQL;
|
||||
import cc.carm.lib.easysql.api.SQLManager;
|
||||
import cc.carm.lib.easysql.api.action.query.PreparedQueryAction;
|
||||
import cc.carm.lib.easysql.api.action.query.SQLQuery;
|
||||
import cc.carm.plugin.ultrabackpack.Main;
|
||||
import cc.carm.plugin.ultrabackpack.api.data.UBContentsData;
|
||||
import cc.carm.plugin.ultrabackpack.api.data.UBItemData;
|
||||
import cc.carm.plugin.ultrabackpack.api.data.UBUserData;
|
||||
import cc.carm.plugin.ultrabackpack.api.storage.UBStorage;
|
||||
import cc.carm.plugin.ultrabackpack.configuration.values.ConfigValue;
|
||||
import cc.carm.plugin.ultrabackpack.data.UserData;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
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 implements UBStorage {
|
||||
|
||||
public static final ConfigValue<String> DRIVER_NAME = new ConfigValue<>(
|
||||
"storage.mysql.driver", String.class, "com.mysql.jdbc.Driver"
|
||||
);
|
||||
|
||||
public static final ConfigValue<String> URL = new ConfigValue<>(
|
||||
"storage.mysql.url", String.class, "jdbc:mysql://127.0.0.1:3306/minecraft"
|
||||
);
|
||||
|
||||
public static final ConfigValue<String> USERNAME = new ConfigValue<>(
|
||||
"storage.mysql.username", String.class, "username"
|
||||
);
|
||||
public static final ConfigValue<String> PASSWORD = new ConfigValue<>(
|
||||
"storage.mysql.password", String.class, "password"
|
||||
);
|
||||
|
||||
public enum SQLTables {
|
||||
|
||||
USER_DATA("ub_data", new String[]{
|
||||
"`uuid` VARCHAR(36) NOT NULL PRIMARY KEY", // 用户的UUID
|
||||
"`data` MEDIUMTEXT NOT NULL",// 背包内具体物品
|
||||
"`day` DATE NOT NULL", // 记录卖出数量的所在天
|
||||
});
|
||||
|
||||
String name;
|
||||
String[] columns;
|
||||
|
||||
SQLTables(String name, String[] columns) {
|
||||
this.name = name;
|
||||
this.columns = columns;
|
||||
}
|
||||
|
||||
|
||||
public static void createTables(SQLManager sqlManager) throws SQLException {
|
||||
for (SQLTables value : values()) {
|
||||
sqlManager.createTable(value.getName())
|
||||
.setColumns(value.getColumns())
|
||||
.build().execute();
|
||||
}
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String[] getColumns() {
|
||||
return columns;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static final Gson GSON = new Gson();
|
||||
public static final JsonParser PARSER = new JsonParser();
|
||||
|
||||
SQLManager sqlManager;
|
||||
|
||||
@Override
|
||||
public boolean initialize() {
|
||||
|
||||
try {
|
||||
Main.log("尝试连接到数据库...");
|
||||
this.sqlManager = EasySQL.createManager(DRIVER_NAME.get(), URL.get(), USERNAME.get(), PASSWORD.get());
|
||||
} catch (Exception exception) {
|
||||
Main.error("无法连接到数据库,请检查配置文件。");
|
||||
Main.error("Could not connect to the database, please check the configuration.");
|
||||
exception.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
Main.log("创建插件所需表...");
|
||||
SQLTables.createTables(sqlManager);
|
||||
} catch (SQLException exception) {
|
||||
Main.error("无法创建插件所需的表,请检查数据库权限。");
|
||||
Main.error("Could not create necessary tables, please check the database privileges.");
|
||||
exception.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull UserData loadData(@NotNull UUID uuid) throws Exception {
|
||||
|
||||
try (SQLQuery query = createAction(uuid).execute()) {
|
||||
ResultSet resultSet = query.getResultSet();
|
||||
Map<String, UBContentsData> dataMap = new HashMap<>();
|
||||
if (resultSet != null && resultSet.next()) {
|
||||
String dataJSON = resultSet.getString("data");
|
||||
Date date = resultSet.getDate("day");
|
||||
JsonElement dataElement = PARSER.parse(dataJSON);
|
||||
if (dataElement.isJsonObject()) {
|
||||
dataElement.getAsJsonObject().entrySet().forEach(entry -> {
|
||||
String backpackID = entry.getKey();
|
||||
UBContentsData contentsData = parseContentsData(entry.getValue());
|
||||
if (contentsData != null) dataMap.put(backpackID, contentsData);
|
||||
});
|
||||
}
|
||||
return new UserData(uuid, this, dataMap, date);
|
||||
}
|
||||
return new UserData(uuid, this, new HashMap<>(), new Date(System.currentTimeMillis()));
|
||||
} catch (Exception exception) {
|
||||
Main.error("在加载玩家 #" + uuid + " 的数据时出现异常。");
|
||||
Main.error("Error occurred when loading #" + uuid + " data.");
|
||||
throw new Exception(exception);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveUserData(@NotNull UBUserData data) throws Exception {
|
||||
JsonObject dataObject = new JsonObject();
|
||||
|
||||
for (String backpackID : data.getBackpackIDs()) {
|
||||
JsonObject contentObject = serializeContentsData(data.getBackpack(backpackID));
|
||||
if (contentObject != null) dataObject.add(backpackID, contentObject);
|
||||
}
|
||||
|
||||
try {
|
||||
getSQLManager().createReplace(SQLTables.USER_DATA.getName())
|
||||
.setColumnNames("uuid", "data", "day")
|
||||
.setParams(data.getUserUUID(), GSON.toJson(dataObject), data.getDataDay())
|
||||
.execute();
|
||||
} catch (SQLException exception) {
|
||||
Main.error("在加载玩家 #" + data.getUserUUID() + " 的数据时出现异常。");
|
||||
Main.error("Error occurred when loading #" + data.getUserUUID() + " data.");
|
||||
throw new Exception(exception);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private SQLManager getSQLManager() {
|
||||
return sqlManager;
|
||||
}
|
||||
|
||||
private PreparedQueryAction createAction(UUID uuid) {
|
||||
return getSQLManager().createQuery()
|
||||
.inTable(SQLTables.USER_DATA.getName())
|
||||
.addCondition("uuid", uuid.toString())
|
||||
.setLimit(1).build();
|
||||
}
|
||||
|
||||
private UBContentsData parseContentsData(JsonElement contentsElement) {
|
||||
return contentsElement.isJsonObject() ? parseContentsData(contentsElement.getAsJsonObject()) : null;
|
||||
}
|
||||
|
||||
private UBContentsData parseContentsData(JsonObject contentsObject) {
|
||||
Map<String, UBItemData> contents = new HashMap<>();
|
||||
for (Map.Entry<String, JsonElement> entry : contentsObject.entrySet()) {
|
||||
String itemType = entry.getKey();
|
||||
UBItemData data = parseItemData(entry.getValue());
|
||||
contents.put(itemType, data);
|
||||
}
|
||||
return new UBContentsData(contents);
|
||||
}
|
||||
|
||||
private UBItemData parseItemData(JsonElement itemElement) {
|
||||
return itemElement.isJsonObject() ? parseItemData(itemElement.getAsJsonObject()) : null;
|
||||
}
|
||||
|
||||
private UBItemData parseItemData(JsonObject itemObject) {
|
||||
if (!itemObject.has("amount") || !itemObject.has("sold")) {
|
||||
return UBItemData.emptyItemData();
|
||||
} else {
|
||||
return new UBItemData(itemObject.get("amount").getAsInt(), itemObject.get("sold").getAsInt());
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private JsonObject serializeContentsData(@Nullable UBContentsData contentsData) {
|
||||
if (contentsData == null) return null;
|
||||
JsonObject contentsObject = new JsonObject();
|
||||
contentsData.getContents().forEach((typeID, item) -> contentsObject.add(typeID, serializeItemData(item)));
|
||||
return contentsObject;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private JsonObject serializeItemData(@NotNull UBItemData itemData) {
|
||||
JsonObject itemObject = new JsonObject();
|
||||
itemObject.addProperty("amount", itemData.getAmount());
|
||||
itemObject.addProperty("sold", itemData.getSold());
|
||||
return itemObject;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
package cc.carm.plugin.ultrabackpack.ui;
|
||||
|
||||
public class SellItemGUI {
|
||||
}
|
@ -4,10 +4,14 @@
|
||||
|
||||
version: ${project.parent.version}
|
||||
|
||||
stroage:
|
||||
debug: false
|
||||
|
||||
# 存储方式,可选 [ yaml | mysql ]
|
||||
method: database
|
||||
# 存储相关配置
|
||||
# 注意:存储配置不会通过重载指令生效,如有修改请重新启动服务器。
|
||||
storage:
|
||||
|
||||
# 存储方式,可选 [ file | mysql ]
|
||||
method: mysql
|
||||
|
||||
# 选择 file 存储方式时的存储路径
|
||||
# 默认为相对路径,相对于插件生成的配置文件夹下的路径
|
||||
@ -19,7 +23,7 @@ stroage:
|
||||
mysql:
|
||||
# 数据库驱动路径
|
||||
driver: "com.mysql.jdbc.Driver"
|
||||
url: "jdbc:mysql://127.0.0.1:3306/db-name"
|
||||
url: "jdbc:mysql://127.0.0.1:3306/<db-name>"
|
||||
username: "username"
|
||||
password: "password"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user