diff --git a/pom.xml b/pom.xml
index 6d66674..319d6f3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,7 +82,7 @@
cn.lunadeer
MinecraftPluginUtils
- 1.3.3-SNAPSHOT
+ 1.3.4-SNAPSHOT
com.github.BlueMap-Minecraft
diff --git a/src/main/java/cn/lunadeer/dominion/Dominion.java b/src/main/java/cn/lunadeer/dominion/Dominion.java
index 16417bc..9b80fa2 100644
--- a/src/main/java/cn/lunadeer/dominion/Dominion.java
+++ b/src/main/java/cn/lunadeer/dominion/Dominion.java
@@ -6,6 +6,8 @@ import cn.lunadeer.dominion.events.SelectPointEvents;
import cn.lunadeer.dominion.managers.ConfigManager;
import cn.lunadeer.dominion.managers.DatabaseTables;
import cn.lunadeer.minecraftpluginutils.*;
+import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
+import cn.lunadeer.minecraftpluginutils.databse.DatabaseType;
import cn.lunadeer.minecraftpluginutils.scui.CuiManager;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@@ -26,8 +28,8 @@ public final class Dominion extends JavaPlugin {
new XLogger(this);
config = new ConfigManager(this);
XLogger.setDebug(config.isDebug());
- database = new DatabaseManager(this,
- DatabaseManager.TYPE.valueOf(config.getDbType().toUpperCase()),
+ new DatabaseManager(this,
+ DatabaseType.valueOf(config.getDbType().toUpperCase()),
config.getDbHost(),
config.getDbPort(),
config.getDbName(),
@@ -74,12 +76,11 @@ public final class Dominion extends JavaPlugin {
@Override
public void onDisable() {
// Plugin shutdown logic
- database.close();
+ DatabaseManager.instance.close();
}
public static Dominion instance;
public static ConfigManager config;
- public static DatabaseManager database;
public static Map> pointsSelect = new HashMap<>();
private GiteaReleaseCheck giteaReleaseCheck;
}
diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java
index 2f3a548..347b95c 100644
--- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java
+++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java
@@ -3,6 +3,7 @@ package cn.lunadeer.dominion.dtos;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.minecraftpluginutils.XLogger;
+import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
import org.bukkit.Location;
import org.bukkit.World;
@@ -15,7 +16,7 @@ import java.util.List;
public class DominionDTO {
private static List query(String sql, Object... args) {
List dominions = new ArrayList<>();
- try (ResultSet rs = Dominion.database.query(sql, args)) {
+ try (ResultSet rs = DatabaseManager.instance.query(sql, args)) {
if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) {
// 如果是更新操作,重新加载缓存
Cache.instance.loadDominions();
diff --git a/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java b/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java
index 0dc1548..4d87c8a 100644
--- a/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java
+++ b/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java
@@ -1,119 +1,159 @@
package cn.lunadeer.dominion.managers;
-import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.Flag;
+import cn.lunadeer.minecraftpluginutils.databse.Field;
+import cn.lunadeer.minecraftpluginutils.databse.FieldType;
+import cn.lunadeer.minecraftpluginutils.databse.TableColumn;
+import cn.lunadeer.minecraftpluginutils.databse.syntax.AddColumn;
+import cn.lunadeer.minecraftpluginutils.databse.syntax.CreateTable;
+import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
public class DatabaseTables {
public static void migrate() {
- String sql = "";
-
// player name
- Dominion.database.createTableIfNotExists(
- "player_name",
- new String[]{"id", "uuid", "last_known_name", "last_join_at"},
- new String[]{"SERIAL PRIMARY KEY", "VARCHAR(36) NOT NULL UNIQUE", "TEXT NOT NULL", "TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP"},
- null
- );
+ TableColumn player_name_id = new TableColumn("id", FieldType.INT, true, true, true, true, null);
+ TableColumn player_name_uuid = new TableColumn("uuid", FieldType.STRING, false, false, true, true, null);
+ TableColumn player_name_last_known_name = new TableColumn("last_known_name", FieldType.STRING, false, false, true, false, null);
+ TableColumn player_name_last_join_at = new TableColumn("last_join_at", FieldType.DATETIME, false, false, true, false, "CURRENT_TIMESTAMP");
+ CreateTable player_name = new CreateTable().ifNotExists();
+ player_name.table("player_name")
+ .field(player_name_id)
+ .field(player_name_uuid)
+ .field(player_name_last_known_name)
+ .field(player_name_last_join_at);
+ player_name.execute();
// dominion table
- Dominion.database.createTableIfNotExists(
- "dominion",
- new String[]{"id",
- "owner",
- "name",
- "world",
- "x1", "y1", "z1", "x2", "y2", "z2",
- "parent_dom_id",
- "join_message",
- "leave_message"},
- new String[]{
- "SERIAL PRIMARY KEY",
- "VARCHAR(36) NOT NULL",
- "TEXT NOT NULL UNIQUE",
- "TEXT NOT NULL", "INT NOT NULL", "INT NOT NULL", "INT NOT NULL", "INT NOT NULL", "INT NOT NULL", "INT NOT NULL",
- "INT NOT NULL DEFAULT -1",
- "TEXT NOT NULL DEFAULT '欢迎'",
- "TEXT NOT NULL DEFAULT '再见'"},
- new String[]{
- "FOREIGN KEY (owner) REFERENCES player_name(uuid) ON DELETE CASCADE",
- "FOREIGN KEY (parent_dom_id) REFERENCES dominion(id) ON DELETE CASCADE"
- }
- );
+ TableColumn dominion_id = new TableColumn("id", FieldType.INT, true, true, true, true, null);
+ TableColumn dominion_owner = new TableColumn("owner", FieldType.STRING, false, false, true, false, null);
+ TableColumn dominion_name = new TableColumn("name", FieldType.STRING, false, false, true, false, null);
+ TableColumn dominion_world = new TableColumn("world", FieldType.STRING, false, false, true, false, null);
+ TableColumn dominion_x1 = new TableColumn("x1", FieldType.INT, false, false, true, false, null);
+ TableColumn dominion_y1 = new TableColumn("y1", FieldType.INT, false, false, true, false, null);
+ TableColumn dominion_z1 = new TableColumn("z1", FieldType.INT, false, false, true, false, null);
+ TableColumn dominion_x2 = new TableColumn("x2", FieldType.INT, false, false, true, false, null);
+ TableColumn dominion_y2 = new TableColumn("y2", FieldType.INT, false, false, true, false, null);
+ TableColumn dominion_z2 = new TableColumn("z2", FieldType.INT, false, false, true, false, null);
+ TableColumn dominion_parent_dom_id = new TableColumn("parent_dom_id", FieldType.INT, false, false, true, false, -1);
+ TableColumn dominion_join_message = new TableColumn("join_message", FieldType.STRING, false, false, true, false, "'欢迎'");
+ TableColumn dominion_leave_message = new TableColumn("leave_message", FieldType.STRING, false, false, true, false, "'再见'");
+ CreateTable.ForeignKey dominion_owner_fk = new CreateTable.ForeignKey(dominion_owner, "player_name", player_name_uuid, true);
+ CreateTable.ForeignKey dominion_parent_dom_id_fk = new CreateTable.ForeignKey(dominion_parent_dom_id, "dominion", dominion_id, true);
+ CreateTable dominion = new CreateTable().ifNotExists();
+ dominion.table("dominion")
+ .field(dominion_id)
+ .field(dominion_owner)
+ .field(dominion_name)
+ .field(dominion_world)
+ .field(dominion_x1)
+ .field(dominion_y1)
+ .field(dominion_z1)
+ .field(dominion_x2)
+ .field(dominion_y2)
+ .field(dominion_z2)
+ .field(dominion_parent_dom_id)
+ .field(dominion_join_message)
+ .field(dominion_leave_message)
+ .foreignKey(dominion_owner_fk)
+ .foreignKey(dominion_parent_dom_id_fk);
+ dominion.execute();
// player privilege
- Dominion.database.createTableIfNotExists(
- "player_privilege",
- new String[]{"id", "player_uuid", "dom_id", "admin"},
- new String[]{"SERIAL PRIMARY KEY", "VARCHAR(36) NOT NULL", "INT NOT NULL", "BOOLEAN NOT NULL DEFAULT FALSE"},
- new String[]{
- "UNIQUE (player_uuid, dom_id)",
- "FOREIGN KEY (player_uuid) REFERENCES player_name(uuid) ON DELETE CASCADE",
- "FOREIGN KEY (dom_id) REFERENCES dominion(id) ON DELETE CASCADE"
- }
- );
+ TableColumn player_privilege_id = new TableColumn("id", FieldType.INT, true, true, true, true, null);
+ TableColumn player_privilege_player_uuid = new TableColumn("player_uuid", FieldType.STRING, false, false, true, false, null);
+ TableColumn player_privilege_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, null);
+ TableColumn player_privilege_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false);
+ CreateTable.ForeignKey player_privilege_player_uuid_fk = new CreateTable.ForeignKey(player_privilege_player_uuid, "player_name", player_name_uuid, true);
+ CreateTable.ForeignKey player_privilege_dom_id_fk = new CreateTable.ForeignKey(player_privilege_dom_id, "dominion", dominion_id, true);
+ CreateTable player_privilege = new CreateTable().ifNotExists();
+ player_privilege.table("player_privilege")
+ .field(player_privilege_id)
+ .field(player_privilege_player_uuid)
+ .field(player_privilege_dom_id)
+ .field(player_privilege_admin)
+ .foreignKey(player_privilege_player_uuid_fk)
+ .foreignKey(player_privilege_dom_id_fk)
+ .unique(player_privilege_player_uuid, player_privilege_dom_id);
+ player_name.execute();
- Dominion.database.insertRowIfNotExists("player_name",
- new String[]{"id", "uuid", "last_known_name"},
- new String[]{"-1", "00000000-0000-0000-0000-000000000000", "server"},
- 0
- );
+ // server root player name
+ Field server_player_name_id_field = new Field("id", -1);
+ Field server_player_name_uuid_field = new Field("uuid", "00000000-0000-0000-0000-000000000000");
+ Field server_player_name_last_known_name_field = new Field("last_known_name", "server");
+ InsertRow insert_server_player_name = new InsertRow().table("player_name").onConflictDoNothing(server_player_name_id_field)
+ .field(server_player_name_id_field)
+ .field(server_player_name_uuid_field)
+ .field(server_player_name_last_known_name_field);
+ insert_server_player_name.execute();
- Dominion.database.insertRowIfNotExists("dominion",
- new String[]{
- "id",
- "owner",
- "name",
- "world",
- "x1", "y1", "z1", "x2", "y2", "z2",
- "parent_dom_id",
- "join_message",
- "leave_message"},
- new String[]{
- "-1",
- "00000000-0000-0000-0000-000000000000",
- "根领地",
- "all",
- "-2147483648", "-2147483648", "-2147483648",
- "2147483647", "2147483647", "2147483647",
- "-1",
- "欢迎",
- "再见"},
- 0
- );
+ // server root dominion
+ Field server_dom_id_field = new Field("id", -1);
+ Field server_dom_owner_field = new Field("owner", "00000000-0000-0000-0000-000000000000");
+ Field server_dom_name_field = new Field("name", "根领地");
+ Field server_dom_world_field = new Field("world", "all");
+ Field server_dom_x1_field = new Field("x1", -2147483648);
+ Field server_dom_y1_field = new Field("y1", -2147483648);
+ Field server_dom_z1_field = new Field("z1", -2147483648);
+ Field server_dom_x2_field = new Field("x2", 2147483647);
+ Field server_dom_y2_field = new Field("y2", 2147483647);
+ Field server_dom_z2_field = new Field("z2", 2147483647);
+ Field server_dom_parent_dom_id_field = new Field("parent_dom_id", -1);
+ Field server_dom_join_message_field = new Field("join_message", "欢迎");
+ Field server_dom_leave_message_field = new Field("leave_message", "再见");
+ InsertRow insert_server_dom = new InsertRow().table("dominion").onConflictDoNothing(server_dom_id_field)
+ .field(server_dom_id_field)
+ .field(server_dom_owner_field)
+ .field(server_dom_name_field)
+ .field(server_dom_world_field)
+ .field(server_dom_x1_field)
+ .field(server_dom_y1_field)
+ .field(server_dom_z1_field)
+ .field(server_dom_x2_field)
+ .field(server_dom_y2_field)
+ .field(server_dom_z2_field)
+ .field(server_dom_parent_dom_id_field)
+ .field(server_dom_join_message_field)
+ .field(server_dom_leave_message_field);
+ insert_server_dom.execute();
for (Flag flag : Flag.getAllDominionFlags()) {
- Dominion.database.addColumnIfNotExists("dominion",
- flag.getFlagName(),
- "BOOLEAN NOT NULL DEFAULT " + flag.getDefaultValue());
+ TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
+ new AddColumn(column).table("dominion").ifNotExists().execute();
}
for (Flag flag : Flag.getAllPrivilegeFlags()) {
- Dominion.database.addColumnIfNotExists("player_privilege",
- flag.getFlagName(),
- "BOOLEAN NOT NULL DEFAULT " + flag.getDefaultValue());
+ TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
+ new AddColumn(column).table("player_privilege").ifNotExists().execute();
}
// 1.18.0
- Dominion.database.addColumnIfNotExists("dominion", "tp_location", "TEXT NOT NULL DEFAULT 'default'");
+ TableColumn dominion_tp_location = new TableColumn("tp_location", FieldType.STRING, false, false, true, false, "'default'");
+ new AddColumn(dominion_tp_location).table("dominion").ifNotExists().execute();
// 1.31.0
- Dominion.database.createTableIfNotExists(
- "privilege_template",
- new String[]{"id", "creator", "name", "admin"},
- new String[]{"SERIAL PRIMARY KEY", "VARCHAR(36) NOT NULL", "TEXT NOT NULL", "BOOLEAN NOT NULL DEFAULT FALSE"},
- new String[]{
- "UNIQUE (creator, name)",
- "FOREIGN KEY (creator) REFERENCES player_name(uuid) ON DELETE CASCADE"
- }
- );
+ TableColumn privilege_template_id = new TableColumn("id", FieldType.INT, true, true, true, true, null);
+ TableColumn privilege_template_creator = new TableColumn("creator", FieldType.STRING, false, false, true, false, null);
+ TableColumn privilege_template_name = new TableColumn("name", FieldType.STRING, false, false, true, false, null);
+ TableColumn privilege_template_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false);
+ CreateTable.ForeignKey privilege_template_creator_fk = new CreateTable.ForeignKey(privilege_template_creator, "player_name", player_name_uuid, true);
+ CreateTable privilege_template = new CreateTable().ifNotExists();
+ privilege_template.table("privilege_template")
+ .field(privilege_template_id)
+ .field(privilege_template_creator)
+ .field(privilege_template_name)
+ .field(privilege_template_admin)
+ .foreignKey(privilege_template_creator_fk)
+ .unique(privilege_template_creator, privilege_template_name);
+ privilege_template.execute();
+
for (Flag flag : Flag.getAllPrivilegeFlags()) {
- Dominion.database.addColumnIfNotExists("privilege_template",
- flag.getFlagName(),
- "BOOLEAN NOT NULL DEFAULT " + flag.getDefaultValue());
+ TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
+ new AddColumn(column).table("privilege_template").ifNotExists().execute();
}
// 1.31.6
- Dominion.database.addColumnIfNotExists("dominion", "color", "TEXT NOT NULL DEFAULT '#00BFFF'");
+ TableColumn dominion_color = new TableColumn("color", FieldType.STRING, false, false, true, false, "'#00BFFF'");
+ new AddColumn(dominion_color).table("dominion").ifNotExists().execute();
}
}