diff --git a/pom.xml b/pom.xml index b04df90..ccd4257 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer MiniPlayerTitle - 3.0.5 + 3.0.6 jar MiniPlayerTitle @@ -78,7 +78,7 @@ cn.lunadeer MinecraftPluginUtils - 1.2.0-SNAPSHOT + 1.3.2-SNAPSHOT diff --git a/src/main/java/cn/lunadeer/miniplayertitle/MiniPlayerTitle.java b/src/main/java/cn/lunadeer/miniplayertitle/MiniPlayerTitle.java index 3e15740..32ea638 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/MiniPlayerTitle.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/MiniPlayerTitle.java @@ -14,12 +14,13 @@ public final class MiniPlayerTitle extends JavaPlugin { public void onEnable() { // Plugin startup logic instance = this; + new Scheduler(this); notification = new Notification(this); logger = new XLogger(instance); config = new ConfigManager(instance); logger.setDebug(config.isDebug()); database = new DatabaseManager(this, - config.getDbType().equals("pgsql") ? DatabaseManager.TYPE.POSTGRESQL : DatabaseManager.TYPE.SQLITE, + DatabaseManager.TYPE.valueOf(config.getDbType().toUpperCase()), config.getDbHost(), config.getDbPort(), config.getDbName(), @@ -27,6 +28,11 @@ public final class MiniPlayerTitle extends JavaPlugin { config.getDbPass()); DatabaseTables.migrate(); + if (config.isExternalEco()) { + logger.info("已启用外部经济插件"); + new VaultConnect(this); + } + Bukkit.getPluginManager().registerEvents(new Events(), this); Objects.requireNonNull(Bukkit.getPluginCommand("MiniPlayerTitle")).setExecutor(new Commands()); Objects.requireNonNull(Bukkit.getPluginCommand("MiniPlayerTitle")).setTabCompleter(new Commands()); diff --git a/src/main/java/cn/lunadeer/miniplayertitle/commands/PlayerManage.java b/src/main/java/cn/lunadeer/miniplayertitle/commands/PlayerManage.java index 3af2b29..02b1614 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/commands/PlayerManage.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/commands/PlayerManage.java @@ -25,7 +25,7 @@ public class PlayerManage { } if (playerInfo.addCoin(Integer.parseInt(args[2]))) { MiniPlayerTitle.notification.info(sender, "成功给玩家 %s 添加 %s 称号币", playerInfo.getLastUseName(), args[2]); - MiniPlayerTitle.notification.info(sender, "玩家 %s 当前余额 %d 称号币", playerInfo.getLastUseName(), playerInfo.getCoin()); + MiniPlayerTitle.notification.info(sender, "玩家 %s 当前余额 %f 称号币", playerInfo.getLastUseName(), playerInfo.getCoin()); } else { MiniPlayerTitle.notification.error(sender, "给玩家添加称号币失败,详细错误请查看控制台日志"); } @@ -51,7 +51,7 @@ public class PlayerManage { } if (playerInfo.setCoin(Integer.parseInt(args[2]))) { MiniPlayerTitle.notification.info(sender, "成功给玩家 %s 设置 %s 称号币", playerInfo.getLastUseName(), args[2]); - MiniPlayerTitle.notification.info(sender, "玩家 %s 当前余额 %d 称号币", playerInfo.getLastUseName(), playerInfo.getCoin()); + MiniPlayerTitle.notification.info(sender, "玩家 %s 当前余额 %f 称号币", playerInfo.getLastUseName(), playerInfo.getCoin()); } else { MiniPlayerTitle.notification.error(sender, "给玩家设置称号币失败,详细错误请查看控制台日志"); } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/commands/TitleShopSale.java b/src/main/java/cn/lunadeer/miniplayertitle/commands/TitleShopSale.java index 63879ae..f692cdf 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/commands/TitleShopSale.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/commands/TitleShopSale.java @@ -39,7 +39,7 @@ public class TitleShopSale { boolean success; switch (args[1]) { case "price": - success = titleShop.setPrice(Integer.parseInt(args[3])); + success = titleShop.setPrice(Double.parseDouble(args[3])); break; case "days": success = titleShop.setDays(Integer.parseInt(args[3])); diff --git a/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerInfoDTO.java b/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerInfoDTO.java index 9d1400b..3816c91 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerInfoDTO.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerInfoDTO.java @@ -1,5 +1,6 @@ package cn.lunadeer.miniplayertitle.dtos; +import cn.lunadeer.minecraftpluginutils.VaultConnect; import cn.lunadeer.miniplayertitle.MiniPlayerTitle; import org.bukkit.entity.Player; @@ -12,13 +13,13 @@ import java.util.UUID; public class PlayerInfoDTO { private UUID uuid; - private Integer coin; + private Double coin; private TitleDTO using_title; private String last_use_name; public static PlayerInfoDTO get(UUID uuid) { String sql = ""; - sql = "SELECT uuid, coin, using_title_id, last_use_name FROM mplt_player_info WHERE uuid = ?;"; + 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)) { if (rs.next()) return getPlayerInfoDTO(rs); else return null; @@ -48,7 +49,7 @@ public class PlayerInfoDTO { public static PlayerInfoDTO get(String name) { String sql = ""; - sql = "SELECT uuid, coin, using_title_id, last_use_name FROM mplt_player_info WHERE last_use_name = ?;"; + 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)) { if (rs.next()) return getPlayerInfoDTO(rs); else return null; @@ -60,7 +61,7 @@ public class PlayerInfoDTO { private static PlayerInfoDTO create(Player player) { String sql = ""; - sql = "INSERT INTO mplt_player_info (uuid, coin, last_use_name) " + + 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())) { @@ -85,13 +86,17 @@ public class PlayerInfoDTO { private static PlayerInfoDTO getPlayerInfoDTO(ResultSet rs) throws SQLException { PlayerInfoDTO playerInfoDTO = new PlayerInfoDTO(); playerInfoDTO.uuid = UUID.fromString(rs.getString("uuid")); - playerInfoDTO.coin = rs.getInt("coin"); + playerInfoDTO.coin = rs.getDouble("coin_d"); playerInfoDTO.using_title = TitleDTO.get(rs.getInt("using_title_id")); playerInfoDTO.last_use_name = rs.getString("last_use_name"); return playerInfoDTO; } - public Integer getCoin() { + public Double getCoin() { + if (MiniPlayerTitle.config.isExternalEco()) { + Player player = MiniPlayerTitle.instance.getServer().getPlayer(uuid); + return VaultConnect.instance.getBalance(player); + } return coin; } @@ -115,13 +120,28 @@ public class PlayerInfoDTO { return false; } - public boolean addCoin(Integer coin) { + public boolean addCoin(double coin) { + if (MiniPlayerTitle.config.isExternalEco()) { + Player player = MiniPlayerTitle.instance.getServer().getPlayer(uuid); + VaultConnect.instance.depositPlayer(player, coin); + return true; + } return setCoin(this.coin + coin); } - public boolean setCoin(Integer coin) { + public boolean setCoin(double coin) { + if (MiniPlayerTitle.config.isExternalEco()) { + Player player = MiniPlayerTitle.instance.getServer().getPlayer(uuid); + double balance = VaultConnect.instance.getBalance(player); + if (balance < coin) { + VaultConnect.instance.depositPlayer(player, coin - balance); + } else { + VaultConnect.instance.withdrawPlayer(player, balance - coin); + } + return true; + } String sql = ""; - sql = "UPDATE mplt_player_info SET coin = ? WHERE uuid = ?;"; + sql = "UPDATE mplt_player_info SET coin_d = ? WHERE uuid = ?;"; try (ResultSet rs = MiniPlayerTitle.database.query(sql, coin, uuid)) { this.coin = coin; return true; diff --git a/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleShopDTO.java b/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleShopDTO.java index eece69c..13eed29 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleShopDTO.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleShopDTO.java @@ -10,7 +10,7 @@ import java.util.List; public class TitleShopDTO { private Integer id; private TitleDTO title; - private Integer price; + private Double price; private Integer days; private Integer amount; private LocalDateTime sale_end_at; @@ -23,13 +23,13 @@ public class TitleShopDTO { return title; } - public Integer getPrice() { + public Double getPrice() { return price; } - public boolean setPrice(int price) { + public boolean setPrice(Double price) { String sql = ""; - sql += "UPDATE mplt_title_shop SET price = ? WHERE id = ?;"; + sql += "UPDATE mplt_title_shop SET price_d = ? WHERE id = ?;"; try (ResultSet rs = MiniPlayerTitle.database.query(sql, price, id)) { return true; } catch (Exception e) { @@ -89,7 +89,7 @@ public class TitleShopDTO { public static TitleShopDTO get(Integer id) { String sql = ""; - sql += "SELECT id, title_id, price, days, amount, sale_end_at_y, sale_end_at_m, sale_end_at_d " + + 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)) { if (rs.next()) { @@ -103,7 +103,7 @@ public class TitleShopDTO { public static List getAll() { String sql = ""; - sql += "SELECT id, title_id, price, days, amount, sale_end_at_y, sale_end_at_m, sale_end_at_d " + + 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)) { @@ -121,7 +121,7 @@ public class TitleShopDTO { TitleShopDTO titleShop = new TitleShopDTO(); titleShop.id = rs.getInt("id"); titleShop.title = TitleDTO.get(rs.getInt("title_id")); - titleShop.price = rs.getInt("price"); + titleShop.price = rs.getDouble("price_d"); titleShop.days = rs.getInt("days"); titleShop.amount = rs.getInt("amount"); int y = rs.getInt("sale_end_at_y"); @@ -137,10 +137,10 @@ public class TitleShopDTO { public static TitleShopDTO create(TitleDTO title) { String sql = ""; - sql += "INSERT INTO mplt_title_shop (title_id, price, days, amount, sale_end_at_y, sale_end_at_m, sale_end_at_d) " + + sql += "INSERT INTO mplt_title_shop (title_id, price_d, days, amount, sale_end_at_y, sale_end_at_m, sale_end_at_d) " + "VALUES (?, 0, -1, 0, -1, -1, -1) " + "RETURNING " + - "id, title_id, price, days, amount, sale_end_at_y, sale_end_at_m, sale_end_at_d;"; + "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())) { if (rs.next()) { return getTitleShop(rs); diff --git a/src/main/java/cn/lunadeer/miniplayertitle/utils/ConfigManager.java b/src/main/java/cn/lunadeer/miniplayertitle/utils/ConfigManager.java index f95486d..2218bd0 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/utils/ConfigManager.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/utils/ConfigManager.java @@ -32,6 +32,7 @@ public class ConfigManager { _custom_cost = _file.getInt("CustomCost.Cost", 1000); _max_length = _file.getInt("CustomCost.MaxLength", 8); _check_update = _file.getBoolean("CheckUpdate", true); + _external_eco = _file.getBoolean("ExternalEco", false); } public Boolean isDebug() { @@ -141,6 +142,10 @@ public class ConfigManager { return _check_update; } + public Boolean isExternalEco() { + return _external_eco; + } + private final MiniPlayerTitle _plugin; private FileConfiguration _file; @@ -159,4 +164,5 @@ public class ConfigManager { private Integer _custom_cost; private Integer _max_length; private Boolean _check_update; + private Boolean _external_eco; } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/utils/DatabaseTables.java b/src/main/java/cn/lunadeer/miniplayertitle/utils/DatabaseTables.java index bf7ba6c..e5b4828 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/utils/DatabaseTables.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/utils/DatabaseTables.java @@ -108,5 +108,19 @@ public class DatabaseTables { MiniPlayerTitle.database.query(sql); MiniPlayerTitle.database.addColumnIfNotExists("mplt_player_info", "last_use_name", "TEXT NOT NULL DEFAULT 'null'"); + + // 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); + } + if (MiniPlayerTitle.database.isColumnExist("mplt_title_shop", "price")) { + sql = "UPDATE mplt_title_shop SET price_d = price;"; + MiniPlayerTitle.database.query(sql); + } + MiniPlayerTitle.database.deleteColumnIfExists("mplt_player_info", "coin"); + MiniPlayerTitle.database.deleteColumnIfExists("mplt_title_shop", "price"); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 9a179fa..def89ae 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -16,6 +16,8 @@ CustomCost: DefaultCoin: 0 +ExternalEco: false # 使用外部经济插件 需要Vault支持 + CheckUpdate: true Debug: false \ No newline at end of file