From 6715fbf1b79c563c72e6fb3342682b8a9a77979a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=BB=E9=AD=82=E5=9C=A3=E4=BD=BF?= Date: Fri, 20 Dec 2024 05:01:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=95=E5=85=A5remove=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Commands/ZbCommand.java | 91 ++++++++++++++----- 1 file changed, 68 insertions(+), 23 deletions(-) diff --git a/src/main/java/ling/coordinateRecorder/Commands/ZbCommand.java b/src/main/java/ling/coordinateRecorder/Commands/ZbCommand.java index ebadade..53e2b55 100644 --- a/src/main/java/ling/coordinateRecorder/Commands/ZbCommand.java +++ b/src/main/java/ling/coordinateRecorder/Commands/ZbCommand.java @@ -14,16 +14,19 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BookMeta; import org.jetbrains.annotations.NotNull; +import org.jooq.impl.DSL; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import static ling.database.tables.LocationnotepadTB.LOCATIONNOTEPAD; + /// zb命令处理器 public class ZbCommand implements CommandExecutor, TabCompleter { - protected final static List TAB_1 = Arrays.asList("add", "remove", "help", "reload"); + protected final static List TAB_1 = Arrays.asList("add", "remove", "help", "reload", "list"); public ZbCommand() { @@ -53,14 +56,62 @@ public class ZbCommand implements CommandExecutor, TabCompleter { return; } try { - if (data.addLocation(name, isFixed)) - player.sendMessage("坐标记录完毕!"); + if (data.addLocation(name, isFixed)) player.sendMessage("坐标记录完毕!"); } catch (SQLException e) { CoordinateRecorder.getCurrent().getLogger().severe("记录坐标出错:" + e.getMessage()); player.sendMessage(ChatColor.RED + "服务器内部错误:记录数据失败"); } } + protected void list(Player player, String[] strings) throws SQLException { + if (strings.length > 2) { + player.sendMessage(ChatColor.RED + "命令过长"); + return; + } + PlayerData data = PlayerMap.getCurrent().getPlayerData(player); + if (data == null) { + player.sendMessage(ChatColor.RED + "玩家未登录"); + return; + } + int page = 1; + if (strings.length == 2) { + try { + page = Integer.parseInt(strings[1]); + if (page < 1) { + player.sendMessage(ChatColor.RED + "Page小于1!"); + } + } catch (NumberFormatException e) { + player.sendMessage(ChatColor.RED + strings[1] + "无法解析为数字!"); + } + } + + final int PAGE_SIZE = 8; + //开始查询数据 + var ctx = CoordinateRecorder.getDatabase().getDSL(); + + Integer count = ctx.select(DSL.count()).from(LOCATIONNOTEPAD) + .where(LOCATIONNOTEPAD.UID.eq(player.getUniqueId().toString()) + .and(LOCATIONNOTEPAD.ISDELETE.eq(false))) + .fetchOne(DSL.count()); + assert count != null; + int pageCount = (count / PAGE_SIZE) + (count % PAGE_SIZE == 0 ? 0 : 1); + + if (pageCount < page) { + player.sendMessage(ChatColor.RED + "没有第" + page + "页数据"); + return; + } + + List result = ctx.select().from(LOCATIONNOTEPAD) + .where(LOCATIONNOTEPAD.UID.eq(player.getUniqueId().toString()).and(LOCATIONNOTEPAD.ISDELETE.eq(false))) + .orderBy(LOCATIONNOTEPAD.ID.asc()) + .limit(PAGE_SIZE).offset(PAGE_SIZE * (page - 1)).fetch().into(LocationnotepadPO.class); + player.sendMessage("共查询到" + result.size() + "条结果:"); + for (LocationnotepadPO po : result) { + player.sendMessage(po.getName() + " X " + po.getX() + " Y " + po.getY() + " Z " + po.getZ()); + } + player.sendMessage("当前第" + page + "页,共" + pageCount + "页"); + } + protected void remove(Player player, String[] strings) { if (strings.length > 2) { player.sendMessage(ChatColor.RED + "命令过长"); @@ -76,8 +127,7 @@ public class ZbCommand implements CommandExecutor, TabCompleter { return; } try { - if (data.removeLocation(strings[1])) - player.sendMessage("操作完成"); + if (data.removeLocation(strings[1])) player.sendMessage("操作完成"); } catch (SQLException e) { CoordinateRecorder.getCurrent().getLogger().severe("移除坐标出错:" + e.getMessage()); player.sendMessage(ChatColor.RED + "服务器内部错误:移除数据失败"); @@ -92,18 +142,10 @@ public class ZbCommand implements CommandExecutor, TabCompleter { bookMeta.setGeneration(BookMeta.Generation.COPY_OF_COPY); bookMeta.setTitle("帮助信息"); bookMeta.setAuthor("StarPoles"); - bookMeta.addPage("欢迎使用坐标管理器!你好," + player.getName() + "\n\n" + - "本书将向你介绍如何使用指令记录曾探索过的地点,以避免迷路\n" + - "如果需要再次查看帮助信息,请使用 /zb help\n", - "/zb add <地点名称> <固定到侧边栏> \n" + - "记录当前地点到数据库中,例如\n" + - "/zb add Home\n" + - "将会记录当前的位置,取名为 Home,并固定到屏幕右侧\n", - "如果不想固定到屏幕右侧,可以像这样使用\n" + - "/zb add Home false\n" + - "然后,你可以使用/zb list来查看已经保存的位置\n" + - "使用/zb fixed 来将地点固定到屏幕右侧\n" + - "使用/zb unfixed 来取消固定。\n"); + bookMeta.addPage( + "欢迎使用坐标管理器!你好," + player.getName() + "\n\n" + "本书将向你介绍如何使用指令记录曾探索过的地点,以避免迷路\n" + "如果需要再次查看帮助信息,请使用 /zb help\n", + "/zb add <地点名称> <固定到侧边栏> \n" + "记录当前地点到数据库中,例如\n" + "/zb add Home\n" + "将会记录当前的位置,取名为 Home,并固定到屏幕右侧\n", + "如果不想固定到屏幕右侧,可以像这样使用\n" + "/zb add Home false\n" + "然后,你可以使用/zb list来查看已经保存的位置\n" + "使用/zb fixed 来将地点固定到屏幕右侧\n" + "使用/zb unfixed 来取消固定。\n"); book.setItemMeta(bookMeta); player.openBook(book); @@ -142,6 +184,9 @@ public class ZbCommand implements CommandExecutor, TabCompleter { case "reload": reload(player, strings); break; + case "list": + list(player, strings); + break; } } catch (SQLException e) { player.sendMessage(ChatColor.RED + "服务器内部错误,请联系管理员"); @@ -151,8 +196,8 @@ public class ZbCommand implements CommandExecutor, TabCompleter { } @Override - public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, - @NotNull String s, @NotNull String[] strings) { + public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, + @NotNull String[] strings) { assert s.equals("zb"); if (!(commandSender instanceof Player player)) { System.out.println("该命令只能由玩家执行"); @@ -163,8 +208,7 @@ public class ZbCommand implements CommandExecutor, TabCompleter { protected List onRemoveTab(Player player, String latest, String[] strings) { var data = PlayerMap.getCurrent().getPlayerData(player); - if (data == null) - return List.of(); + if (data == null) return List.of(); List list = new ArrayList<>(); List poList = data.getLocationList(); for (LocationnotepadPO locationnotepadPO : poList) { @@ -182,11 +226,12 @@ public class ZbCommand implements CommandExecutor, TabCompleter { if (strings.length != 0) { latest = strings[strings.length - 1]; } - if (strings.length == 1) - return filter(latest, new ArrayList<>(TAB_1)); + if (strings.length == 1) return filter(latest, new ArrayList<>(TAB_1)); if (strings.length == 2) { if (strings[0].equals("remove")) { return onRemoveTab(player, latest, strings); + } else if (strings[0].equals("list")) { + return List.of("<页码>"); } } return List.of();