mirror of
https://github.com/ColdeZhang/Dominion.git
synced 2024-10-18 23:16:42 +08:00
初步实现mysql适配
This commit is contained in:
parent
7a6798bed1
commit
cac0b91734
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>cn.lunadeer</groupId>
|
||||
<artifactId>Dominion</artifactId>
|
||||
<version>1.33.0-beta</version>
|
||||
<version>1.33.1-beta</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Dominion</name>
|
||||
|
@ -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<DominionDTO> 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<Flag, Boolean> 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<DominionDTO> getDTOFromRS(ResultSet rs) throws SQLException {
|
||||
List<DominionDTO> 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<Flag, Boolean> 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<DominionDTO> 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<DominionDTO> 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<DominionDTO> 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<DominionDTO> 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,
|
||||
|
@ -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<PlayerDTO> query(String sql, Object... params) {
|
||||
List<PlayerDTO> 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<PlayerDTO> getDTOFromRS(ResultSet rs) throws SQLException {
|
||||
List<PlayerDTO> 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<PlayerDTO> 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<PlayerDTO> 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<PlayerDTO> 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<PlayerDTO> 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) {
|
||||
|
@ -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<PlayerPrivilegeDTO> getDTOFromRS(ResultSet rs) {
|
||||
List<PlayerPrivilegeDTO> players = new ArrayList<>();
|
||||
if (rs == null) return players;
|
||||
try {
|
||||
while (rs.next()) {
|
||||
Map<Flag, Boolean> 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<PlayerPrivilegeDTO> 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<PlayerPrivilegeDTO> 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<PlayerPrivilegeDTO> 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<PlayerPrivilegeDTO> query(String sql, Object... params) {
|
||||
List<PlayerPrivilegeDTO> 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<Flag, Boolean> 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<PlayerPrivilegeDTO> players = query(sql);
|
||||
if (players.size() == 0) return null;
|
||||
return players.get(0);
|
||||
}
|
||||
}
|
||||
|
@ -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<PrivilegeTemplateDTO> query(String sql, Object... params) {
|
||||
List<PrivilegeTemplateDTO> 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<PrivilegeTemplateDTO> getDTOFromRS(ResultSet rs) {
|
||||
List<PrivilegeTemplateDTO> templates = new ArrayList<>();
|
||||
if (rs == null) return templates;
|
||||
try {
|
||||
while (rs.next()) {
|
||||
Map<Flag, Boolean> 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<PrivilegeTemplateDTO> 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<PrivilegeTemplateDTO> 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<PrivilegeTemplateDTO> 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<PrivilegeTemplateDTO> templates = query(sql.toString(), template.getName(), template.getAdmin(), template.getId());
|
||||
if (templates.size() == 0) return null;
|
||||
return templates.get(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user