初步实现mysql适配

This commit is contained in:
zhangyuheng 2024-06-19 21:01:20 +08:00
parent 7a6798bed1
commit cac0b91734
6 changed files with 292 additions and 198 deletions

View File

@ -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>

View File

@ -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,

View File

@ -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) {

View File

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

View File

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

View File

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