diff --git a/pom.xml b/pom.xml index f7a0bd0..a2800f8 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ cn.lunadeer MiniPlayerTitle - 2.11.4 + 3.0.0 jar MiniPlayerTitle diff --git a/src/main/java/cn/lunadeer/miniplayertitle/Commands.java b/src/main/java/cn/lunadeer/miniplayertitle/Commands.java index 7e7ad5e..440653a 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/Commands.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/Commands.java @@ -1,8 +1,8 @@ package cn.lunadeer.miniplayertitle; +import cn.lunadeer.miniplayertitle.commands.TitleManage; import cn.lunadeer.miniplayertitle.commands.TitleShopSale; import cn.lunadeer.miniplayertitle.tuis.*; -import cn.lunadeer.miniplayertitle.tuis.Shop; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; @@ -47,6 +47,24 @@ public class Commands implements TabExecutor { case "delete_sale": TitleShopSale.deleteSale(sender, args); break; + case "buy_sale": + TitleShopSale.buySale(sender, args); + break; + case "use_title": + TitleManage.useTitle(sender, args); + break; + case "create_title": + TitleManage.createTitle(sender, args); + break; + case "delete_title": + TitleManage.deleteTitle(sender, args); + break; + case "set_title": + TitleManage.setTitle(sender, args); + break; + case "set_desc": + TitleManage.setTitleDescription(sender, args); + break; default: return false; } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/Events.java b/src/main/java/cn/lunadeer/miniplayertitle/Events.java index 9140e51..5f93526 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/Events.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/Events.java @@ -8,13 +8,19 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; +import static cn.lunadeer.miniplayertitle.commands.Apis.updateName; + public class Events implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Player bukkitPlayer = event.getPlayer(); PlayerInfoDTO player = PlayerInfoDTO.get(bukkitPlayer.getUniqueId()); - player.updateName(); + if (player == null) { + MiniPlayerTitle.notification.error(bukkitPlayer, "获取玩家信息时出现错误,请联系管理员"); + return; + } + updateName(bukkitPlayer, player.getUsingTitle()); } @EventHandler diff --git a/src/main/java/cn/lunadeer/miniplayertitle/PlayerTitle.java b/src/main/java/cn/lunadeer/miniplayertitle/PlayerTitle.java deleted file mode 100644 index 7a2979c..0000000 --- a/src/main/java/cn/lunadeer/miniplayertitle/PlayerTitle.java +++ /dev/null @@ -1,64 +0,0 @@ -package cn.lunadeer.miniplayertitle; - -import cn.lunadeer.miniplayertitle.utils.Time; - -import java.sql.ResultSet; -import java.util.UUID; - -public class PlayerTitle extends Title { - private Long _expire_at = -1L; - private final UUID _player_uuid; - - public PlayerTitle(Integer title_id, UUID player_uuid, Long expire_at) { - super(title_id); - this._player_uuid = player_uuid; - this._expire_at = expire_at; - } - - public static PlayerTitle create(Integer title_id, UUID player_uuid) { - String sql = ""; - sql += "INSERT INTO mplt_player_title (title_id, player_uuid, expire_at) "; - sql += "VALUES (" + title_id + ", '" + player_uuid.toString() + "', " + System.currentTimeMillis() + ") "; - sql += "RETURNING id;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { - if (rs != null && rs.next()) { - return new PlayerTitle(title_id, player_uuid, -1L); - } - } catch (Exception e) { - MiniPlayerTitle.logger.err("PlayerTitle create failed: " + e.getMessage()); - } - return null; - } - - public String getExpireAtStr() { - if (this._expire_at == -1L) { - return "永久"; - } else if (this._expire_at < Time.getCurrent()) { - return "已过期"; - } else { - return this._expire_at.toString(); - } - } - - public Boolean isExpired() { - if (this._expire_at == -1L) { - return false; - } else { - return this._expire_at < Time.getCurrent(); - } - } - - public void setExpireAt(Long expire_at) { - this._expire_at = expire_at; - this.save(); - } - - private void save() { - String sql = ""; - sql += "UPDATE mplt_player_title "; - sql += "SET expire_at = " + this._expire_at + " "; - sql += "WHERE player_uuid = '" + _player_uuid.toString() + "' "; - sql += "AND title_id = " + this._id + ";"; - MiniPlayerTitle.database.query(sql); - } -} diff --git a/src/main/java/cn/lunadeer/miniplayertitle/SaleTitle.java b/src/main/java/cn/lunadeer/miniplayertitle/SaleTitle.java deleted file mode 100644 index f7178b7..0000000 --- a/src/main/java/cn/lunadeer/miniplayertitle/SaleTitle.java +++ /dev/null @@ -1,127 +0,0 @@ -package cn.lunadeer.miniplayertitle; - - -import cn.lunadeer.miniplayertitle.utils.Time; - -import java.sql.ResultSet; - -public class SaleTitle extends Title { - private Integer _sale_id; - private Integer _price; - private Integer _days; - private Integer _amount; - private Long _sale_end_at; - - public SaleTitle(Integer id, Integer title_id, Integer price, Integer days, Integer amount, Long sale_end_at) { - super(title_id); - this._sale_id = id; - this._id = title_id; - this._price = price; - this._days = days; - this._amount = amount; - this._sale_end_at = sale_end_at; - } - - public static SaleTitle create(Integer title_id) { - String sql = ""; - sql += "INSERT INTO mplt_title_shop (title_id, price, days, amount, sale_end_at) "; - sql += "VALUES (" + title_id + ", 0, 0, 0, -1) "; - sql += "RETURNING id;"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { - if (rs != null && rs.next()) { - Integer id = rs.getInt("id"); - return new SaleTitle(id, title_id, 0, 0, 0, -1L); - } - } catch (Exception e) { - MiniPlayerTitle.logger.err("SaleTitle create failed: " + e.getMessage()); - } - return null; - } - - public Integer getPrice() { - return this._price; - } - - private void setPrice(Integer price) { - this._price = price; - this.save(); - } - - public static void setPrice(Integer id, Integer price) { - SaleTitle title = Shop.getSaleTitles().get(id); - title.setPrice(price); - } - - public Integer getDays() { - return this._days; - } - - private void setDays(Integer days) { - this._days = days; - this.save(); - } - - public static void setDays(Integer id, Integer days) { - SaleTitle title = Shop.getSaleTitles().get(id); - title.setDays(days); - } - - public Integer getAmount() { - return this._amount; - } - - private void setAmount(Integer amount) { - this._amount = amount; - this.save(); - } - - public static void setAmount(Integer id, Integer amount) { - SaleTitle title = Shop.getSaleTitles().get(id); - title.setAmount(amount); - } - - public String getSaleEndAt() { - if (this._sale_end_at == -1L) { - return "常驻"; - } else if (this._sale_end_at < Time.getCurrent()) { - return "已停售"; - } else { - return this._sale_end_at.toString(); - } - } - - private void setSaleEndAt(Long sale_end_at) { - this._sale_end_at = sale_end_at; - this.save(); - } - - public static void setSaleEndAt(Integer id, Long sale_end_at) { - SaleTitle title = Shop.getSaleTitles().get(id); - title.setSaleEndAt(sale_end_at); - } - - public Boolean isSaleExpired() { - if (this._sale_end_at == -1L) { - return false; - } else { - return this._sale_end_at < Time.getCurrent(); - } - } - - public Integer getSaleId() { - return this._sale_id; - } - - private void save() { - String sql = ""; - sql += "UPDATE mplt_title_shop "; - sql += "SET title_id = " + this._id + ", "; - sql += "price = " + this._price + ", "; - sql += "days = " + this._days + ", "; - sql += "amount = " + this._amount + ", "; - sql += "sale_end_at = " + this._sale_end_at + " "; - sql += "WHERE id = " + this._sale_id + ";"; - - MiniPlayerTitle.database.query(sql); - } -} diff --git a/src/main/java/cn/lunadeer/miniplayertitle/Shop.java b/src/main/java/cn/lunadeer/miniplayertitle/Shop.java deleted file mode 100644 index 2593961..0000000 --- a/src/main/java/cn/lunadeer/miniplayertitle/Shop.java +++ /dev/null @@ -1,79 +0,0 @@ -package cn.lunadeer.miniplayertitle; - -import cn.lunadeer.minecraftpluginutils.stui.ListView; -import cn.lunadeer.minecraftpluginutils.stui.components.Button; -import cn.lunadeer.minecraftpluginutils.stui.components.Line; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.TextComponent; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.sql.ResultSet; -import java.util.HashMap; -import java.util.Map; - -public class Shop { - public static void open(CommandSender sender, Integer page) { - Map titles = getSaleTitles(); - if (!(sender instanceof Player)) { - for (SaleTitle title : titles.values()) { - Component idx = Component.text("[" + title.getSaleId() + "] "); - MiniPlayerTitle.notification.info(sender, idx.append(title.getTitle())); - } - return; - } - Player player = (Player) sender; - ListView view = ListView.create(5, "/mplt shop"); - view.title("称号商店"); - view.subtitle("当前余额: " + XPlayer.getCoin(player) + "称号币"); - for (Map.Entry entry : titles.entrySet()) { - Integer title_sale_id = entry.getKey(); - TextComponent idx = Component.text("[" + title_sale_id + "] "); - SaleTitle title = entry.getValue(); - Line line = Line.create(); - Component button = Button.create("购买").setExecuteCommand("/mplt buy " + title_sale_id).build(); - line.append(idx) - .append(title.getTitle()) - .append("价格:" + title.getPrice() + " 有效期:" + (title.getDays() == -1 ? "永久" : title.getDays() + "天")) - .append("售卖截止:" + title.getSaleEndAt()) - .append("剩余:" + ((title.getAmount() == -1) ? "无限" : title.getAmount())) - .append(button); - view.add(line); - } - view.showOn(player, page); - } - - public static void deleteTitle(Integer id) { - String sql = ""; - sql += "DELETE FROM mplt_title_shop WHERE id = " + id + ";"; - MiniPlayerTitle.database.query(sql); - } - - public static Map getSaleTitles() { - String sql = ""; - sql += "SELECT "; - sql += "id, "; - sql += "title_id, "; - sql += "price, "; - sql += "days, "; - sql += "amount, "; - sql += "sale_end_at "; - sql += "FROM mplt_title_shop;"; - Map titles = new HashMap<>(); - try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { - while (rs != null && rs.next()) { - Integer id = rs.getInt("id"); - Integer title_id = rs.getInt("title_id"); - Integer price = rs.getInt("price"); - Integer days = rs.getInt("days"); - Integer amount = rs.getInt("amount"); - Long sale_end_at = rs.getLong("sale_end_at"); - SaleTitle title = new SaleTitle(id, title_id, price, days, amount, sale_end_at); - titles.put(id, title); - } - } catch (Exception e) { - MiniPlayerTitle.logger.err("XPlayer getTitles failed: " + e.getMessage()); - } - return titles; - } -} diff --git a/src/main/java/cn/lunadeer/miniplayertitle/XPlayer.java b/src/main/java/cn/lunadeer/miniplayertitle/XPlayer.java deleted file mode 100644 index 4f27953..0000000 --- a/src/main/java/cn/lunadeer/miniplayertitle/XPlayer.java +++ /dev/null @@ -1,258 +0,0 @@ -package cn.lunadeer.miniplayertitle; - -import cn.lunadeer.minecraftpluginutils.stui.ListView; -import cn.lunadeer.minecraftpluginutils.stui.components.Button; -import cn.lunadeer.minecraftpluginutils.stui.components.Line; -import cn.lunadeer.miniplayertitle.utils.Time; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.TextComponent; -import org.bukkit.entity.Player; - -import java.sql.ResultSet; -import java.util.*; - -public class XPlayer { - private final Player _player; - private Integer _coin; - private final Map _titles; - private Integer _current_title_id = -1; - - public XPlayer(Player player) { - _player = player; - _titles = getTitles(player.getUniqueId()); - getInfo(); - checkTitleValid(); - } - - public PlayerTitle getTitle() { - if (_current_title_id == -1) { - return null; - } - return _titles.get(_current_title_id); - } - - public void openBackpack(Integer page) { - Collection titles = getTitles(_player.getUniqueId()).values(); - ListView view = ListView.create(5, "/mplt list"); - view.title("我的称号"); - for (PlayerTitle title : titles) { - int title_id = title.getId(); - TextComponent idx = Component.text("[" + title_id + "] "); - Line line = Line.create(); - boolean is_using = Objects.equals(title.getId(), _current_title_id); - Component button = Button.create(is_using ? "卸下" : "使用").setExecuteCommand("/mplt use " + (is_using ? -1 : title.getId())).build(); - line.append(idx) - .append(title.getTitle()) - .append(Component.text("有效期至:" + title.getExpireAtStr())) - .append(button); - view.add(line); - } - view.showOn(_player, page); - } - - public void updateUsingTitle(Integer title_id) { - _current_title_id = title_id; - checkTitleValid(); - String sql = ""; - sql += "UPDATE mplt_player_info "; - sql += "SET using_title_id = " + _current_title_id + " "; - sql += "WHERE uuid = '" + _player.getUniqueId() + "';"; - MiniPlayerTitle.database.query(sql); - updateName(); - if (_current_title_id == -1) { - MiniPlayerTitle.notification.info(_player, "成功卸下称号"); - return; - } - MiniPlayerTitle.notification.info(_player, Component.text("成功使用称号: ").append(_titles.get(_current_title_id).getTitle())); - } - - private void checkTitleValid() { - if (_current_title_id == -1) { - return; - } - if (!_titles.containsKey(_current_title_id)) { - MiniPlayerTitle.notification.error(_player, "称号 " + _current_title_id + " 不存在"); - _current_title_id = -1; - return; - } - PlayerTitle title = _titles.get(_current_title_id); - if (title.isExpired()) { - MiniPlayerTitle.notification.error(_player, title.getTitle().append(Component.text(" 称号已过期"))); - _current_title_id = -1; - } - } - - public void set_coin(Integer coin) { - _coin = coin; - String sql = ""; - sql += "UPDATE mplt_player_info "; - sql += "SET coin = " + coin + " "; - sql += "WHERE uuid = '" + _player.getUniqueId().toString() + "';"; - MiniPlayerTitle.database.query(sql); - } - - public void add_coin(Integer coin) { - set_coin(_coin + coin); - } - - public Integer get_coin() { - return _coin; - } - - public static Integer getCoin(Player player) { - XPlayer xplayer = new XPlayer(player); - return xplayer.get_coin(); - } - - private static Map getTitles(UUID uuid) { - String sql = ""; - sql += "SELECT "; - sql += "title_id, expire_at "; - sql += "FROM mplt_player_title "; - sql += "WHERE player_uuid = '" + uuid.toString() + "';"; - Map titles = new HashMap<>(); - try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { - while (rs != null && rs.next()) { - Integer title_id = rs.getInt("title_id"); - Long expire_at = rs.getLong("expire_at"); - PlayerTitle title = new PlayerTitle(title_id, uuid, expire_at); - titles.put(title_id, title); - } - } catch (Exception e) { - MiniPlayerTitle.logger.err("XPlayer getTitles failed: " + e.getMessage()); - } - return titles; - } - - private void getInfo() { - UUID uuid = _player.getUniqueId(); - String sql = ""; - sql += "SELECT coin, using_title_id "; - sql += "FROM mplt_player_info "; - sql += "WHERE uuid = '" + uuid.toString() + "';"; - this._coin = MiniPlayerTitle.config.getDefaultCoin(); - this._current_title_id = -1; - try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { - if (rs != null && rs.next()) { - this._coin = rs.getInt("coin"); - this._current_title_id = rs.getInt("using_title_id"); - } else { - sql = ""; - sql += "INSERT INTO mplt_player_info (uuid, coin, using_title_id) VALUES ("; - sql += "'" + uuid + "', "; - sql += this._coin + ", "; - sql += this._current_title_id + ");"; - MiniPlayerTitle.database.query(sql); - } - } catch (Exception e) { - MiniPlayerTitle.logger.err("XPlayer getInfo failed: " + e.getMessage()); - } - } - - public void buyTitle(SaleTitle title) { - if (title.isSaleExpired() || title.getDays() == 0) { - MiniPlayerTitle.notification.error(_player, "此称号已停止销售"); - return; - } - if (title.getAmount() != -1 && title.getAmount() <= 0) { - MiniPlayerTitle.notification.error(_player, "此称号已售罄"); - return; - } - if (title.getPrice() > _coin) { - MiniPlayerTitle.notification.error(_player, "你的余额不足"); - return; - } - PlayerTitle title_bought = null; - if (_titles.containsKey(title.getId())) { - if (!_titles.get(title.getId()).isExpired()) { - MiniPlayerTitle.notification.warn(_player, "你已经拥有此称号"); - return; - } - title_bought = _titles.get(title.getId()); - } else { - title_bought = PlayerTitle.create(title.getId(), _player.getUniqueId()); - } - if (title_bought == null) { - MiniPlayerTitle.notification.error(_player, "购买失败"); - return; - } - set_coin(_coin - title.getPrice()); - if (title.getAmount() > 0) { - SaleTitle.setAmount(title.getId(), title.getAmount() - 1); - } - MiniPlayerTitle.notification.info(_player, Component.text("成功购买称号: ").append(title.getTitle())); - MiniPlayerTitle.notification.info(_player, "花费: " + title.getPrice() + "称号币,余额: " + _coin + "称号币"); - - if (title.getDays() == -1) { - title_bought.setExpireAt(-1L); - } else { - Long timestamp = System.currentTimeMillis() + title.getDays() * 24 * 60 * 60 * 1000L; - title_bought.setExpireAt((long) Time.getFromTimestamp(timestamp)); - } - MiniPlayerTitle.notification.info(_player, title.getTitle().append(Component.text(" 已购买至 " + title_bought.getExpireAtStr()))); - } - - public void custom(String title_str) { - if (this.get_coin() < MiniPlayerTitle.config.getCustomCost()) { - MiniPlayerTitle.notification.error(this._player, "称号币不足"); - return; - } - List exist_titles = new ArrayList<>(); - for (Title title : Title.all()) { - exist_titles.add(title.getTitleContent()); - } - Title title = Title.create(title_str, this._player.getName() + "的自定义称号"); - if (title == null) { - MiniPlayerTitle.notification.error(this._player, "创建称号失败"); - return; - } - if (title.getTitleContent().length() > MiniPlayerTitle.config.getMaxLength()) { - MiniPlayerTitle.notification.error(this._player, "称号长度超过限制,最大字符长度(不含颜色代码): " + MiniPlayerTitle.config.getMaxLength()); - Title.delete(title.getId()); - return; - } - if (exist_titles.contains(title.getTitleContent())) { - MiniPlayerTitle.notification.error(this._player, "已存在同名称号"); - Title.delete(title.getId()); - return; - } - PlayerTitle playerTitle = PlayerTitle.create(title.getId(), this._player.getUniqueId()); - if (playerTitle == null) { - MiniPlayerTitle.notification.error(this._player, "创建称号失败"); - Title.delete(title.getId()); - return; - } - playerTitle.setExpireAt(-1L); - this.set_coin(this.get_coin() - MiniPlayerTitle.config.getCustomCost()); - MiniPlayerTitle.notification.info(this._player, Component.text("成功创建自定义称号: ").append(title.getTitle())); - MiniPlayerTitle.notification.info(this._player, "花费: " + MiniPlayerTitle.config.getCustomCost() + "称号币,余额: " + this.get_coin() + "称号币"); - } - - public void updateName() { - PlayerTitle title = getTitle(); - if (title == null) { - Component newDisplayName = Component.text() - .append(Component.text("<")) - .append(_player.name()) - .append(Component.text("> ")).build(); - Component newListName = Component.text() - .append(_player.name()).build(); - _player.displayName(newDisplayName); - _player.playerListName(newListName); - return; - } - - Component titleComponent = title.getTitle(); - 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/commands/Apis.java b/src/main/java/cn/lunadeer/miniplayertitle/commands/Apis.java index 37b7c32..bcccb29 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/commands/Apis.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/commands/Apis.java @@ -1,9 +1,13 @@ package cn.lunadeer.miniplayertitle.commands; 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.entity.Player; +import javax.annotation.Nullable; + public class Apis { public static boolean notOpOrConsole(CommandSender sender) { if (sender instanceof Player) { @@ -15,4 +19,31 @@ public class Apis { } return false; } + + public static void updateName(Player player, @Nullable TitleDTO title) { + if (title == null) { + Component newDisplayName = Component.text() + .append(Component.text("<")) + .append(player.name()) + .append(Component.text("> ")).build(); + Component newListName = Component.text() + .append(player.name()).build(); + player.displayName(newDisplayName); + player.playerListName(newListName); + return; + } + + 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/commands/PlayerCommands.java b/src/main/java/cn/lunadeer/miniplayertitle/commands/PlayerCommands.java deleted file mode 100644 index b9cca8d..0000000 --- a/src/main/java/cn/lunadeer/miniplayertitle/commands/PlayerCommands.java +++ /dev/null @@ -1,94 +0,0 @@ -package cn.lunadeer.miniplayertitle.commands; - -import cn.lunadeer.miniplayertitle.MiniPlayerTitle; -import cn.lunadeer.miniplayertitle.SaleTitle; -import cn.lunadeer.miniplayertitle.Shop; -import cn.lunadeer.miniplayertitle.XPlayer; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class PlayerCommands { - public static void use(CommandSender sender, String[] args) { - if (!(sender instanceof org.bukkit.entity.Player)) { - MiniPlayerTitle.logger.warn("该命令只能由玩家执行"); - return; - } - org.bukkit.entity.Player player = (org.bukkit.entity.Player) sender; - if (args.length != 2) { - MiniPlayerTitle.notification.warn(player, "用法: /mplt use <称号ID>"); - return; - } - - XPlayer xPlayer = new XPlayer(player); - Integer title_id = Integer.parseInt(args[1]); - xPlayer.updateUsingTitle(title_id); - } - - public static void list(CommandSender sender, String[] args) { - if (!(sender instanceof org.bukkit.entity.Player)) { - MiniPlayerTitle.logger.warn("该命令只能由玩家执行"); - return; - } - org.bukkit.entity.Player player = (org.bukkit.entity.Player) sender; - int page = 1; - if (args.length == 2) { - try { - page = Integer.parseInt(args[1]); - } catch (Exception e) { - MiniPlayerTitle.notification.error(player, "页数格式错误"); - return; - } - } - XPlayer xPlayer = new XPlayer(player); - xPlayer.openBackpack(page); - } - - public static void shop(CommandSender sender, String[] args) { - int page = 1; - if (args.length == 2) { - try { - page = Integer.parseInt(args[1]); - } catch (Exception ignored) { - } - } - Shop.open(sender, page); - } - - public static void buy(CommandSender sender, String[] args) { - if (!(sender instanceof org.bukkit.entity.Player)) { - MiniPlayerTitle.logger.warn("该命令只能由玩家执行"); - return; - } - org.bukkit.entity.Player player = (org.bukkit.entity.Player) sender; - if (args.length != 2) { - MiniPlayerTitle.notification.warn(player, "用法: /mplt buy <称号ID>"); - return; - } - XPlayer xPlayer = new XPlayer(player); - Integer sale_id = Integer.parseInt(args[1]); - SaleTitle saleTitle = Shop.getSaleTitles().get(sale_id); - if (saleTitle == null) { - MiniPlayerTitle.notification.error(player, "该称号不存在"); - return; - } - xPlayer.buyTitle(saleTitle); - } - - public static void custom(CommandSender sender, String[] args) { - if (!(sender instanceof org.bukkit.entity.Player)) { - MiniPlayerTitle.logger.warn("该命令只能由玩家执行"); - return; - } - Player player = (Player) sender; - if (args.length != 2) { - MiniPlayerTitle.notification.warn(player, "用法: /mplt custom <称号>"); - return; - } - if (!MiniPlayerTitle.config.isEnableCustom()) { - MiniPlayerTitle.notification.error(player, "自定义称号功能已关闭"); - return; - } - XPlayer xPlayer = new XPlayer(player); - xPlayer.custom(args[1]); - } -} diff --git a/src/main/java/cn/lunadeer/miniplayertitle/commands/TitleManage.java b/src/main/java/cn/lunadeer/miniplayertitle/commands/TitleManage.java index 8d4610d..dab76a9 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/commands/TitleManage.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/commands/TitleManage.java @@ -1,11 +1,15 @@ package cn.lunadeer.miniplayertitle.commands; import cn.lunadeer.miniplayertitle.MiniPlayerTitle; +import cn.lunadeer.miniplayertitle.dtos.PlayerInfoDTO; import cn.lunadeer.miniplayertitle.dtos.TitleDTO; +import cn.lunadeer.miniplayertitle.tuis.MyTitles; import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; import static cn.lunadeer.miniplayertitle.commands.Apis.notOpOrConsole; +import static cn.lunadeer.miniplayertitle.commands.Apis.updateName; public class TitleManage { /** @@ -109,4 +113,41 @@ public class TitleManage { MiniPlayerTitle.notification.error(sender, e.getMessage()); } } + + /** + * 使用称号 + * mplt use_title <称号ID> [页码] + * + * @param sender CommandSender + * @param args String[] + */ + public static void useTitle(CommandSender sender, String[] args) { + if (notOpOrConsole(sender)) return; + if (args.length < 2) { + MiniPlayerTitle.notification.warn(sender, "用法: /mplt use_title <称号ID> [页码]"); + return; + } + TitleDTO title = TitleDTO.get(Integer.parseInt(args[1])); + if (title == null) { + MiniPlayerTitle.notification.error(sender, "称号不存在"); + return; + } + PlayerInfoDTO playerInfo = PlayerInfoDTO.get(((Player) sender).getUniqueId()); + if (playerInfo == null) { + MiniPlayerTitle.notification.error(sender, "获取玩家信息时出现错误"); + return; + } + boolean success = playerInfo.setUsingTitle(title); + if (success) { + updateName((Player) sender, title); + MiniPlayerTitle.notification.info(sender, "已使用称号"); + } else { + MiniPlayerTitle.notification.error(sender, "使用称号失败,具体请查看控制台日志"); + } + + if (args.length == 3) { + int page = Integer.parseInt(args[2]); + MyTitles.show(sender, new String[]{"my_titles", String.valueOf(page)}); + } + } } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/commands/TitleShopSale.java b/src/main/java/cn/lunadeer/miniplayertitle/commands/TitleShopSale.java index fa37b19..6f5dc16 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/commands/TitleShopSale.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/commands/TitleShopSale.java @@ -1,12 +1,19 @@ package cn.lunadeer.miniplayertitle.commands; import cn.lunadeer.miniplayertitle.MiniPlayerTitle; +import cn.lunadeer.miniplayertitle.dtos.PlayerInfoDTO; +import cn.lunadeer.miniplayertitle.dtos.PlayerTitleDTO; import cn.lunadeer.miniplayertitle.dtos.TitleDTO; import cn.lunadeer.miniplayertitle.dtos.TitleShopDTO; +import cn.lunadeer.miniplayertitle.tuis.MyTitles; import cn.lunadeer.miniplayertitle.tuis.SaleInfo; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + import static cn.lunadeer.miniplayertitle.commands.Apis.notOpOrConsole; import static cn.lunadeer.miniplayertitle.tuis.Apis.getLastArgsPage; @@ -44,14 +51,13 @@ public class TitleShopSale { int day = Integer.parseInt(date[2]); success = titleShop.setSaleEndAt(year, month, day); break; - case "end_at_y": - success = titleShop.setSaleEndAtY(Integer.parseInt(args[3])); + case "more_end_at": + int days = Integer.parseInt(args[3]); + success = titleShop.setSaleEndAt(titleShop.getSaleEndAt().plusDays(days)); break; - case "end_at_m": - success = titleShop.setSaleEndAtM(Integer.parseInt(args[3])); - break; - case "end_at_d": - success = titleShop.setSaleEndAtD(Integer.parseInt(args[3])); + case "less_end_at": + int days2 = Integer.parseInt(args[3]); + success = titleShop.setSaleEndAt(titleShop.getSaleEndAt().minusDays(days2)); break; default: MiniPlayerTitle.notification.warn(sender, "用法: /mplt set_sale <商品ID> <值> [页数]"); @@ -118,4 +124,70 @@ public class TitleShopSale { } } + /** + * 购买商品 + * mplt buy_sale <商品ID> + * + * @param sender + * @param args + */ + public static void buySale(CommandSender sender, String[] args) { + if (!(sender instanceof Player)) { + MiniPlayerTitle.notification.error(sender, "该命令只能由玩家执行"); + return; + } + Player player = (Player) sender; + PlayerInfoDTO playerInfo = PlayerInfoDTO.get(player.getUniqueId()); + if (playerInfo == null) { + MiniPlayerTitle.notification.error(player, "获取玩家信息时出现错误,详情请查看控制台日志"); + return; + } + TitleShopDTO titleShop = TitleShopDTO.get(Integer.valueOf(args[1])); + if (titleShop == null) { + MiniPlayerTitle.notification.error(player, "获取详情时出现错误,详情请查看控制台日志"); + return; + } + + if (titleShop.isExpired() || titleShop.getDays() == 0) { + MiniPlayerTitle.notification.error(player, "此称号已停止销售"); + return; + } + if (titleShop.getAmount() != -1 && titleShop.getAmount() <= 0) { + MiniPlayerTitle.notification.error(player, "此称号已售罄"); + return; + } + if (titleShop.getPrice() > playerInfo.getCoin()) { + MiniPlayerTitle.notification.error(player, "你的余额不足"); + return; + } + + List playerTitles = PlayerTitleDTO.getAllOf(player.getUniqueId()); + PlayerTitleDTO had = null; + for (PlayerTitleDTO playerTitle : playerTitles) { + if (Objects.equals(playerTitle.getTitle().getId(), titleShop.getTitle().getId())) { + had = playerTitle; + break; + } + } + + if (had == null) { + had = PlayerTitleDTO.create(player.getUniqueId(), titleShop.getTitle(), LocalDateTime.now().plusDays(titleShop.getDays())); + if (had == null) { + MiniPlayerTitle.notification.error(player, "购买称号时出现错误,详情请查看控制台日志"); + return; + } + MiniPlayerTitle.notification.info(player, "成功购买称号: " + had.getTitle().getTitleColored()); + } else if (!had.isExpired()) { + MiniPlayerTitle.notification.warn(player, "你已拥有此称号,在过期前无法再次购买"); + } else { + had.setExpireAt(LocalDateTime.now().plusDays(titleShop.getDays())); + MiniPlayerTitle.notification.info(player, "成功续续期称号: " + had.getTitle().getTitleColored()); + } + + if (args.length == 2) { + int page = getLastArgsPage(args); + MyTitles.show(sender, new String[]{"my_titles", String.valueOf(page)}); + } + } + } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerInfoDTO.java b/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerInfoDTO.java index 9bd9cf8..5445029 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerInfoDTO.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerInfoDTO.java @@ -1,7 +1,6 @@ package cn.lunadeer.miniplayertitle.dtos; import cn.lunadeer.miniplayertitle.MiniPlayerTitle; -import org.jetbrains.annotations.Nullable; import java.sql.ResultSet; import java.sql.SQLException; diff --git a/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerTitleDTO.java b/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerTitleDTO.java new file mode 100644 index 0000000..e4f115e --- /dev/null +++ b/src/main/java/cn/lunadeer/miniplayertitle/dtos/PlayerTitleDTO.java @@ -0,0 +1,114 @@ +package cn.lunadeer.miniplayertitle.dtos; + +import cn.lunadeer.miniplayertitle.MiniPlayerTitle; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class PlayerTitleDTO { + private Integer id; + private UUID player_uuid; + private TitleDTO title; + private LocalDateTime expire_at; + + public Integer getId() { + return id; + } + + public TitleDTO getTitle() { + return title; + } + + public UUID getPlayer_uuid() { + return player_uuid; + } + + public LocalDateTime getExpireAt() { + return expire_at; + } + + public boolean setExpireAt(LocalDateTime dateTime) { + String sql = ""; + sql += "UPDATE mplt_player_title SET expire_at_y = " + dateTime.getYear() + ", expire_at_m = " + dateTime.getMonthValue() + ", expire_at_d = " + dateTime.getDayOfMonth() + " " + + "WHERE id = " + id + ";"; + try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { + return true; + } catch (Exception e) { + MiniPlayerTitle.database.handleDatabaseError("设置玩家称号过期时间失败", e, sql); + } + return false; + } + + public static PlayerTitleDTO create(UUID player_uuid, TitleDTO title, LocalDateTime expire_at) { + String sql = ""; + sql += "INSERT INTO mplt_player_title (player_uuid, title_id, expire_at_y, expire_at_m, expire_at_d) " + + "VALUES ('" + player_uuid.toString() + "', " + title.getId() + ", " + expire_at.getYear() + ", " + expire_at.getMonthValue() + ", " + expire_at.getDayOfMonth() + ") " + + "RETURNING " + + "id, player_uuid, title_id, expire_at_y, expire_at_m, expire_at_d;"; + try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { + if (rs.next()) { + return getRs(rs); + } + } catch (Exception e) { + MiniPlayerTitle.database.handleDatabaseError("创建玩家称号失败", e, sql); + } + return null; + } + + public static PlayerTitleDTO get(Integer id) { + String sql = ""; + sql += "SELECT id, player_uuid, title_id, expire_at_y, expire_at_m, expire_at_d FROM mplt_player_title " + + "WHERE id = " + id + ";"; + try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { + if (rs.next()) { + return getRs(rs); + } + } catch (Exception e) { + MiniPlayerTitle.database.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.title = TitleDTO.get(rs.getInt("title_id")); + int y = rs.getInt("expire_at_y"); + int m = rs.getInt("expire_at_m"); + int d = rs.getInt("expire_at_d"); + if (y == -1 && m == -1 && d == -1) { + playerTitle.expire_at = null; + } else { + playerTitle.expire_at = LocalDateTime.of(y, m, d, 0, 0, 0); + } + return playerTitle; + } + + public static List getAllOf(UUID player_uuid) { + 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 = '" + player_uuid.toString() + "';"; + List playerTitles = new ArrayList<>(); + try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { + while (rs.next()) { + playerTitles.add(getRs(rs)); + } + } catch (Exception e) { + MiniPlayerTitle.database.handleDatabaseError("获取玩家称号失败", e, sql); + } + return playerTitles; + } + + public boolean isExpired() { + if (expire_at == null) { + return false; + } else { + return expire_at.isBefore(LocalDateTime.now()); + } + } +} diff --git a/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleDTO.java b/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleDTO.java index ddcf21a..4e1da35 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleDTO.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleDTO.java @@ -5,7 +5,6 @@ import cn.lunadeer.miniplayertitle.MiniPlayerTitle; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.event.HoverEvent; -import org.jetbrains.annotations.Nullable; import java.sql.ResultSet; import java.sql.SQLException; diff --git a/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleShopDTO.java b/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleShopDTO.java index ee50597..bdfb6bb 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleShopDTO.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/dtos/TitleShopDTO.java @@ -3,6 +3,7 @@ package cn.lunadeer.miniplayertitle.dtos; import cn.lunadeer.miniplayertitle.MiniPlayerTitle; import java.sql.ResultSet; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -12,9 +13,7 @@ public class TitleShopDTO { private Integer price; private Integer days; private Integer amount; - private Integer sale_end_at_y; - private Integer sale_end_at_m; - private Integer sale_end_at_d; + private LocalDateTime sale_end_at; public Integer getId() { return id; @@ -69,47 +68,17 @@ public class TitleShopDTO { return false; } - public Integer getSaleEndAtY() { - return sale_end_at_y; + public LocalDateTime getSaleEndAt() { + return sale_end_at; } - public boolean setSaleEndAtY(int sale_end_at_y) { + public boolean setSaleEndAt(LocalDateTime dateTime) { String sql = ""; - sql += "UPDATE mplt_title_shop SET sale_end_at_y = " + sale_end_at_y + " WHERE id = " + id + ";"; + sql += "UPDATE mplt_title_shop SET sale_end_at_y = " + dateTime.getYear() + ", sale_end_at_m = " + dateTime.getMonthValue() + ", sale_end_at_d = " + dateTime.getDayOfMonth() + " WHERE id = " + id + ";"; try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { return true; } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("设置称号商店销售结束年份失败", e, sql); - } - return false; - } - - public Integer getSaleEndAtM() { - return sale_end_at_m; - } - - public boolean setSaleEndAtM(int sale_end_at_m) { - String sql = ""; - sql += "UPDATE mplt_title_shop SET sale_end_at_m = " + sale_end_at_m + " WHERE id = " + id + ";"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { - return true; - } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("设置称号商店销售结束月份失败", e, sql); - } - return false; - } - - public Integer getSaleEndAtD() { - return sale_end_at_d; - } - - public boolean setSaleEndAtD(int sale_end_at_d) { - String sql = ""; - sql += "UPDATE mplt_title_shop SET sale_end_at_d = " + sale_end_at_d + " WHERE id = " + id + ";"; - try (ResultSet rs = MiniPlayerTitle.database.query(sql)) { - return true; - } catch (Exception e) { - MiniPlayerTitle.database.handleDatabaseError("设置称号商店销售结束日期失败", e, sql); + MiniPlayerTitle.database.handleDatabaseError("设置称号商店销售结束时间失败", e, sql); } return false; } @@ -160,9 +129,14 @@ public class TitleShopDTO { titleShop.price = rs.getInt("price"); titleShop.days = rs.getInt("days"); titleShop.amount = rs.getInt("amount"); - titleShop.sale_end_at_y = rs.getInt("sale_end_at_y"); - titleShop.sale_end_at_m = rs.getInt("sale_end_at_m"); - titleShop.sale_end_at_d = rs.getInt("sale_end_at_d"); + int y = rs.getInt("sale_end_at_y"); + int m = rs.getInt("sale_end_at_m"); + int d = rs.getInt("sale_end_at_d"); + if (y == -1 && m == -1 && d == -1) { + titleShop.sale_end_at = null; + } else { + titleShop.sale_end_at = LocalDateTime.of(y, m, d, 0, 0, 0); + } return titleShop; } @@ -193,4 +167,9 @@ public class TitleShopDTO { return false; } + public boolean isExpired() { + if (sale_end_at == null) return false; + return LocalDateTime.now().isAfter(sale_end_at); + } + } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/tuis/MyTitles.java b/src/main/java/cn/lunadeer/miniplayertitle/tuis/MyTitles.java index 1497ada..ccf676d 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/tuis/MyTitles.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/tuis/MyTitles.java @@ -1,8 +1,17 @@ package cn.lunadeer.miniplayertitle.tuis; +import cn.lunadeer.minecraftpluginutils.stui.ListView; +import cn.lunadeer.minecraftpluginutils.stui.components.Button; +import cn.lunadeer.minecraftpluginutils.stui.components.Line; +import cn.lunadeer.miniplayertitle.MiniPlayerTitle; +import cn.lunadeer.miniplayertitle.dtos.PlayerInfoDTO; +import cn.lunadeer.miniplayertitle.dtos.PlayerTitleDTO; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import java.util.List; +import java.util.Objects; + import static cn.lunadeer.miniplayertitle.tuis.Apis.getLastArgsPage; import static cn.lunadeer.miniplayertitle.tuis.Apis.playerOnly; @@ -11,6 +20,34 @@ public class MyTitles { Player player = playerOnly(sender); if (player == null) return; int page = getLastArgsPage(args); - // todo + + PlayerInfoDTO playerInfo = PlayerInfoDTO.get(player.getUniqueId()); + if (playerInfo == null) { + MiniPlayerTitle.notification.error(player, "获取玩家信息时出现错误,详情请查看控制台日志"); + return; + } + List titles = PlayerTitleDTO.getAllOf(player.getUniqueId()); + ListView view = ListView.create(10, "/mplt my_titles"); + view.title("称号背包"); + view.navigator(Line.create() + .append(Button.create("主菜单").setExecuteCommand("/mplt menu").build()) + .append("称号背包")); + + for (PlayerTitleDTO title : titles) { + if (title == null) { + continue; + } + Line line = Line.create() + .append(title.getTitle().getTitleColored()) + .append("有效期至: " + title.getExpireAt().getYear() + "年" + title.getExpireAt().getMonthValue() + "月" + title.getExpireAt().getDayOfMonth() + "日"); + if (Objects.equals(playerInfo.getUsingTitle().getId(), title.getId())) { + line.append(Button.createRed("卸下").setExecuteCommand("/mplt use_title -1 " + page).build()); + } else { + line.append(Button.createGreen("使用").setExecuteCommand("/mplt use_title " + title.getId() + " " + page).build()); + } + view.add(line); + } + + view.showOn(player, page); } } diff --git a/src/main/java/cn/lunadeer/miniplayertitle/tuis/SaleInfo.java b/src/main/java/cn/lunadeer/miniplayertitle/tuis/SaleInfo.java index e0bca8e..9300577 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/tuis/SaleInfo.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/tuis/SaleInfo.java @@ -7,13 +7,13 @@ import cn.lunadeer.minecraftpluginutils.stui.components.NumChanger; import cn.lunadeer.miniplayertitle.MiniPlayerTitle; import cn.lunadeer.miniplayertitle.dtos.TitleDTO; import cn.lunadeer.miniplayertitle.dtos.TitleShopDTO; -import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.time.LocalDateTime; -import static cn.lunadeer.miniplayertitle.tuis.Apis.*; +import static cn.lunadeer.miniplayertitle.tuis.Apis.getArgPage; +import static cn.lunadeer.miniplayertitle.tuis.Apis.playerOnly; public class SaleInfo { public static void show(CommandSender sender, String[] args) { @@ -92,31 +92,32 @@ public class SaleInfo { view.add(amount); Line end_at = Line.create().append("售卖结束时间: "); - if (titleShop.getSaleEndAtY() == -1 || titleShop.getSaleEndAtM() == -1 || titleShop.getSaleEndAtD() == -1) { + if (titleShop.getSaleEndAt() == null) { end_at.append("常驻"); if (player.isOp()) { end_at.append(Button.create("转为限时").setExecuteCommand("/mplt set_sale end_at " + titleShop.getId() + " " + now_year + ":" + now_month + ":" + now_day + " " + page).build()); } } else { if (player.isOp()) { - end_at.append(NumChanger.create(titleShop.getSaleEndAtY(), "/mplt set_sale end_at_y " + titleShop.getId()).setPageNumber(page).build().append(Component.text("年"))); - end_at.append(NumChanger.create(titleShop.getSaleEndAtM(), "/mplt set_sale end_at_m " + titleShop.getId()).setPageNumber(page).build().append(Component.text("月"))); - end_at.append(NumChanger.create(titleShop.getSaleEndAtD(), "/mplt set_sale end_at_d " + titleShop.getId()).setPageNumber(page).build().append(Component.text("日"))); + end_at.append(Button.create("<<").setHoverText("提前10天").setExecuteCommand("/mplt set_sale less_end_at " + titleShop.getId() + " 10 " + page).build()); + end_at.append(Button.create("-").setHoverText("提前1天").setExecuteCommand("/mplt set_sale less_end_at " + titleShop.getId() + " 1 " + page).build()); + end_at.append(titleShop.getSaleEndAt().getYear() + "年" + titleShop.getSaleEndAt().getMonthValue() + "月" + titleShop.getSaleEndAt().getDayOfMonth() + "日"); + end_at.append(Button.create("+").setHoverText("延后1天").setExecuteCommand("/mplt set_sale more_end_at " + titleShop.getId() + " 1 " + page).build()); + end_at.append(Button.create(">>").setHoverText("延后10天").setExecuteCommand("/mplt set_sale more_end_at " + titleShop.getId() + " 10 " + page).build()); end_at.append(Button.create("转为常驻").setExecuteCommand("/mplt set_sale end_at " + titleShop.getId() + " -1:-1:-1 " + page).build()); } else { - end_at.append(titleShop.getSaleEndAtY() + "年" + titleShop.getSaleEndAtM() + "月" + titleShop.getSaleEndAtD() + "日"); + end_at.append(titleShop.getSaleEndAt().getYear() + "年" + titleShop.getSaleEndAt().getMonthValue() + "月" + titleShop.getSaleEndAt().getDayOfMonth() + "日"); } } view.add(end_at); Line operate = Line.create().append("操作: "); - if (titleShop.getSaleEndAtY() != -1 && titleShop.getSaleEndAtM() != -1 && titleShop.getSaleEndAtD() != -1 - && (now_year > titleShop.getSaleEndAtY() || (now_year == titleShop.getSaleEndAtY() && now_month > titleShop.getSaleEndAtM()) || (now_year == titleShop.getSaleEndAtY() && now_month == titleShop.getSaleEndAtM() && now_day > titleShop.getSaleEndAtD()))) { - operate.append(Button.createRed("已过期").build()); + if (titleShop.isExpired()) { + operate.append(Button.createRed("已结束").build()); } else if (titleShop.getAmount() == 0) { operate.append(Button.createRed("已售罄").build()); } else { - operate.append(Button.createGreen("购买").setExecuteCommand("/mplt buy_title " + args[1]).build()); + operate.append(Button.createGreen("购买").setExecuteCommand("/mplt buy_sale " + titleShop.getId()).build()); } if (player.isOp()) { operate.append(Button.create("删除").setExecuteCommand("/mplt delete_sale " + args[1] + " " + page).build()); diff --git a/src/main/java/cn/lunadeer/miniplayertitle/tuis/Shop.java b/src/main/java/cn/lunadeer/miniplayertitle/tuis/Shop.java index f95c438..09cb480 100644 --- a/src/main/java/cn/lunadeer/miniplayertitle/tuis/Shop.java +++ b/src/main/java/cn/lunadeer/miniplayertitle/tuis/Shop.java @@ -3,8 +3,6 @@ package cn.lunadeer.miniplayertitle.tuis; import cn.lunadeer.minecraftpluginutils.stui.ListView; import cn.lunadeer.minecraftpluginutils.stui.components.Button; import cn.lunadeer.minecraftpluginutils.stui.components.Line; -import cn.lunadeer.miniplayertitle.MiniPlayerTitle; -import cn.lunadeer.miniplayertitle.dtos.TitleDTO; import cn.lunadeer.miniplayertitle.dtos.TitleShopDTO; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player;