From 31a1d409b77aef1a8508ed715072dd9b2386f973 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Thu, 18 Jul 2024 17:14:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9Spigot=E8=BF=9B=E8=A1=8C=E4=BA=86?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 +- .../lunadeer/miniplayertitle/Expansion.java | 2 - .../miniplayertitle/MiniPlayerTitle.java | 19 +- .../miniplayertitle/commands/Apis.java | 37 +-- .../miniplayertitle/dtos/PlayerInfoDTO.java | 61 ++--- .../miniplayertitle/dtos/PlayerTitleDTO.java | 42 ++-- .../miniplayertitle/dtos/TitleDTO.java | 64 ++--- .../miniplayertitle/dtos/TitleShopDTO.java | 66 ++--- .../miniplayertitle/{ => events}/Events.java | 20 +- .../miniplayertitle/events/PaperChat.java | 25 ++ .../miniplayertitle/events/SpigotChat.java | 21 ++ .../miniplayertitle/utils/DatabaseTables.java | 226 +++++++++++------- 12 files changed, 348 insertions(+), 239 deletions(-) rename src/main/java/cn/lunadeer/miniplayertitle/{ => events}/Events.java (64%) create mode 100644 src/main/java/cn/lunadeer/miniplayertitle/events/PaperChat.java create mode 100644 src/main/java/cn/lunadeer/miniplayertitle/events/SpigotChat.java diff --git a/pom.xml b/pom.xml index 3a03b84..7c15b1f 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer MiniPlayerTitle - 4.3.2 + 4.4.0 jar MiniPlayerTitle @@ -82,7 +82,7 @@ cn.lunadeer MinecraftPluginUtils - 1.3.2-SNAPSHOT + 1.3.4-SNAPSHOT me.clip diff --git a/src/main/java/cn/lunadeer/miniplayertitle/Expansion.java b/src/main/java/cn/lunadeer/miniplayertitle/Expansion.java index 0740894..0b1365f 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/Expansion.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/Expansion.java @@ -1,8 +1,6 @@ package cn.lunadeer.miniplayertitle; import cn.lunadeer.minecraftpluginutils.XLogger; -import cn.lunadeer.miniplayertitle.dtos.PlayerInfoDTO; -import cn.lunadeer.miniplayertitle.dtos.PlayerTitleDTO; import cn.lunadeer.miniplayertitle.dtos.TitleDTO; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.ChatColor; diff --git a/src/main/java/cn/lunadeer/miniplayertitle/MiniPlayerTitle.java b/src/main/java/cn/lunadeer/miniplayertitle/MiniPlayerTitle.java index a5770c1..7463b8b 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/MiniPlayerTitle.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/MiniPlayerTitle.java @@ -1,7 +1,12 @@ package cn.lunadeer.miniplayertitle; import cn.lunadeer.minecraftpluginutils.*; +import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager; +import cn.lunadeer.minecraftpluginutils.databse.DatabaseType; import cn.lunadeer.miniplayertitle.dtos.TitleDTO; +import cn.lunadeer.miniplayertitle.events.Events; +import cn.lunadeer.miniplayertitle.events.PaperChat; +import cn.lunadeer.miniplayertitle.events.SpigotChat; import cn.lunadeer.miniplayertitle.utils.ConfigManager; import cn.lunadeer.miniplayertitle.utils.DatabaseTables; import org.bukkit.Bukkit; @@ -23,8 +28,8 @@ public final class MiniPlayerTitle extends JavaPlugin { new XLogger(instance); config = new ConfigManager(instance); XLogger.setDebug(config.isDebug()); - database = new DatabaseManager(this, - DatabaseManager.TYPE.valueOf(config.getDbType().toUpperCase()), + new DatabaseManager(this, + DatabaseType.valueOf(config.getDbType().toUpperCase()), config.getDbHost(), config.getDbPort(), config.getDbName(), @@ -41,6 +46,11 @@ public final class MiniPlayerTitle extends JavaPlugin { } Bukkit.getPluginManager().registerEvents(new Events(), this); + if (Common.isPaper()) { + Bukkit.getPluginManager().registerEvents(new PaperChat(), this); + } else { + Bukkit.getPluginManager().registerEvents(new SpigotChat(), this); + } Objects.requireNonNull(Bukkit.getPluginCommand("MiniPlayerTitle")).setExecutor(new Commands()); Objects.requireNonNull(Bukkit.getPluginCommand("MiniPlayerTitle")).setTabCompleter(new Commands()); @@ -53,7 +63,7 @@ public final class MiniPlayerTitle extends JavaPlugin { } XLogger.info("称号插件已加载"); - XLogger.info("版本: " + getPluginMeta().getVersion()); + XLogger.info("版本: " + this.getDescription().getVersion()); // http://patorjk.com/software/taag/#p=display&f=Big&t=MiniPlayerTitle XLogger.info(" __ __ _ _ _____ _ _______ _ _ _"); XLogger.info(" | \\/ (_) (_) __ \\| | |__ __(_) | | |"); @@ -68,12 +78,11 @@ public final class MiniPlayerTitle extends JavaPlugin { @Override public void onDisable() { // Plugin shutdown logic - database.close(); + DatabaseManager.instance.close(); } public static MiniPlayerTitle instance; public static ConfigManager config; - public static DatabaseManager database; private GiteaReleaseCheck giteaReleaseCheck; private Map playerUsingTitle = new HashMap<>(); diff --git a/src/main/java/cn/lunadeer/miniplayertitle/commands/Apis.java b/src/main/java/cn/lunadeer/miniplayertitle/commands/Apis.java index 38d7964..e432432 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/commands/Apis.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/commands/Apis.java @@ -1,10 +1,10 @@ package cn.lunadeer.miniplayertitle.commands; -import cn.lunadeer.minecraftpluginutils.Notification; +import cn.lunadeer.minecraftpluginutils.Common; import cn.lunadeer.miniplayertitle.MiniPlayerTitle; import cn.lunadeer.miniplayertitle.dtos.TitleDTO; import net.kyori.adventure.text.Component; -import org.bukkit.command.CommandSender; +import org.bukkit.ChatColor; import org.bukkit.entity.Player; import javax.annotation.Nullable; @@ -19,29 +19,30 @@ public class Apis { if (usingPapi()) { return; } - if (title == null || title.getId() == -1) { + + Component titleComponent = Component.text(""); + String titleBukkit = ""; + + if (title != null && title.getId() != -1) { + titleComponent = title.getTitleColored(); + titleBukkit = ChatColor.translateAlternateColorCodes('&', title.getTitleColoredBukkit()); + } + + if (Common.isPaper()) { Component newDisplayName = Component.text() + .append(titleComponent) .append(Component.text("<")) .append(player.name()) - .append(Component.text("> ")).build(); + .append(Component.text(">")).build(); Component newListName = Component.text() + .append(titleComponent) + .append(Component.text(" ")) .append(player.name()).build(); player.displayName(newDisplayName); player.playerListName(newListName); - return; + } else { + player.setDisplayName(titleBukkit + "<" + player.getName() + ">"); + player.setPlayerListName(titleBukkit + " " + player.getName()); } - - Component titleComponent = title.getTitleColored(); - Component newDisplayName = Component.text() - .append(titleComponent) - .append(Component.text("<")) - .append(player.name()) - .append(Component.text(">")).build(); - Component newListName = Component.text() - .append(titleComponent) - .append(Component.text(" ")) - .append(player.name()).build(); - player.displayName(newDisplayName); - player.playerListName(newListName); } } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerInfoDTO.java b/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerInfoDTO.java index a9fb5f0..8a6ba61 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerInfoDTO.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerInfoDTO.java @@ -2,6 +2,9 @@ package cn.lunadeer.miniplayertitle.dtos; import cn.lunadeer.minecraftpluginutils.VaultConnect; import cn.lunadeer.minecraftpluginutils.XLogger; +import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager; +import cn.lunadeer.minecraftpluginutils.databse.Field; +import cn.lunadeer.minecraftpluginutils.databse.FieldType; import cn.lunadeer.miniplayertitle.MiniPlayerTitle; import org.bukkit.entity.Player; @@ -12,20 +15,22 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; +import static cn.lunadeer.minecraftpluginutils.databse.DatabaseManager.handleDatabaseError; + public class PlayerInfoDTO { - private UUID uuid; - private Double coin; + private final Field uuid = new Field("uuid", FieldType.UUID); + private final Field coin = new Field("coin_d", FieldType.DOUBLE); private TitleDTO using_title; - private String last_use_name; + private final Field last_use_name = new Field("last_use_name", FieldType.STRING); public static PlayerInfoDTO get(UUID uuid) { String sql = ""; sql = "SELECT uuid, coin_d, using_title_id, last_use_name FROM mplt_player_info WHERE uuid = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, uuid)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, uuid)) { if (rs.next()) return getPlayerInfoDTO(rs); else return null; } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("获取玩家信息失败", e, sql); + handleDatabaseError("获取玩家信息失败", e, sql); } return null; } @@ -51,11 +56,11 @@ public class PlayerInfoDTO { public static PlayerInfoDTO get(String name) { String sql = ""; sql = "SELECT uuid, coin_d, using_title_id, last_use_name FROM mplt_player_info WHERE last_use_name = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, name)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, name)) { if (rs.next()) return getPlayerInfoDTO(rs); else return null; } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("获取玩家信息失败", e, sql); + handleDatabaseError("获取玩家信息失败", e, sql); } return null; } @@ -65,10 +70,10 @@ public class PlayerInfoDTO { sql = "INSERT INTO mplt_player_info (uuid, coin_d, last_use_name) " + "VALUES (?, ?, ?) " + "ON CONFLICT DO NOTHING;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, player.getUniqueId(), MiniPlayerTitle.config.getDefaultCoin(), player.getName())) { + try (ResultSet rs = DatabaseManager.instance.query(sql, player.getUniqueId(), MiniPlayerTitle.config.getDefaultCoin(), player.getName())) { return get(player.getUniqueId()); } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("创建玩家信息失败", e, sql); + handleDatabaseError("创建玩家信息失败", e, sql); } return null; } @@ -76,29 +81,29 @@ public class PlayerInfoDTO { private static PlayerInfoDTO updateName(Player player) { String sql = ""; sql = "UPDATE mplt_player_info SET last_use_name = ? WHERE uuid = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, player.getName(), player.getUniqueId())) { + try (ResultSet rs = DatabaseManager.instance.query(sql, player.getName(), player.getUniqueId())) { return get(player.getUniqueId()); } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("更新玩家名称失败", e, sql); + handleDatabaseError("更新玩家名称失败", e, sql); } return null; } private static PlayerInfoDTO getPlayerInfoDTO(ResultSet rs) throws SQLException { PlayerInfoDTO playerInfoDTO = new PlayerInfoDTO(); - playerInfoDTO.uuid = UUID.fromString(rs.getString("uuid")); - playerInfoDTO.coin = rs.getDouble("coin_d"); + playerInfoDTO.uuid.value = UUID.fromString(rs.getString("uuid")); + playerInfoDTO.coin.value = rs.getDouble("coin_d"); playerInfoDTO.using_title = TitleDTO.get(rs.getInt("using_title_id")); - playerInfoDTO.last_use_name = rs.getString("last_use_name"); + playerInfoDTO.last_use_name.value = rs.getString("last_use_name"); return playerInfoDTO; } public Double getCoin() { if (MiniPlayerTitle.config.isExternalEco()) { - Player player = MiniPlayerTitle.instance.getServer().getPlayer(uuid); + Player player = MiniPlayerTitle.instance.getServer().getPlayer(getUuid()); return VaultConnect.instance.getBalance(player); } - return coin; + return (Double) coin.value; } public TitleDTO getUsingTitle() { @@ -106,37 +111,37 @@ public class PlayerInfoDTO { } public String getLastUseName() { - return last_use_name; + return (String) last_use_name.value; } public UUID getUuid() { - return uuid; + return (UUID) uuid.value; } public boolean setUsingTitle(@Nullable TitleDTO title) { String sql = ""; sql = "UPDATE mplt_player_info SET using_title_id = ? WHERE uuid = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, title == null ? -1 : title.getId(), uuid)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, title == null ? -1 : title.getId(), getUuid())) { this.using_title = title == null ? TitleDTO.get(-1) : title; return true; } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("设置玩家使用称号失败", e, sql); + handleDatabaseError("设置玩家使用称号失败", e, sql); } return false; } public boolean addCoin(double coin) { if (MiniPlayerTitle.config.isExternalEco()) { - Player player = MiniPlayerTitle.instance.getServer().getPlayer(uuid); + Player player = MiniPlayerTitle.instance.getServer().getPlayer(getUuid()); VaultConnect.instance.depositPlayer(player, coin); return true; } - return setCoin(this.coin + coin); + return setCoin(getCoin() + coin); } public boolean setCoin(double coin) { if (MiniPlayerTitle.config.isExternalEco()) { - Player player = MiniPlayerTitle.instance.getServer().getPlayer(uuid); + Player player = MiniPlayerTitle.instance.getServer().getPlayer(getUuid()); double balance = VaultConnect.instance.getBalance(player); if (balance < coin) { VaultConnect.instance.depositPlayer(player, coin - balance); @@ -147,11 +152,11 @@ public class PlayerInfoDTO { } String sql = ""; sql = "UPDATE mplt_player_info SET coin_d = ? WHERE uuid = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, coin, uuid)) { - this.coin = coin; + try (ResultSet rs = DatabaseManager.instance.query(sql, coin, getUuid())) { + this.coin.value = coin; return true; } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("设置玩家金币失败", e, sql); + handleDatabaseError("设置玩家金币失败", e, sql); } return false; } @@ -160,12 +165,12 @@ public class PlayerInfoDTO { String sql = ""; sql = "SELECT last_use_name FROM mplt_player_info;"; List names = new ArrayList<>(); - try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { + try (ResultSet rs = DatabaseManager.instance.query(sql)) { while (rs.next()) { names.add(rs.getString("last_use_name")); } } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("获取玩家名称列表失败", e, sql); + handleDatabaseError("获取玩家名称列表失败", e, sql); } return names; } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerTitleDTO.java b/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerTitleDTO.java index 8e153e8..5bab17f 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerTitleDTO.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerTitleDTO.java @@ -1,6 +1,8 @@ package cn.lunadeer.miniplayertitle.dtos; -import cn.lunadeer.miniplayertitle.MiniPlayerTitle; +import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager; +import cn.lunadeer.minecraftpluginutils.databse.Field; +import cn.lunadeer.minecraftpluginutils.databse.FieldType; import javax.annotation.Nullable; import java.sql.ResultSet; @@ -10,14 +12,16 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; +import static cn.lunadeer.minecraftpluginutils.databse.DatabaseManager.handleDatabaseError; + public class PlayerTitleDTO { - private Integer id; - private UUID player_uuid; + private final Field id = new Field("id", FieldType.INT); + private final Field player_uuid = new Field("player_uuid", FieldType.UUID); private TitleDTO title; private LocalDateTime expire_at; public Integer getId() { - return id; + return (Integer) id.value; } public TitleDTO getTitle() { @@ -25,7 +29,7 @@ public class PlayerTitleDTO { } public UUID getPlayerUuid() { - return player_uuid; + return (UUID) player_uuid.value; } public LocalDateTime getExpireAt() { @@ -35,14 +39,14 @@ public class PlayerTitleDTO { public boolean setExpireAt(LocalDateTime dateTime) { String sql = ""; if (dateTime == null) { - sql += "UPDATE mplt_player_title SET expire_at_y = -1, expire_at_m = -1, expire_at_d = -1 WHERE id = " + id + ";"; + sql += "UPDATE mplt_player_title SET expire_at_y = -1, expire_at_m = -1, expire_at_d = -1 WHERE id = " + getId() + ";"; } else { - sql += "UPDATE mplt_player_title SET expire_at_y = " + dateTime.getYear() + ", expire_at_m = " + dateTime.getMonthValue() + ", expire_at_d = " + dateTime.getDayOfMonth() + " WHERE id = " + id + ";"; + sql += "UPDATE mplt_player_title SET expire_at_y = " + dateTime.getYear() + ", expire_at_m = " + dateTime.getMonthValue() + ", expire_at_d = " + dateTime.getDayOfMonth() + " WHERE id = " + getId() + ";"; } - try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { + try (ResultSet rs = DatabaseManager.instance.query(sql)) { return true; } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("设置玩家称号过期时间失败", e, sql); + handleDatabaseError("设置玩家称号过期时间失败", e, sql); } return false; } @@ -58,12 +62,12 @@ public class PlayerTitleDTO { } sql += "RETURNING " + "id, player_uuid, title_id, expire_at_y, expire_at_m, expire_at_d;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, player_uuid, title.getId())) { + try (ResultSet rs = DatabaseManager.instance.query(sql, player_uuid, title.getId())) { if (rs.next()) { return getRs(rs); } } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("创建玩家称号失败", e, sql); + handleDatabaseError("创建玩家称号失败", e, sql); } return null; } @@ -72,12 +76,12 @@ public class PlayerTitleDTO { String sql = ""; sql += "SELECT id, player_uuid, title_id, expire_at_y, expire_at_m, expire_at_d FROM mplt_player_title " + "WHERE id = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, id)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, id)) { if (rs.next()) { return getRs(rs); } } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("获取玩家称号失败", e, sql); + handleDatabaseError("获取玩家称号失败", e, sql); } return null; } @@ -86,20 +90,20 @@ public class PlayerTitleDTO { String sql = ""; sql += "SELECT id, player_uuid, title_id, expire_at_y, expire_at_m, expire_at_d FROM mplt_player_title " + "WHERE player_uuid = ? AND title_id = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, player, title)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, player, title)) { if (rs.next()) { return getRs(rs); } } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("获取玩家称号失败", e, sql); + handleDatabaseError("获取玩家称号失败", e, sql); } return null; } private static PlayerTitleDTO getRs(ResultSet rs) throws SQLException { PlayerTitleDTO playerTitle = new PlayerTitleDTO(); - playerTitle.id = rs.getInt("id"); - playerTitle.player_uuid = UUID.fromString(rs.getString("player_uuid")); + playerTitle.id.value = rs.getInt("id"); + playerTitle.player_uuid.value = UUID.fromString(rs.getString("player_uuid")); playerTitle.title = TitleDTO.get(rs.getInt("title_id")); int y = rs.getInt("expire_at_y"); int m = rs.getInt("expire_at_m"); @@ -117,12 +121,12 @@ public class PlayerTitleDTO { sql += "SELECT id, player_uuid, title_id, expire_at_y, expire_at_m, expire_at_d FROM mplt_player_title " + "WHERE player_uuid = ?;"; List playerTitles = new ArrayList<>(); - try (ResultSet rs = MiniPlayerTitle.database.query(sql, player_uuid)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, player_uuid)) { while (rs.next()) { playerTitles.add(getRs(rs)); } } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("获取玩家称号失败", e, sql); + handleDatabaseError("获取玩家称号失败", e, sql); } return playerTitles; } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleDTO.java b/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleDTO.java index 59f01c7..a0d7ac0 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleDTO.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleDTO.java @@ -1,6 +1,9 @@ package cn.lunadeer.miniplayertitle.dtos; import cn.lunadeer.minecraftpluginutils.XLogger; +import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager; +import cn.lunadeer.minecraftpluginutils.databse.Field; +import cn.lunadeer.minecraftpluginutils.databse.FieldType; import cn.lunadeer.miniplayertitle.Color; import cn.lunadeer.miniplayertitle.MiniPlayerTitle; import net.kyori.adventure.text.Component; @@ -14,18 +17,21 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import static cn.lunadeer.minecraftpluginutils.databse.DatabaseManager.handleDatabaseError; + public class TitleDTO { - private int id; - private String title; - private String description; + private final Field id = new Field("id", FieldType.INT); + private final Field title = new Field("title", FieldType.STRING); + private final Field description = new Field("description", FieldType.STRING); + public static TitleDTO get(int id) { String sql = ""; sql += "SELECT id, title, description FROM mplt_title WHERE id = " + id + ";"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { + try (ResultSet rs = DatabaseManager.instance.query(sql)) { if (rs.next()) return getTitleDTO(rs); } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("获取称号失败", e, sql); + handleDatabaseError("获取称号失败", e, sql); } return null; } @@ -36,10 +42,10 @@ public class TitleDTO { "VALUES (?, ?) " + "RETURNING " + "id, title, description;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, title, description)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, title, description)) { if (rs.next()) return getTitleDTO(rs); } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("创建称号失败", e, sql); + handleDatabaseError("创建称号失败", e, sql); } return null; } @@ -49,12 +55,12 @@ public class TitleDTO { String deleteSql = "DELETE FROM mplt_title WHERE id = ?;"; try { // 执行更新操作 - MiniPlayerTitle.database.query(updateSql, this.id); + DatabaseManager.instance.query(updateSql, getId()); // 执行删除操作 - MiniPlayerTitle.database.query(deleteSql, this.id); + DatabaseManager.instance.query(deleteSql, getId()); return true; } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("删除称号失败", e, updateSql + " " + deleteSql); + handleDatabaseError("删除称号失败", e, updateSql + " " + deleteSql); return false; } } @@ -63,12 +69,12 @@ public class TitleDTO { String sql = ""; sql += "SELECT id, title, description FROM mplt_title;"; List titleDTOs = new ArrayList<>(); - try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { + try (ResultSet rs = DatabaseManager.instance.query(sql)) { while (rs.next()) { titleDTOs.add(getTitleDTO(rs)); } } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("获取称号列表失败", e, sql); + handleDatabaseError("获取称号列表失败", e, sql); } return titleDTOs; } @@ -76,7 +82,7 @@ public class TitleDTO { public TextComponent getTitleColored() { TextComponent prefix = Component.text(MiniPlayerTitle.config.getPrefix(), new Color("#ffffff").getStyle()); TextComponent suffix = Component.text(MiniPlayerTitle.config.getSuffix(), new Color("#ffffff").getStyle()); - String[] parts = this.title.split("&#"); + String[] parts = getTitleRaw().split("&#"); List components = new ArrayList<>(); components.add(prefix); for (String part : parts) { @@ -99,7 +105,7 @@ public class TitleDTO { for (TextComponent component : components) { title_component.append(component); } - return title_component.build().hoverEvent(HoverEvent.hoverEvent(HoverEvent.Action.SHOW_TEXT, Component.text(this.description))); + return title_component.build().hoverEvent(HoverEvent.hoverEvent(HoverEvent.Action.SHOW_TEXT, Component.text(getDescription()))); } /** @@ -110,7 +116,7 @@ public class TitleDTO { * @return String */ public String getTitleColoredBukkit() { - String title = "&f" + MiniPlayerTitle.config.getPrefix() + this.title + "&f" + MiniPlayerTitle.config.getSuffix(); + String title = "&f" + MiniPlayerTitle.config.getPrefix() + getTitleRaw() + "&f" + MiniPlayerTitle.config.getSuffix(); title = title.replaceAll("&#", "#"); Pattern pattern = Pattern.compile("#[a-fA-F0-9]{6}"); Matcher matcher = pattern.matcher(title); @@ -127,7 +133,7 @@ public class TitleDTO { } public String getTitlePlainText() { - String[] parts = this.title.split("&#"); + String[] parts = getTitleRaw().split("&#"); StringBuilder res = new StringBuilder(); for (String part : parts) { if (part.isEmpty()) { @@ -145,23 +151,27 @@ public class TitleDTO { } public Integer getId() { - return this.id; + return (Integer) this.id.value; } public String getDescription() { - return this.description; + return (String) this.description.value; + } + + public String getTitleRaw() { + return (String) this.title.value; } public boolean updateTitle(String title) { String sql = ""; sql += "UPDATE mplt_title SET title = ? WHERE id = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, title, this.id)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, title, getId())) { if (rs != null && rs.next()) { - this.title = title; + this.title.value = title; return true; } } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("更新称号失败", e, sql); + handleDatabaseError("更新称号失败", e, sql); } return false; } @@ -169,22 +179,22 @@ public class TitleDTO { public boolean updateDescription(String description) { String sql = ""; sql += "UPDATE mplt_title SET description = ? WHERE id = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, description, this.id)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, description, getId())) { if (rs != null && rs.next()) { - this.description = description; + this.description.value = description; return true; } } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("更新称号失败", e, sql); + handleDatabaseError("更新称号失败", e, sql); } return false; } private static TitleDTO getTitleDTO(ResultSet rs) throws SQLException { TitleDTO titleDTO = new TitleDTO(); - titleDTO.id = rs.getInt("id"); - titleDTO.title = rs.getString("title"); - titleDTO.description = rs.getString("description"); + titleDTO.id.value = rs.getInt("id"); + titleDTO.title.value = rs.getString("title"); + titleDTO.description.value = rs.getString("description"); return titleDTO; } } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleShopDTO.java b/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleShopDTO.java index 13eed29..4116c34 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleShopDTO.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleShopDTO.java @@ -1,22 +1,27 @@ package cn.lunadeer.miniplayertitle.dtos; -import cn.lunadeer.miniplayertitle.MiniPlayerTitle; +import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager; +import cn.lunadeer.minecraftpluginutils.databse.Field; +import cn.lunadeer.minecraftpluginutils.databse.FieldType; import java.sql.ResultSet; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import static cn.lunadeer.minecraftpluginutils.databse.DatabaseManager.handleDatabaseError; + public class TitleShopDTO { - private Integer id; private TitleDTO title; - private Double price; - private Integer days; - private Integer amount; + private final Field id = new Field("id", FieldType.INT); + private final Field price = new Field("price_d", FieldType.DOUBLE); + private final Field days = new Field("days", FieldType.INT); + private final Field amount = new Field("amount", FieldType.INT); + private LocalDateTime sale_end_at; public Integer getId() { - return id; + return (Integer) id.value; } public TitleDTO getTitle() { @@ -24,46 +29,49 @@ public class TitleShopDTO { } public Double getPrice() { - return price; + return (Double) price.value; } public boolean setPrice(Double price) { String sql = ""; sql += "UPDATE mplt_title_shop SET price_d = ? WHERE id = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, price, id)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, price, getId())) { + this.price.value = price; return true; } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("设置称号商店价格失败", e, sql); + handleDatabaseError("设置称号商店价格失败", e, sql); } return false; } public Integer getDays() { - return days; + return (Integer) days.value; } public boolean setDays(int days) { String sql = ""; sql += "UPDATE mplt_title_shop SET days = ? WHERE id = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, days, id)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, days, getId())) { + this.days.value = days; return true; } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("设置称号商店天数失败", e, sql); + handleDatabaseError("设置称号商店天数失败", e, sql); } return false; } public Integer getAmount() { - return amount; + return (Integer) amount.value; } public boolean setAmount(int amount) { String sql = ""; sql += "UPDATE mplt_title_shop SET amount = ? WHERE id = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, amount, id)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, amount, getId())) { + this.amount.value = amount; return true; } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("设置称号商店数量失败", e, sql); + handleDatabaseError("设置称号商店数量失败", e, sql); } return false; } @@ -79,10 +87,10 @@ public class TitleShopDTO { public boolean setSaleEndAt(int y, int m, int d) { String sql = ""; sql += "UPDATE mplt_title_shop SET sale_end_at_y = ?, sale_end_at_m = ?, sale_end_at_d = ? WHERE id = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, y, m, d, id)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, y, m, d, getId())) { return true; } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("设置称号商店销售结束时间失败", e, sql); + handleDatabaseError("设置称号商店销售结束时间失败", e, sql); } return false; } @@ -91,12 +99,12 @@ public class TitleShopDTO { String sql = ""; sql += "SELECT id, title_id, price_d, days, amount, sale_end_at_y, sale_end_at_m, sale_end_at_d " + "FROM mplt_title_shop WHERE id = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, id)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, id)) { if (rs.next()) { return getTitleShop(rs); } } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("获取称号商店信息失败", e, sql); + handleDatabaseError("获取称号商店信息失败", e, sql); } return null; } @@ -106,24 +114,24 @@ public class TitleShopDTO { sql += "SELECT id, title_id, price_d, days, amount, sale_end_at_y, sale_end_at_m, sale_end_at_d " + "FROM mplt_title_shop;"; List titleShops = new ArrayList<>(); - try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { + try (ResultSet rs = DatabaseManager.instance.query(sql)) { while (rs != null && rs.next()) { TitleShopDTO titleShop = getTitleShop(rs); titleShops.add(titleShop); } } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("获取称号商店列表失败", e, sql); + handleDatabaseError("获取称号商店列表失败", e, sql); } return titleShops; } private static TitleShopDTO getTitleShop(ResultSet rs) throws Exception { TitleShopDTO titleShop = new TitleShopDTO(); - titleShop.id = rs.getInt("id"); + titleShop.id.value = rs.getInt("id"); titleShop.title = TitleDTO.get(rs.getInt("title_id")); - titleShop.price = rs.getDouble("price_d"); - titleShop.days = rs.getInt("days"); - titleShop.amount = rs.getInt("amount"); + titleShop.price.value = rs.getDouble("price_d"); + titleShop.days.value = rs.getInt("days"); + titleShop.amount.value = rs.getInt("amount"); int y = rs.getInt("sale_end_at_y"); int m = rs.getInt("sale_end_at_m"); int d = rs.getInt("sale_end_at_d"); @@ -141,12 +149,12 @@ public class TitleShopDTO { "VALUES (?, 0, -1, 0, -1, -1, -1) " + "RETURNING " + "id, title_id, price_d, days, amount, sale_end_at_y, sale_end_at_m, sale_end_at_d;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, title.getId())) { + try (ResultSet rs = DatabaseManager.instance.query(sql, title.getId())) { if (rs.next()) { return getTitleShop(rs); } } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("创建称号商店失败", e, sql); + handleDatabaseError("创建称号商店失败", e, sql); } return null; } @@ -154,10 +162,10 @@ public class TitleShopDTO { public boolean delete() { String sql = ""; sql += "DELETE FROM mplt_title_shop WHERE id = ?;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql, id)) { + try (ResultSet rs = DatabaseManager.instance.query(sql, getId())) { return true; } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("删除称号商店失败", e, sql); + handleDatabaseError("删除称号商店失败", e, sql); } return false; } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/Events.java b/src/main/java/cn/lunadeer/miniplayertitle/events/Events.java similarity index 64% rename from src/main/java/cn/lunadeer/miniplayertitle/Events.java rename to src/main/java/cn/lunadeer/miniplayertitle/events/Events.java index 02f55a7..a89d74e 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/Events.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/events/Events.java @@ -1,16 +1,13 @@ -package cn.lunadeer.miniplayertitle; +package cn.lunadeer.miniplayertitle.events; import cn.lunadeer.minecraftpluginutils.Notification; import cn.lunadeer.miniplayertitle.dtos.PlayerInfoDTO; import cn.lunadeer.miniplayertitle.dtos.PlayerTitleDTO; -import io.papermc.paper.event.player.AsyncChatEvent; -import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; -import static cn.lunadeer.miniplayertitle.MiniPlayerTitle.usingPapi; import static cn.lunadeer.miniplayertitle.commands.Apis.updateName; public class Events implements Listener { @@ -36,19 +33,4 @@ public class Events implements Listener { updateName(bukkitPlayer, title.getTitle()); } } - - @EventHandler - public void onPlayerSendChat(AsyncChatEvent event) { - if (usingPapi()) { - return; - } - Component nameComponent = event.getPlayer().displayName(); - Component chatComponent = event.message(); - Component newChatComponent = Component.text() - .append(nameComponent) - .append(Component.text(" ")) - .append(chatComponent).build(); - event.setCancelled(true); - event.getPlayer().getServer().sendMessage(newChatComponent); - } } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/events/PaperChat.java b/src/main/java/cn/lunadeer/miniplayertitle/events/PaperChat.java new file mode 100644 index 0000000..d6ed8a7 --- /dev/null +++ b/src/main/java/cn/lunadeer/miniplayertitle/events/PaperChat.java @@ -0,0 +1,25 @@ +package cn.lunadeer.miniplayertitle.events; + +import io.papermc.paper.event.player.AsyncChatEvent; +import net.kyori.adventure.text.Component; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import static cn.lunadeer.miniplayertitle.MiniPlayerTitle.usingPapi; + +public class PaperChat implements Listener { + @EventHandler + public void onPlayerSendChat(AsyncChatEvent event) { + if (usingPapi()) { + return; + } + Component nameComponent = event.getPlayer().displayName(); + Component chatComponent = event.message(); + Component newChatComponent = Component.text() + .append(nameComponent) + .append(Component.text(" ")) + .append(chatComponent).build(); + event.setCancelled(true); + event.getPlayer().getServer().sendMessage(newChatComponent); + } +} diff --git a/src/main/java/cn/lunadeer/miniplayertitle/events/SpigotChat.java b/src/main/java/cn/lunadeer/miniplayertitle/events/SpigotChat.java new file mode 100644 index 0000000..9c21623 --- /dev/null +++ b/src/main/java/cn/lunadeer/miniplayertitle/events/SpigotChat.java @@ -0,0 +1,21 @@ +package cn.lunadeer.miniplayertitle.events; + +import cn.lunadeer.minecraftpluginutils.Notification; +import cn.lunadeer.miniplayertitle.MiniPlayerTitle; +import net.kyori.adventure.text.Component; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerChatEvent; + +import static cn.lunadeer.miniplayertitle.MiniPlayerTitle.usingPapi; + +public class SpigotChat implements Listener { + @EventHandler + public void onPlayerSendChat(PlayerChatEvent event) { + if (usingPapi()) { + return; + } + event.setCancelled(true); + MiniPlayerTitle.instance.getServer().broadcastMessage(event.getPlayer().getDisplayName() + " " + event.getMessage()); + } +} diff --git a/src/main/java/cn/lunadeer/miniplayertitle/utils/DatabaseTables.java b/src/main/java/cn/lunadeer/miniplayertitle/utils/DatabaseTables.java index e5b4828..f26a9c2 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/utils/DatabaseTables.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/utils/DatabaseTables.java @@ -1,126 +1,172 @@ package cn.lunadeer.miniplayertitle.utils; -import cn.lunadeer.miniplayertitle.MiniPlayerTitle; +import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager; +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; +import cn.lunadeer.minecraftpluginutils.databse.syntax.RemoveColumn; + +import static cn.lunadeer.minecraftpluginutils.databse.Common.IsFieldExist; public class DatabaseTables { public static void migrate() { - String sql = ""; // title table - sql = "CREATE TABLE IF NOT EXISTS mplt_title (" + - " id SERIAL PRIMARY KEY," + - " title TEXT NOT NULL UNIQUE," + - " description TEXT NOT NULL," + - " enabled BOOLEAN NOT NULL DEFAULT TRUE," + - " created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + - " updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP" + - ");"; - MiniPlayerTitle.database.query(sql); + TableColumn mplt_title_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0); + TableColumn mplt_title_title = new TableColumn("title", FieldType.STRING, false, false, true, false, "'unknown'"); + TableColumn mplt_title_description = new TableColumn("description", FieldType.STRING, false, false, true, false, "'unknown'"); + TableColumn mplt_title_enabled = new TableColumn("enabled", FieldType.BOOLEAN, false, false, true, false, "true"); + TableColumn mplt_title_created_at = new TableColumn("created_at", FieldType.DATETIME, false, false, true, false, "CURRENT_TIMESTAMP"); + TableColumn mplt_title_updated_at = new TableColumn("updated_at", FieldType.DATETIME, false, false, true, false, "CURRENT_TIMESTAMP"); + CreateTable mplt_title = new CreateTable().ifNotExists(); + mplt_title.table("mplt_title") + .field(mplt_title_id) + .field(mplt_title_title) + .field(mplt_title_description) + .field(mplt_title_enabled) + .field(mplt_title_created_at) + .field(mplt_title_updated_at); + mplt_title.execute(); + // title shop table - sql = "CREATE TABLE IF NOT EXISTS mplt_title_shop (" + - " id SERIAL PRIMARY KEY," + - " title_id INTEGER NOT NULL," + - " price INTEGER NOT NULL DEFAULT 0," + - " days INTEGER NOT NULL DEFAULT 0," + - " amount INTEGER NOT NULL DEFAULT -1," + - " sale_end_at BIGINT NOT NULL DEFAULT -1," + - " created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + - " updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + - " FOREIGN KEY (title_id) REFERENCES mplt_title(id) ON DELETE CASCADE" + - ");"; - MiniPlayerTitle.database.query(sql); + TableColumn mplt_title_shop_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0); + TableColumn mplt_title_shop_title_id = new TableColumn("title_id", FieldType.INT, false, false, true, false, 0); + TableColumn mplt_title_shop_price = new TableColumn("price", FieldType.INT, false, false, true, false, 0); + TableColumn mplt_title_shop_days = new TableColumn("days", FieldType.INT, false, false, true, false, 0); + TableColumn mplt_title_shop_amount = new TableColumn("amount", FieldType.INT, false, false, true, false, -1); + TableColumn mplt_title_shop_sale_end_at = new TableColumn("sale_end_at", FieldType.LONG, false, false, true, false, -1); + TableColumn mplt_title_shop_created_at = new TableColumn("created_at", FieldType.DATETIME, false, false, true, false, "CURRENT_TIMESTAMP"); + TableColumn mplt_title_shop_updated_at = new TableColumn("updated_at", FieldType.DATETIME, false, false, true, false, "CURRENT_TIMESTAMP"); + CreateTable.ForeignKey mplt_title_shop_title_id_fk = new CreateTable.ForeignKey(mplt_title_shop_title_id, "mplt_title", mplt_title_id, true); + CreateTable mplt_title_shop = new CreateTable().ifNotExists(); + mplt_title_shop.table("mplt_title_shop") + .field(mplt_title_shop_id) + .field(mplt_title_shop_title_id) + .field(mplt_title_shop_price) + .field(mplt_title_shop_days) + .field(mplt_title_shop_amount) + .field(mplt_title_shop_sale_end_at) + .field(mplt_title_shop_created_at) + .field(mplt_title_shop_updated_at) + .foreignKey(mplt_title_shop_title_id_fk); + mplt_title_shop.execute(); // player title info table - sql = "CREATE TABLE IF NOT EXISTS mplt_player_info (" + - " uuid UUID PRIMARY KEY," + - " coin INTEGER NOT NULL DEFAULT 0," + - " using_title_id INTEGER NOT NULL DEFAULT -1," + - " created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + - " updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + - " FOREIGN KEY (using_title_id) REFERENCES mplt_title(id) ON DELETE CASCADE" + - ");"; - MiniPlayerTitle.database.query(sql); + TableColumn mplt_player_info_uuid = new TableColumn("uuid", FieldType.UUID, true, false, true, false, "'00000000-0000-0000-0000-000000000000'"); + TableColumn mplt_player_info_coin = new TableColumn("coin", FieldType.INT, false, false, true, false, 0); + TableColumn mplt_player_info_using_title_id = new TableColumn("using_title_id", FieldType.INT, false, false, true, false, -1); + TableColumn mplt_player_info_created_at = new TableColumn("created_at", FieldType.DATETIME, false, false, true, false, "CURRENT_TIMESTAMP"); + TableColumn mplt_player_info_updated_at = new TableColumn("updated_at", FieldType.DATETIME, false, false, true, false, "CURRENT_TIMESTAMP"); + CreateTable.ForeignKey mplt_player_info_using_title_id_fk = new CreateTable.ForeignKey(mplt_player_info_using_title_id, "mplt_title", mplt_title_id, true); + CreateTable mplt_player_info = new CreateTable().ifNotExists(); + mplt_player_info.table("mplt_player_info") + .field(mplt_player_info_uuid) + .field(mplt_player_info_coin) + .field(mplt_player_info_using_title_id) + .field(mplt_player_info_created_at) + .field(mplt_player_info_updated_at) + .foreignKey(mplt_player_info_using_title_id_fk); + mplt_player_info.execute(); + // player title table - sql = "CREATE TABLE IF NOT EXISTS mplt_player_title (" + - " id SERIAL PRIMARY KEY," + - " player_uuid UUID NOT NULL," + - " title_id INTEGER NOT NULL," + - " expire_at BIGINT NOT NULL DEFAULT -1," + - " created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + - " updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + - " FOREIGN KEY (title_id) REFERENCES mplt_title(id) ON DELETE CASCADE," + - " FOREIGN KEY (player_uuid) REFERENCES mplt_player_info(uuid) ON DELETE CASCADE" + - ");"; - MiniPlayerTitle.database.query(sql); + TableColumn mplt_player_title_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0); + TableColumn mplt_player_title_player_uuid = new TableColumn("player_uuid", FieldType.UUID, false, false, true, false, "'00000000-0000-0000-0000-000000000000'"); + TableColumn mplt_player_title_title_id = new TableColumn("title_id", FieldType.INT, false, false, true, false, 0); + TableColumn mplt_player_title_expire_at = new TableColumn("expire_at", FieldType.LONG, false, false, true, false, -1); + TableColumn mplt_player_title_created_at = new TableColumn("created_at", FieldType.DATETIME, false, false, true, false, "CURRENT_TIMESTAMP"); + TableColumn mplt_player_title_updated_at = new TableColumn("updated_at", FieldType.DATETIME, false, false, true, false, "CURRENT_TIMESTAMP"); + CreateTable.ForeignKey mplt_player_title_title_id_fk = new CreateTable.ForeignKey(mplt_player_title_title_id, "mplt_title", mplt_title_id, true); + CreateTable.ForeignKey mplt_player_title_player_uuid_fk = new CreateTable.ForeignKey(mplt_player_title_player_uuid, "mplt_player_info", mplt_player_info_uuid, true); + CreateTable mplt_player_title = new CreateTable().ifNotExists(); + mplt_player_title.table("mplt_player_title") + .field(mplt_player_title_id) + .field(mplt_player_title_player_uuid) + .field(mplt_player_title_title_id) + .field(mplt_player_title_expire_at) + .field(mplt_player_title_created_at) + .field(mplt_player_title_updated_at) + .foreignKey(mplt_player_title_title_id_fk) + .foreignKey(mplt_player_title_player_uuid_fk); + mplt_player_title.execute(); - MiniPlayerTitle.database.deleteColumnIfExists("mplt_title", "created_at"); - MiniPlayerTitle.database.deleteColumnIfExists("mplt_title", "updated_at"); - MiniPlayerTitle.database.deleteColumnIfExists("mplt_title", "enabled"); + new RemoveColumn("expire_at").IfExists().table("mplt_title").execute(); + new RemoveColumn("sale_end_at").IfExists().table("mplt_title_shop").execute(); + new RemoveColumn("expire_at").IfExists().table("mplt_player_title").execute(); + new RemoveColumn("created_at").IfExists().table("mplt_title").execute(); + new RemoveColumn("updated_at").IfExists().table("mplt_title").execute(); + new RemoveColumn("created_at").IfExists().table("mplt_player_info").execute(); + new RemoveColumn("updated_at").IfExists().table("mplt_player_info").execute(); + new RemoveColumn("created_at").IfExists().table("mplt_player_title").execute(); + new RemoveColumn("updated_at").IfExists().table("mplt_player_title").execute(); - MiniPlayerTitle.database.deleteColumnIfExists("mplt_title_shop", "created_at"); - MiniPlayerTitle.database.deleteColumnIfExists("mplt_title_shop", "updated_at"); - - MiniPlayerTitle.database.deleteColumnIfExists("mplt_player_info", "created_at"); - MiniPlayerTitle.database.deleteColumnIfExists("mplt_player_info", "updated_at"); - - MiniPlayerTitle.database.deleteColumnIfExists("mplt_player_title", "created_at"); - MiniPlayerTitle.database.deleteColumnIfExists("mplt_player_title", "updated_at"); - - MiniPlayerTitle.database.addColumnIfNotExists("mplt_title_shop", "sale_end_at_y", "INTEGER NOT NULL DEFAULT -1"); - MiniPlayerTitle.database.addColumnIfNotExists("mplt_title_shop", "sale_end_at_m", "INTEGER NOT NULL DEFAULT -1"); - MiniPlayerTitle.database.addColumnIfNotExists("mplt_title_shop", "sale_end_at_d", "INTEGER NOT NULL DEFAULT -1"); + TableColumn mplt_title_shop_sale_end_at_y = new TableColumn("sale_end_at_y", FieldType.INT, false, false, true, false, -1); + TableColumn mplt_title_shop_sale_end_at_m = new TableColumn("sale_end_at_m", FieldType.INT, false, false, true, false, -1); + TableColumn mplt_title_shop_sale_end_at_d = new TableColumn("sale_end_at_d", FieldType.INT, false, false, true, false, -1); + new AddColumn(mplt_title_shop_sale_end_at_y).table("mplt_title_shop").ifNotExists().execute(); + new AddColumn(mplt_title_shop_sale_end_at_m).table("mplt_title_shop").ifNotExists().execute(); + new AddColumn(mplt_title_shop_sale_end_at_d).table("mplt_title_shop").ifNotExists().execute(); // convert sale_end_at(YYYYMMDD) to sale_end_at_y, sale_end_at_m, sale_end_at_d if sale_end_at column exists - if (MiniPlayerTitle.database.isColumnExist("mplt_title_shop", "sale_end_at")) { - sql = "UPDATE mplt_title_shop SET " + + if (IsFieldExist("mplt_title_shop", "sale_end_at")) { + String sql = "UPDATE mplt_title_shop SET " + "sale_end_at_y = (sale_end_at / 10000), " + "sale_end_at_m = (sale_end_at % 10000 / 100), " + "sale_end_at_d = (sale_end_at % 100) " + "WHERE sale_end_at != -1;"; - MiniPlayerTitle.database.query(sql); + DatabaseManager.instance.query(sql); + new RemoveColumn("sale_end_at").IfExists().table("mplt_title_shop").execute(); } - MiniPlayerTitle.database.deleteColumnIfExists("mplt_title_shop", "sale_end_at"); - MiniPlayerTitle.database.addColumnIfNotExists("mplt_player_title", "expire_at_y", "INTEGER NOT NULL DEFAULT -1"); - MiniPlayerTitle.database.addColumnIfNotExists("mplt_player_title", "expire_at_m", "INTEGER NOT NULL DEFAULT -1"); - MiniPlayerTitle.database.addColumnIfNotExists("mplt_player_title", "expire_at_d", "INTEGER NOT NULL DEFAULT -1"); - if (MiniPlayerTitle.database.isColumnExist("mplt_player_title", "expire_at")) { - sql = "UPDATE mplt_player_title SET " + + + TableColumn mplt_player_title_expire_at_y = new TableColumn("expire_at_y", FieldType.INT, false, false, true, false, -1); + TableColumn mplt_player_title_expire_at_m = new TableColumn("expire_at_m", FieldType.INT, false, false, true, false, -1); + TableColumn mplt_player_title_expire_at_d = new TableColumn("expire_at_d", FieldType.INT, false, false, true, false, -1); + new AddColumn(mplt_player_title_expire_at_y).table("mplt_player_title").ifNotExists().execute(); + new AddColumn(mplt_player_title_expire_at_m).table("mplt_player_title").ifNotExists().execute(); + new AddColumn(mplt_player_title_expire_at_d).table("mplt_player_title").ifNotExists().execute(); + + if (IsFieldExist("mplt_player_title", "expire_at")) { + String sql = "UPDATE mplt_player_title SET " + "expire_at_y = (expire_at / 10000), " + "expire_at_m = (expire_at % 10000 / 100), " + "expire_at_d = (expire_at % 100) " + "WHERE expire_at != -1;"; - MiniPlayerTitle.database.query(sql); + DatabaseManager.instance.query(sql); + new RemoveColumn("expire_at").IfExists().table("mplt_player_title").execute(); } - MiniPlayerTitle.database.deleteColumnIfExists("mplt_player_title", "expire_at"); - sql = "INSERT INTO mplt_title (" + - "id, " + - "title, " + - "description " + - ") VALUES (" + - "-1, " + - "'default', " + - "'default' " + - ") ON CONFLICT (id) DO NOTHING;"; - MiniPlayerTitle.database.query(sql); + Field mplt_title_id_field = new Field("id", -1); + Field mplt_title_title_field = new Field("title", "default"); + Field mplt_title_description_field = new Field("description", "default"); + InsertRow mplt_title_default = new InsertRow().table("mplt_title"); + mplt_title_default.field(mplt_title_id_field) + .field(mplt_title_title_field) + .field(mplt_title_description_field).onConflictDoNothing(mplt_title_id_field); + mplt_title_default.execute(); - MiniPlayerTitle.database.addColumnIfNotExists("mplt_player_info", "last_use_name", "TEXT NOT NULL DEFAULT 'null'"); + + TableColumn mplt_player_info_last_use_name = new TableColumn("last_use_name", FieldType.STRING, false, false, true, false, "'null'"); + new AddColumn(mplt_player_info_last_use_name).table("mplt_player_info").ifNotExists().execute(); // 3.0.6 - MiniPlayerTitle.database.addColumnIfNotExists("mplt_player_info", "coin_d", "DOUBLE PRECISION NOT NULL DEFAULT 0"); - MiniPlayerTitle.database.addColumnIfNotExists("mplt_title_shop", "price_d", "DOUBLE PRECISION NOT NULL DEFAULT 0"); - if (MiniPlayerTitle.database.isColumnExist("mplt_player_info", "coin")) { - sql = "UPDATE mplt_player_info SET coin_d = coin;"; - MiniPlayerTitle.database.query(sql); + TableColumn mplt_player_info_coin_d = new TableColumn("coin_d", FieldType.DOUBLE, false, false, true, false, 0); + TableColumn mplt_title_shop_price_d = new TableColumn("price_d", FieldType.DOUBLE, false, false, true, false, 0); + new AddColumn(mplt_player_info_coin_d).table("mplt_player_info").ifNotExists().execute(); + new AddColumn(mplt_title_shop_price_d).table("mplt_title_shop").ifNotExists().execute(); + if (IsFieldExist("mplt_player_info", "coin")) { + String sql = "UPDATE mplt_player_info SET coin_d = coin;"; + DatabaseManager.instance.query(sql); + new RemoveColumn("coin").IfExists().table("mplt_player_info").execute(); } - if (MiniPlayerTitle.database.isColumnExist("mplt_title_shop", "price")) { - sql = "UPDATE mplt_title_shop SET price_d = price;"; - MiniPlayerTitle.database.query(sql); + if (IsFieldExist("mplt_title_shop", "price")) { + String sql = "UPDATE mplt_title_shop SET price_d = price;"; + DatabaseManager.instance.query(sql); + new RemoveColumn("price").IfExists().table("mplt_title_shop").execute(); } - MiniPlayerTitle.database.deleteColumnIfExists("mplt_player_info", "coin"); - MiniPlayerTitle.database.deleteColumnIfExists("mplt_title_shop", "price"); } }