修改dto代码适配新数据库工具库

This commit is contained in:
zhangyuheng 2024-06-19 18:00:51 +08:00
parent 03cb1af603
commit 7a6798bed1
4 changed files with 137 additions and 95 deletions

View File

@ -82,7 +82,7 @@
<dependency>
<groupId>cn.lunadeer</groupId>
<artifactId>MinecraftPluginUtils</artifactId>
<version>1.3.3-SNAPSHOT</version>
<version>1.3.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.github.BlueMap-Minecraft</groupId>

View File

@ -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<UUID, Map<Integer, Location>> pointsSelect = new HashMap<>();
private GiteaReleaseCheck giteaReleaseCheck;
}

View File

@ -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<DominionDTO> query(String sql, Object... args) {
List<DominionDTO> 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();

View File

@ -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();
}
}