diff --git a/pom.xml b/pom.xml
index 319d6f3..0648b7f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
cn.lunadeer
Dominion
- 1.33.0-beta
+ 1.33.1-beta
jar
Dominion
diff --git a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java
index 347b95c..6a757ef 100644
--- a/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java
+++ b/src/main/java/cn/lunadeer/dominion/dtos/DominionDTO.java
@@ -4,14 +4,15 @@ import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.minecraftpluginutils.XLogger;
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
+import cn.lunadeer.minecraftpluginutils.databse.Field;
+import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
+import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
import org.bukkit.Location;
import org.bukkit.World;
-import java.awt.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
-import java.util.List;
public class DominionDTO {
private static List query(String sql, Object... args) {
@@ -21,37 +22,43 @@ public class DominionDTO {
// 如果是更新操作,重新加载缓存
Cache.instance.loadDominions();
}
- if (rs == null) return dominions;
- while (rs.next()) {
- Integer id = rs.getInt("id");
- UUID owner = UUID.fromString(rs.getString("owner"));
- String name = rs.getString("name");
- String world = rs.getString("world");
- Integer x1 = rs.getInt("x1");
- Integer y1 = rs.getInt("y1");
- Integer z1 = rs.getInt("z1");
- Integer x2 = rs.getInt("x2");
- Integer y2 = rs.getInt("y2");
- Integer z2 = rs.getInt("z2");
- Integer parentDomId = rs.getInt("parent_dom_id");
- String tp_location = rs.getString("tp_location");
- Map flags = new HashMap<>();
- for (Flag f : Flag.getDominionFlagsEnabled()) {
- flags.put(f, rs.getBoolean(f.getFlagName()));
- }
- String color = rs.getString("color");
-
- DominionDTO dominion = new DominionDTO(id, owner, name, world, x1, y1, z1, x2, y2, z2, parentDomId,
- rs.getString("join_message"),
- rs.getString("leave_message"),
- flags,
- tp_location,
- color
- );
- dominions.add(dominion);
- }
+ return getDTOFromRS(rs);
} catch (SQLException e) {
- Dominion.database.handleDatabaseError("数据库操作失败: ", e, sql);
+ DatabaseManager.handleDatabaseError("数据库操作失败: ", e, sql);
+ }
+ return dominions;
+ }
+
+ private static List getDTOFromRS(ResultSet rs) throws SQLException {
+ List dominions = new ArrayList<>();
+ if (rs == null) return dominions;
+ while (rs.next()) {
+ Integer id = rs.getInt("id");
+ UUID owner = UUID.fromString(rs.getString("owner"));
+ String name = rs.getString("name");
+ String world = rs.getString("world");
+ Integer x1 = rs.getInt("x1");
+ Integer y1 = rs.getInt("y1");
+ Integer z1 = rs.getInt("z1");
+ Integer x2 = rs.getInt("x2");
+ Integer y2 = rs.getInt("y2");
+ Integer z2 = rs.getInt("z2");
+ Integer parentDomId = rs.getInt("parent_dom_id");
+ String tp_location = rs.getString("tp_location");
+ Map flags = new HashMap<>();
+ for (Flag f : Flag.getDominionFlagsEnabled()) {
+ flags.put(f, rs.getBoolean(f.getFlagName()));
+ }
+ String color = rs.getString("color");
+
+ DominionDTO dominion = new DominionDTO(id, owner, name, world, x1, y1, z1, x2, y2, z2, parentDomId,
+ rs.getString("join_message"),
+ rs.getString("leave_message"),
+ flags,
+ tp_location,
+ color
+ );
+ dominions.add(dominion);
}
return dominions;
}
@@ -111,33 +118,34 @@ public class DominionDTO {
}
public static DominionDTO insert(DominionDTO dominion) {
- StringBuilder sql = new StringBuilder("INSERT INTO dominion (" +
- "owner, name, world, x1, y1, z1, x2, y2, z2, ");
- for (Flag f : Flag.getAllDominionFlags()) {
- sql.append(f.getFlagName()).append(", ");
+ Field owner = new Field("owner", dominion.getOwner().toString());
+ Field name = new Field("name", dominion.getName());
+ Field world = new Field("world", dominion.getWorld());
+ Field x1 = new Field("x1", dominion.getX1());
+ Field y1 = new Field("y1", dominion.getY1());
+ Field z1 = new Field("z1", dominion.getZ1());
+ Field x2 = new Field("x2", dominion.getX2());
+ Field y2 = new Field("y2", dominion.getY2());
+ Field z2 = new Field("z2", dominion.getZ2());
+ Field parentDomId = new Field("parent_dom_id", dominion.getParentDomId());
+ Field joinMessage = new Field("join_message", "欢迎来到 ${DOM_NAME}!");
+ Field leaveMessage = new Field("leave_message", "你正在离开 ${DOM_NAME},欢迎下次光临~");
+ Field tpLocation = new Field("tp_location", "default");
+ InsertRow insert = new InsertRow().returningAll().table("dominion").onConflictDoNothing(new Field("id", null));
+ insert.field(owner).field(name).field(world).field(x1).field(y1).field(z1).field(x2).field(y2).field(z2)
+ .field(parentDomId).field(joinMessage).field(leaveMessage).field(tpLocation);
+ for (Flag f : Flag.getDominionFlagsEnabled()) {
+ insert.field(new Field(f.getFlagName(), f.getDefaultValue()));
}
- sql.append("tp_location, join_message, leave_message");
- sql.append(") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ");
- for (Flag f : Flag.getAllDominionFlags()) {
- sql.append(f.getDefaultValue()).append(", ");
+ try (ResultSet rs = insert.execute()) {
+ Cache.instance.loadDominions();
+ List dominions = getDTOFromRS(rs);
+ if (dominions.size() == 0) return null;
+ return dominions.get(0);
+ } catch (SQLException e) {
+ DatabaseManager.handleDatabaseError("数据库操作失败: ", e, insert.toString());
+ return null;
}
- sql.append("'default', ?, ?");
- sql.append(") RETURNING *;");
- List dominions = query(sql.toString(),
- dominion.getOwner(),
- dominion.getName(),
- dominion.getWorld(),
- dominion.getX1(),
- dominion.getY1(),
- dominion.getZ1(),
- dominion.getX2(),
- dominion.getY2(),
- dominion.getZ2(),
- "欢迎来到 ${DOM_NAME}!",
- "你正在离开 ${DOM_NAME},欢迎下次光临~"
- );
- if (dominions.size() == 0) return null;
- return dominions.get(0);
}
public static void delete(DominionDTO dominion) {
@@ -153,34 +161,36 @@ public class DominionDTO {
Location loc = dominion.getTpLocation();
tp_location = loc.getBlockX() + ":" + loc.getBlockY() + ":" + loc.getBlockZ();
}
- StringBuilder sql = new StringBuilder("UPDATE dominion SET " +
- "owner = ?," +
- "name = ?," +
- "world = ?," +
- "x1 = " + dominion.getX1() + ", " +
- "y1 = " + dominion.getY1() + ", " +
- "z1 = " + dominion.getZ1() + ", " +
- "x2 = " + dominion.getX2() + ", " +
- "y2 = " + dominion.getY2() + ", " +
- "z2 = " + dominion.getZ2() + ", " +
- "parent_dom_id = " + dominion.getParentDomId() + ", " +
- "join_message = ?," +
- "leave_message = ?," +
- "color = ?,");
+ Field owner = new Field("owner", dominion.getOwner().toString());
+ Field name = new Field("name", dominion.getName());
+ Field world = new Field("world", dominion.getWorld());
+ Field x1 = new Field("x1", dominion.getX1());
+ Field y1 = new Field("y1", dominion.getY1());
+ Field z1 = new Field("z1", dominion.getZ1());
+ Field x2 = new Field("x2", dominion.getX2());
+ Field y2 = new Field("y2", dominion.getY2());
+ Field z2 = new Field("z2", dominion.getZ2());
+ Field parentDomId = new Field("parent_dom_id", dominion.getParentDomId());
+ Field joinMessage = new Field("join_message", dominion.getJoinMessage());
+ Field leaveMessage = new Field("leave_message", dominion.getLeaveMessage());
+ Field tpLocation = new Field("tp_location", tp_location);
+ Field color = new Field("color", dominion.getColor());
+ Field id = new Field("id", dominion.getId());
+ UpdateRow update = new UpdateRow().returningAll(id).table("dominion").where("id = ?", id.value);
for (Flag f : Flag.getDominionFlagsEnabled()) {
- sql.append(f.getFlagName()).append(" = ").append(dominion.getFlagValue(f)).append(",");
+ update.field(new Field(f.getFlagName(), dominion.getFlagValue(f)));
+ }
+ update.field(owner).field(name).field(world).field(x1).field(y1).field(z1).field(x2).field(y2).field(z2)
+ .field(parentDomId).field(joinMessage).field(leaveMessage).field(tpLocation).field(color);
+ try {
+ List dominions = getDTOFromRS(update.execute());
+ Cache.instance.loadDominions();
+ if (dominions.size() == 0) return null;
+ return dominions.get(0);
+ } catch (SQLException e) {
+ DatabaseManager.handleDatabaseError("数据库操作失败: ", e, update.toString());
+ return null;
}
- sql.append("tp_location = ?" + " WHERE id = ").append(dominion.getId()).append(" RETURNING *;");
- List dominions = query(sql.toString(),
- dominion.getOwner().toString(),
- dominion.getName(),
- dominion.getWorld(),
- dominion.getJoinMessage(),
- dominion.getLeaveMessage(),
- dominion.getColor(),
- tp_location);
- if (dominions.size() == 0) return null;
- return dominions.get(0);
}
private DominionDTO(Integer id, UUID owner, String name, String world,
diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java
index 4825423..99d6eb1 100644
--- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java
+++ b/src/main/java/cn/lunadeer/dominion/dtos/PlayerDTO.java
@@ -1,10 +1,15 @@
package cn.lunadeer.dominion.dtos;
-import cn.lunadeer.dominion.Dominion;
+import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
+import cn.lunadeer.minecraftpluginutils.databse.Field;
+import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
+import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
import org.bukkit.entity.Player;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@@ -30,18 +35,24 @@ public class PlayerDTO {
private static List query(String sql, Object... params) {
List players = new ArrayList<>();
- try (ResultSet rs = Dominion.database.query(sql, params)) {
- if (rs == null) return players;
- while (rs.next()) {
- Integer id = rs.getInt("id");
- UUID uuid = UUID.fromString(rs.getString("uuid"));
- String lastKnownName = rs.getString("last_known_name");
- Long lastJoinAt = rs.getTimestamp("last_join_at").getTime();
- PlayerDTO player = new PlayerDTO(id, uuid, lastKnownName, lastJoinAt);
- players.add(player);
- }
+ try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
+ return getDTOFromRS(rs);
} catch (SQLException e) {
- Dominion.database.handleDatabaseError("查询玩家信息失败: ", e, sql);
+ DatabaseManager.handleDatabaseError("查询玩家信息失败: ", e, sql);
+ }
+ return players;
+ }
+
+ private static List getDTOFromRS(ResultSet rs) throws SQLException {
+ List players = new ArrayList<>();
+ if (rs == null) return players;
+ while (rs.next()) {
+ Integer id = rs.getInt("id");
+ UUID uuid = UUID.fromString(rs.getString("uuid"));
+ String lastKnownName = rs.getString("last_known_name");
+ Long lastJoinAt = rs.getTimestamp("last_join_at").getTime();
+ PlayerDTO player = new PlayerDTO(id, uuid, lastKnownName, lastJoinAt);
+ players.add(player);
}
return players;
}
@@ -72,24 +83,44 @@ public class PlayerDTO {
}
private static PlayerDTO insert(PlayerDTO player) {
- String sql = "INSERT INTO player_name (uuid, last_known_name, last_join_at) " +
- "VALUES" +
- " (?, ?, CURRENT_TIMESTAMP) " +
- "RETURNING *;";
- List players = query(sql, player.getUuid().toString(), player.getLastKnownName());
- if (players.size() == 0) return null;
- return players.get(0);
+ Field uuid = new Field("uuid", player.getUuid().toString());
+ Field lastKnownName = new Field("last_known_name", player.getLastKnownName());
+ Field lastJoinAt = new Field("last_join_at", Timestamp.valueOf(LocalDateTime.now()));
+ InsertRow insertRow = new InsertRow()
+ .table("player_name")
+ .field(uuid)
+ .field(lastKnownName)
+ .field(lastJoinAt)
+ .returningAll()
+ .onConflictOverwrite(new Field("id", null));
+ try (ResultSet rs = insertRow.execute()) {
+ List players = getDTOFromRS(rs);
+ if (players.size() == 0) return null;
+ return players.get(0);
+ } catch (SQLException e) {
+ DatabaseManager.handleDatabaseError("插入玩家信息失败: ", e, insertRow.toString());
+ return null;
+ }
}
private static PlayerDTO update(PlayerDTO player) {
- String sql = "UPDATE player_name SET " +
- "last_known_name = ?, " +
- "last_join_at = CURRENT_TIMESTAMP " +
- "WHERE uuid = ? " +
- "RETURNING *;";
- List players = query(sql, player.getLastKnownName(), player.getUuid().toString());
- if (players.size() == 0) return null;
- return players.get(0);
+ Field lastKnownName = new Field("last_known_name", player.getLastKnownName());
+ Field uuid = new Field("uuid", player.getUuid().toString());
+ Field lastJoinAt = new Field("last_join_at", Timestamp.valueOf(LocalDateTime.now()));
+ UpdateRow updateRow = new UpdateRow()
+ .table("player_name")
+ .field(lastKnownName)
+ .field(lastJoinAt)
+ .where("uuid = ?", uuid.value)
+ .returningAll(uuid);
+ try (ResultSet rs = updateRow.execute()) {
+ List players = getDTOFromRS(rs);
+ if (players.size() == 0) return null;
+ return players.get(0);
+ } catch (SQLException e) {
+ DatabaseManager.handleDatabaseError("更新玩家信息失败: ", e, updateRow.toString());
+ return null;
+ }
}
private PlayerDTO(Integer id, UUID uuid, String lastKnownName, Long lastJoinAt) {
diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java
index ec11ef1..1ffcbef 100644
--- a/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java
+++ b/src/main/java/cn/lunadeer/dominion/dtos/PlayerPrivilegeDTO.java
@@ -1,35 +1,84 @@
package cn.lunadeer.dominion.dtos;
import cn.lunadeer.dominion.Cache;
-import cn.lunadeer.dominion.Dominion;
+import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
+import cn.lunadeer.minecraftpluginutils.databse.Field;
+import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
+import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
import java.sql.ResultSet;
import java.util.*;
public class PlayerPrivilegeDTO {
+ private static List getDTOFromRS(ResultSet rs) {
+ List players = new ArrayList<>();
+ if (rs == null) return players;
+ try {
+ while (rs.next()) {
+ Map flags = new HashMap<>();
+ for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
+ flags.put(f, rs.getBoolean(f.getFlagName()));
+ }
+ PlayerPrivilegeDTO player = new PlayerPrivilegeDTO(
+ rs.getInt("id"),
+ UUID.fromString(rs.getString("player_uuid")),
+ rs.getBoolean("admin"),
+ rs.getInt("dom_id"),
+ flags
+ );
+ players.add(player);
+ }
+ } catch (Exception e) {
+ DatabaseManager.handleDatabaseError("查询玩家权限失败: ", e, "");
+ }
+ return players;
+ }
+
+ private static PlayerPrivilegeDTO update(PlayerPrivilegeDTO player) {
+ Field admin = new Field("admin", player.getAdmin());
+ Field domID = new Field("dom_id", player.getDomID());
+ Field id = new Field("id", player.getId());
+ UpdateRow updateRow = new UpdateRow().returningAll(id)
+ .table("player_privilege")
+ .field(admin)
+ .field(domID)
+ .where("id = ?", id.value);
+ for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
+ updateRow.field(new Field(f.getFlagName(), player.getFlagValue(f)));
+ }
+ try (ResultSet rs = updateRow.execute()) {
+ Cache.instance.loadPlayerPrivileges();
+ List players = getDTOFromRS(rs);
+ if (players.size() == 0) return null;
+ return players.get(0);
+ } catch (Exception e) {
+ DatabaseManager.handleDatabaseError("更新玩家权限失败: ", e, "");
+ return null;
+ }
+ }
+
public static PlayerPrivilegeDTO insert(PlayerPrivilegeDTO player) {
- StringBuilder sql = new StringBuilder("INSERT INTO player_privilege (player_uuid, admin, dom_id, ");
-
- for (Flag f : Flag.getAllPrivilegeFlags()) {
- sql.append(f.getFlagName()).append(", ");
+ Field playerUUID = new Field("player_uuid", player.getPlayerUUID().toString());
+ Field admin = new Field("admin", player.getAdmin());
+ Field domID = new Field("dom_id", player.getDomID());
+ InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null))
+ .table("player_privilege")
+ .field(playerUUID)
+ .field(admin)
+ .field(domID);
+ for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
+ insertRow.field(new Field(f.getFlagName(), player.getFlagValue(f)));
}
- sql = new StringBuilder(sql.substring(0, sql.length() - 2));
-
- sql.append(") VALUES ('")
- .append(player.getPlayerUUID()).append("', ")
- .append(player.getAdmin()).append(", ")
- .append(player.getDomID()).append(", ");
-
- for (Flag f : Flag.getAllPrivilegeFlags()) {
- sql.append(player.getFlagValue(f)).append(", ");
+ try (ResultSet rs = insertRow.execute()) {
+ Cache.instance.loadPlayerPrivileges();
+ List players = getDTOFromRS(rs);
+ if (players.size() == 0) return null;
+ return players.get(0);
+ } catch (Exception e) {
+ DatabaseManager.handleDatabaseError("插入玩家权限失败: ", e, "");
+ return null;
}
- sql = new StringBuilder(sql.substring(0, sql.length() - 2));
-
- sql.append(") RETURNING *;");
- List players = query(sql.toString());
- if (players.size() == 0) return null;
- return players.get(0);
}
public static PlayerPrivilegeDTO select(UUID playerUUID, Integer dom_id) {
@@ -125,44 +174,16 @@ public class PlayerPrivilegeDTO {
private static List query(String sql, Object... params) {
List players = new ArrayList<>();
- try (ResultSet rs = Dominion.database.query(sql, params)) {
+ try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
if (sql.contains("UPDATE") || sql.contains("DELETE") || sql.contains("INSERT")) {
// 如果是更新操作,重新加载缓存
Cache.instance.loadPlayerPrivileges();
}
- if (rs == null) return players;
- while (rs.next()) {
- Map flags = new HashMap<>();
- for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
- flags.put(f, rs.getBoolean(f.getFlagName()));
- }
- PlayerPrivilegeDTO player = new PlayerPrivilegeDTO(
- rs.getInt("id"),
- UUID.fromString(rs.getString("player_uuid")),
- rs.getBoolean("admin"),
- rs.getInt("dom_id"),
- flags
- );
- players.add(player);
- }
+ return getDTOFromRS(rs);
} catch (Exception e) {
- Dominion.database.handleDatabaseError("查询玩家权限失败: ", e, sql);
+ DatabaseManager.handleDatabaseError("查询玩家权限失败: ", e, sql);
}
return players;
}
- private static PlayerPrivilegeDTO update(PlayerPrivilegeDTO player) {
- String sql = "UPDATE player_privilege SET " +
- "admin = " + player.getAdmin() + ", " +
- "dom_id = " + player.getDomID() + ", ";
- for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
- sql += f.getFlagName() + " = " + player.getFlagValue(f) + ", ";
- }
- sql = sql.substring(0, sql.length() - 2);
- sql += " WHERE id = " + player.getId() + " " +
- "RETURNING *;";
- List players = query(sql);
- if (players.size() == 0) return null;
- return players.get(0);
- }
}
diff --git a/src/main/java/cn/lunadeer/dominion/dtos/PrivilegeTemplateDTO.java b/src/main/java/cn/lunadeer/dominion/dtos/PrivilegeTemplateDTO.java
index 67484e7..b12e1ad 100644
--- a/src/main/java/cn/lunadeer/dominion/dtos/PrivilegeTemplateDTO.java
+++ b/src/main/java/cn/lunadeer/dominion/dtos/PrivilegeTemplateDTO.java
@@ -1,6 +1,9 @@
package cn.lunadeer.dominion.dtos;
-import cn.lunadeer.dominion.Dominion;
+import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
+import cn.lunadeer.minecraftpluginutils.databse.Field;
+import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
+import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
import java.sql.ResultSet;
import java.util.*;
@@ -9,8 +12,18 @@ public class PrivilegeTemplateDTO {
private static List query(String sql, Object... params) {
List templates = new ArrayList<>();
- try (ResultSet rs = Dominion.database.query(sql, params)) {
- if (rs == null) return templates;
+ try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
+ return getDTOFromRS(rs);
+ } catch (Exception e) {
+ DatabaseManager.handleDatabaseError("查询权限模版失败: ", e, sql);
+ }
+ return templates;
+ }
+
+ private static List getDTOFromRS(ResultSet rs) {
+ List templates = new ArrayList<>();
+ if (rs == null) return templates;
+ try {
while (rs.next()) {
Map flags = new HashMap<>();
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
@@ -26,16 +39,26 @@ public class PrivilegeTemplateDTO {
templates.add(template);
}
} catch (Exception e) {
- Dominion.database.handleDatabaseError("查询权限模版失败: ", e, sql);
+ DatabaseManager.handleDatabaseError("查询权限模版失败: ", e, null);
}
return templates;
}
public static PrivilegeTemplateDTO create(UUID creator, String name) {
- String sql = "INSERT INTO privilege_template (creator, name) VALUES (?, ?) RETURNING *;";
- List templates = query(sql, creator.toString(), name);
- if (templates.size() == 0) return null;
- return templates.get(0);
+ Field creatorField = new Field("creator", creator.toString());
+ Field nameField = new Field("name", name);
+ InsertRow insertRow = new InsertRow().table("privilege_template").onConflictDoNothing(new Field("id", null))
+ .field(creatorField)
+ .field(nameField)
+ .returningAll();
+ try (ResultSet rs = insertRow.execute()) {
+ List templates = getDTOFromRS(rs);
+ if (templates.size() == 0) return null;
+ return templates.get(0);
+ } catch (Exception e) {
+ DatabaseManager.handleDatabaseError("创建权限模版失败: ", e, null);
+ return null;
+ }
}
public static PrivilegeTemplateDTO select(UUID creator, String name) {
@@ -102,16 +125,25 @@ public class PrivilegeTemplateDTO {
}
private static PrivilegeTemplateDTO update(PrivilegeTemplateDTO template) {
- StringBuilder sql = new StringBuilder("UPDATE privilege_template SET " +
- "name = ?, " +
- "admin = ?, ");
+ Field name = new Field("name", template.getName());
+ Field admin = new Field("admin", template.getAdmin());
+ Field id = new Field("id", template.getId());
+ UpdateRow updateRow = new UpdateRow().table("privilege_template")
+ .field(name)
+ .field(admin)
+ .returningAll(id)
+ .where("id = ?", id.value);
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
- sql.append(f.getFlagName()).append(" = ").append(template.getFlagValue(f)).append(", ");
+ updateRow.field(new Field(f.getFlagName(), template.getFlagValue(f)));
+ }
+ try (ResultSet rs = updateRow.execute()) {
+ List templates = getDTOFromRS(rs);
+ if (templates.size() == 0) return null;
+ return templates.get(0);
+ } catch (Exception e) {
+ DatabaseManager.handleDatabaseError("更新权限模版失败: ", e, updateRow.toString());
+ return null;
}
- sql = new StringBuilder(sql.substring(0, sql.length() - 2) + " WHERE id = ? RETURNING *;");
- List templates = query(sql.toString(), template.getName(), template.getAdmin(), template.getId());
- if (templates.size() == 0) return null;
- return templates.get(0);
}
}
diff --git a/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java b/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java
index 4d87c8a..f141507 100644
--- a/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java
+++ b/src/main/java/cn/lunadeer/dominion/managers/DatabaseTables.java
@@ -11,9 +11,9 @@ import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
public class DatabaseTables {
public static void migrate() {
// player name
- 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_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
+ TableColumn player_name_uuid = new TableColumn("uuid", FieldType.STRING, false, false, true, true, "''");
+ TableColumn player_name_last_known_name = new TableColumn("last_known_name", FieldType.STRING, false, false, true, false, "'unknown'");
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")
@@ -24,16 +24,16 @@ public class DatabaseTables {
player_name.execute();
// dominion table
- 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_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
+ TableColumn dominion_owner = new TableColumn("owner", FieldType.STRING, false, false, true, false, "''");
+ TableColumn dominion_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'");
+ TableColumn dominion_world = new TableColumn("world", FieldType.STRING, false, false, true, false, "'world'");
+ TableColumn dominion_x1 = new TableColumn("x1", FieldType.INT, false, false, true, false, 0);
+ TableColumn dominion_y1 = new TableColumn("y1", FieldType.INT, false, false, true, false, 0);
+ TableColumn dominion_z1 = new TableColumn("z1", FieldType.INT, false, false, true, false, 0);
+ TableColumn dominion_x2 = new TableColumn("x2", FieldType.INT, false, false, true, false, 0);
+ TableColumn dominion_y2 = new TableColumn("y2", FieldType.INT, false, false, true, false, 0);
+ TableColumn dominion_z2 = new TableColumn("z2", FieldType.INT, false, false, true, false, 0);
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, "'再见'");
@@ -59,9 +59,9 @@ public class DatabaseTables {
dominion.execute();
// player privilege
- 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_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
+ TableColumn player_privilege_player_uuid = new TableColumn("player_uuid", FieldType.STRING, false, false, true, false, "''");
+ TableColumn player_privilege_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1);
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);
@@ -74,7 +74,7 @@ public class DatabaseTables {
.foreignKey(player_privilege_player_uuid_fk)
.foreignKey(player_privilege_dom_id_fk)
.unique(player_privilege_player_uuid, player_privilege_dom_id);
- player_name.execute();
+ player_privilege.execute();
// server root player name
Field server_player_name_id_field = new Field("id", -1);
@@ -131,9 +131,9 @@ public class DatabaseTables {
new AddColumn(dominion_tp_location).table("dominion").ifNotExists().execute();
// 1.31.0
- 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_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
+ TableColumn privilege_template_creator = new TableColumn("creator", FieldType.STRING, false, false, true, false, "''");
+ TableColumn privilege_template_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'未命名'");
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();