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;