修改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> <dependency>
<groupId>cn.lunadeer</groupId> <groupId>cn.lunadeer</groupId>
<artifactId>MinecraftPluginUtils</artifactId> <artifactId>MinecraftPluginUtils</artifactId>
<version>1.3.3-SNAPSHOT</version> <version>1.3.4-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.github.BlueMap-Minecraft</groupId> <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.ConfigManager;
import cn.lunadeer.dominion.managers.DatabaseTables; import cn.lunadeer.dominion.managers.DatabaseTables;
import cn.lunadeer.minecraftpluginutils.*; import cn.lunadeer.minecraftpluginutils.*;
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
import cn.lunadeer.minecraftpluginutils.databse.DatabaseType;
import cn.lunadeer.minecraftpluginutils.scui.CuiManager; import cn.lunadeer.minecraftpluginutils.scui.CuiManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
@ -26,8 +28,8 @@ public final class Dominion extends JavaPlugin {
new XLogger(this); new XLogger(this);
config = new ConfigManager(this); config = new ConfigManager(this);
XLogger.setDebug(config.isDebug()); XLogger.setDebug(config.isDebug());
database = new DatabaseManager(this, new DatabaseManager(this,
DatabaseManager.TYPE.valueOf(config.getDbType().toUpperCase()), DatabaseType.valueOf(config.getDbType().toUpperCase()),
config.getDbHost(), config.getDbHost(),
config.getDbPort(), config.getDbPort(),
config.getDbName(), config.getDbName(),
@ -74,12 +76,11 @@ public final class Dominion extends JavaPlugin {
@Override @Override
public void onDisable() { public void onDisable() {
// Plugin shutdown logic // Plugin shutdown logic
database.close(); DatabaseManager.instance.close();
} }
public static Dominion instance; public static Dominion instance;
public static ConfigManager config; public static ConfigManager config;
public static DatabaseManager database;
public static Map<UUID, Map<Integer, Location>> pointsSelect = new HashMap<>(); public static Map<UUID, Map<Integer, Location>> pointsSelect = new HashMap<>();
private GiteaReleaseCheck giteaReleaseCheck; private GiteaReleaseCheck giteaReleaseCheck;
} }

View File

@ -3,6 +3,7 @@ package cn.lunadeer.dominion.dtos;
import cn.lunadeer.dominion.Cache; import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion; import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.minecraftpluginutils.XLogger; import cn.lunadeer.minecraftpluginutils.XLogger;
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
@ -15,7 +16,7 @@ import java.util.List;
public class DominionDTO { public class DominionDTO {
private static List<DominionDTO> query(String sql, Object... args) { private static List<DominionDTO> query(String sql, Object... args) {
List<DominionDTO> dominions = new ArrayList<>(); 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")) { if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) {
// 如果是更新操作重新加载缓存 // 如果是更新操作重新加载缓存
Cache.instance.loadDominions(); Cache.instance.loadDominions();

View File

@ -1,119 +1,159 @@
package cn.lunadeer.dominion.managers; package cn.lunadeer.dominion.managers;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.Flag; 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 class DatabaseTables {
public static void migrate() { public static void migrate() {
String sql = "";
// player name // player name
Dominion.database.createTableIfNotExists( TableColumn player_name_id = new TableColumn("id", FieldType.INT, true, true, true, true, null);
"player_name", TableColumn player_name_uuid = new TableColumn("uuid", FieldType.STRING, false, false, true, true, null);
new String[]{"id", "uuid", "last_known_name", "last_join_at"}, TableColumn player_name_last_known_name = new TableColumn("last_known_name", FieldType.STRING, false, false, true, false, null);
new String[]{"SERIAL PRIMARY KEY", "VARCHAR(36) NOT NULL UNIQUE", "TEXT NOT NULL", "TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP"}, TableColumn player_name_last_join_at = new TableColumn("last_join_at", FieldType.DATETIME, false, false, true, false, "CURRENT_TIMESTAMP");
null 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 table
Dominion.database.createTableIfNotExists( TableColumn dominion_id = new TableColumn("id", FieldType.INT, true, true, true, true, null);
"dominion", TableColumn dominion_owner = new TableColumn("owner", FieldType.STRING, false, false, true, false, null);
new String[]{"id", TableColumn dominion_name = new TableColumn("name", FieldType.STRING, false, false, true, false, null);
"owner", TableColumn dominion_world = new TableColumn("world", FieldType.STRING, false, false, true, false, null);
"name", TableColumn dominion_x1 = new TableColumn("x1", FieldType.INT, false, false, true, false, null);
"world", TableColumn dominion_y1 = new TableColumn("y1", FieldType.INT, false, false, true, false, null);
"x1", "y1", "z1", "x2", "y2", "z2", TableColumn dominion_z1 = new TableColumn("z1", FieldType.INT, false, false, true, false, null);
"parent_dom_id", TableColumn dominion_x2 = new TableColumn("x2", FieldType.INT, false, false, true, false, null);
"join_message", TableColumn dominion_y2 = new TableColumn("y2", FieldType.INT, false, false, true, false, null);
"leave_message"}, TableColumn dominion_z2 = new TableColumn("z2", FieldType.INT, false, false, true, false, null);
new String[]{ TableColumn dominion_parent_dom_id = new TableColumn("parent_dom_id", FieldType.INT, false, false, true, false, -1);
"SERIAL PRIMARY KEY", TableColumn dominion_join_message = new TableColumn("join_message", FieldType.STRING, false, false, true, false, "'欢迎'");
"VARCHAR(36) NOT NULL", TableColumn dominion_leave_message = new TableColumn("leave_message", FieldType.STRING, false, false, true, false, "'再见'");
"TEXT NOT NULL UNIQUE", CreateTable.ForeignKey dominion_owner_fk = new CreateTable.ForeignKey(dominion_owner, "player_name", player_name_uuid, true);
"TEXT NOT NULL", "INT NOT NULL", "INT NOT NULL", "INT NOT NULL", "INT NOT NULL", "INT NOT NULL", "INT NOT NULL", CreateTable.ForeignKey dominion_parent_dom_id_fk = new CreateTable.ForeignKey(dominion_parent_dom_id, "dominion", dominion_id, true);
"INT NOT NULL DEFAULT -1", CreateTable dominion = new CreateTable().ifNotExists();
"TEXT NOT NULL DEFAULT '欢迎'", dominion.table("dominion")
"TEXT NOT NULL DEFAULT '再见'"}, .field(dominion_id)
new String[]{ .field(dominion_owner)
"FOREIGN KEY (owner) REFERENCES player_name(uuid) ON DELETE CASCADE", .field(dominion_name)
"FOREIGN KEY (parent_dom_id) REFERENCES dominion(id) ON DELETE CASCADE" .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 // player privilege
Dominion.database.createTableIfNotExists( TableColumn player_privilege_id = new TableColumn("id", FieldType.INT, true, true, true, true, null);
"player_privilege", TableColumn player_privilege_player_uuid = new TableColumn("player_uuid", FieldType.STRING, false, false, true, false, null);
new String[]{"id", "player_uuid", "dom_id", "admin"}, TableColumn player_privilege_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, null);
new String[]{"SERIAL PRIMARY KEY", "VARCHAR(36) NOT NULL", "INT NOT NULL", "BOOLEAN NOT NULL DEFAULT FALSE"}, TableColumn player_privilege_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false);
new String[]{ CreateTable.ForeignKey player_privilege_player_uuid_fk = new CreateTable.ForeignKey(player_privilege_player_uuid, "player_name", player_name_uuid, true);
"UNIQUE (player_uuid, dom_id)", CreateTable.ForeignKey player_privilege_dom_id_fk = new CreateTable.ForeignKey(player_privilege_dom_id, "dominion", dominion_id, true);
"FOREIGN KEY (player_uuid) REFERENCES player_name(uuid) ON DELETE CASCADE", CreateTable player_privilege = new CreateTable().ifNotExists();
"FOREIGN KEY (dom_id) REFERENCES dominion(id) ON DELETE CASCADE" 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", // server root player name
new String[]{"id", "uuid", "last_known_name"}, Field server_player_name_id_field = new Field("id", -1);
new String[]{"-1", "00000000-0000-0000-0000-000000000000", "server"}, Field server_player_name_uuid_field = new Field("uuid", "00000000-0000-0000-0000-000000000000");
0 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", // server root dominion
new String[]{ Field server_dom_id_field = new Field("id", -1);
"id", Field server_dom_owner_field = new Field("owner", "00000000-0000-0000-0000-000000000000");
"owner", Field server_dom_name_field = new Field("name", "根领地");
"name", Field server_dom_world_field = new Field("world", "all");
"world", Field server_dom_x1_field = new Field("x1", -2147483648);
"x1", "y1", "z1", "x2", "y2", "z2", Field server_dom_y1_field = new Field("y1", -2147483648);
"parent_dom_id", Field server_dom_z1_field = new Field("z1", -2147483648);
"join_message", Field server_dom_x2_field = new Field("x2", 2147483647);
"leave_message"}, Field server_dom_y2_field = new Field("y2", 2147483647);
new String[]{ Field server_dom_z2_field = new Field("z2", 2147483647);
"-1", Field server_dom_parent_dom_id_field = new Field("parent_dom_id", -1);
"00000000-0000-0000-0000-000000000000", Field server_dom_join_message_field = new Field("join_message", "欢迎");
"根领地", Field server_dom_leave_message_field = new Field("leave_message", "再见");
"all", InsertRow insert_server_dom = new InsertRow().table("dominion").onConflictDoNothing(server_dom_id_field)
"-2147483648", "-2147483648", "-2147483648", .field(server_dom_id_field)
"2147483647", "2147483647", "2147483647", .field(server_dom_owner_field)
"-1", .field(server_dom_name_field)
"欢迎", .field(server_dom_world_field)
"再见"}, .field(server_dom_x1_field)
0 .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()) { for (Flag flag : Flag.getAllDominionFlags()) {
Dominion.database.addColumnIfNotExists("dominion", TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
flag.getFlagName(), new AddColumn(column).table("dominion").ifNotExists().execute();
"BOOLEAN NOT NULL DEFAULT " + flag.getDefaultValue());
} }
for (Flag flag : Flag.getAllPrivilegeFlags()) { for (Flag flag : Flag.getAllPrivilegeFlags()) {
Dominion.database.addColumnIfNotExists("player_privilege", TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
flag.getFlagName(), new AddColumn(column).table("player_privilege").ifNotExists().execute();
"BOOLEAN NOT NULL DEFAULT " + flag.getDefaultValue());
} }
// 1.18.0 // 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 // 1.31.0
Dominion.database.createTableIfNotExists( TableColumn privilege_template_id = new TableColumn("id", FieldType.INT, true, true, true, true, null);
"privilege_template", TableColumn privilege_template_creator = new TableColumn("creator", FieldType.STRING, false, false, true, false, null);
new String[]{"id", "creator", "name", "admin"}, TableColumn privilege_template_name = new TableColumn("name", FieldType.STRING, false, false, true, false, null);
new String[]{"SERIAL PRIMARY KEY", "VARCHAR(36) NOT NULL", "TEXT NOT NULL", "BOOLEAN NOT NULL DEFAULT FALSE"}, TableColumn privilege_template_admin = new TableColumn("admin", FieldType.BOOLEAN, false, false, true, false, false);
new String[]{ CreateTable.ForeignKey privilege_template_creator_fk = new CreateTable.ForeignKey(privilege_template_creator, "player_name", player_name_uuid, true);
"UNIQUE (creator, name)", CreateTable privilege_template = new CreateTable().ifNotExists();
"FOREIGN KEY (creator) REFERENCES player_name(uuid) ON DELETE CASCADE" 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()) { for (Flag flag : Flag.getAllPrivilegeFlags()) {
Dominion.database.addColumnIfNotExists("privilege_template", TableColumn column = new TableColumn(flag.getFlagName(), FieldType.BOOLEAN, false, false, true, false, flag.getDefaultValue());
flag.getFlagName(), new AddColumn(column).table("privilege_template").ifNotExists().execute();
"BOOLEAN NOT NULL DEFAULT " + flag.getDefaultValue());
} }
// 1.31.6 // 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();
} }
} }