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:
|
capacity:
|
||||||
default: 1000
|
default: 1000
|
||||||
permissions:
|
permissions:
|
||||||
5000: "ub.miner.vip"
|
- "ub.miner.vip:5000"
|
||||||
|
|
||||||
gui:
|
gui:
|
||||||
title: "&c&l矿业仓库"
|
title: "&c&l矿业仓库"
|
||||||
lines: 6
|
lines: 6
|
||||||
items:
|
items:
|
||||||
"CLOSE":
|
"CLOSE":
|
||||||
|
icon:
|
||||||
|
==: org.bukkit.ItemStack
|
||||||
slot: 0
|
slot: 0
|
||||||
type: BARRIER
|
|
||||||
data: 0
|
|
||||||
name: "关闭界面"
|
|
||||||
lore:
|
|
||||||
- "点击关闭界面"
|
|
||||||
actions:
|
actions:
|
||||||
- "[CLOSE]"
|
- "[LEFT:CLOSE]"
|
||||||
|
- "[SHIFT_LEFT:CLOSE]"
|
||||||
|
|
||||||
items:
|
items:
|
||||||
"DIAMOND":
|
"DIAMOND":
|
||||||
|
original: true #只允许无任何特殊属性的物品被收入
|
||||||
slot: 5
|
slot: 5
|
||||||
limit: 500
|
limit: 500
|
||||||
price: 10
|
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/))
|
||||||
|
|
||||||
变量部分基于 [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;
|
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 {
|
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;
|
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 cc.carm.plugin.ultrabackpack.util.ColorParser;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
@ -13,7 +15,6 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
public class Main extends JavaPlugin {
|
public class Main extends JavaPlugin {
|
||||||
|
|
||||||
private static Main instance;
|
private static Main instance;
|
||||||
public static boolean debugMode = true;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
@ -22,8 +23,7 @@ public class Main extends JavaPlugin {
|
|||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
log("加载配置文件...");
|
log("加载配置文件...");
|
||||||
saveDefaultConfig();
|
ConfigManager.initConfig();
|
||||||
reloadConfig();
|
|
||||||
|
|
||||||
|
|
||||||
log("注册监听器...");
|
log("注册监听器...");
|
||||||
@ -56,10 +56,12 @@ public class Main extends JavaPlugin {
|
|||||||
Bukkit.getConsoleSender().sendMessage(ColorParser.parse("[" + getInstance().getName() + "] " + message));
|
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) {
|
public static void debug(@Nullable String message) {
|
||||||
if (debugMode) {
|
if (PluginConfig.DEBUG.get()) log("[DEBUG] " + message);
|
||||||
log("[DEBUG] " + message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Main getInstance() {
|
public static Main getInstance() {
|
||||||
|
@ -8,24 +8,4 @@ public class PluginConfig {
|
|||||||
"debug", Boolean.class
|
"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.Main;
|
||||||
import cc.carm.plugin.ultrabackpack.configuration.file.FileConfig;
|
import cc.carm.plugin.ultrabackpack.configuration.file.FileConfig;
|
||||||
import org.bukkit.Material;
|
|
||||||
|
|
||||||
public class ConfigManager {
|
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}
|
version: ${project.parent.version}
|
||||||
|
|
||||||
stroage:
|
debug: false
|
||||||
|
|
||||||
# 存储方式,可选 [ yaml | mysql ]
|
# 存储相关配置
|
||||||
method: database
|
# 注意:存储配置不会通过重载指令生效,如有修改请重新启动服务器。
|
||||||
|
storage:
|
||||||
|
|
||||||
|
# 存储方式,可选 [ file | mysql ]
|
||||||
|
method: mysql
|
||||||
|
|
||||||
# 选择 file 存储方式时的存储路径
|
# 选择 file 存储方式时的存储路径
|
||||||
# 默认为相对路径,相对于插件生成的配置文件夹下的路径
|
# 默认为相对路径,相对于插件生成的配置文件夹下的路径
|
||||||
@ -19,7 +23,7 @@ stroage:
|
|||||||
mysql:
|
mysql:
|
||||||
# 数据库驱动路径
|
# 数据库驱动路径
|
||||||
driver: "com.mysql.jdbc.Driver"
|
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"
|
username: "username"
|
||||||
password: "password"
|
password: "password"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user