From 53c805c68faf14a743a23ef7cbff7a28f4418cb4 Mon Sep 17 00:00:00 2001 From: youpaishidifu Date: Wed, 22 Jul 2026 21:36:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=A2=86=E5=9C=B0=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E7=BF=BB=E9=A1=B5=E5=A4=8D=E7=94=A8=20lastQueryLocations=20?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E7=9A=84=E5=9D=90=E6=A0=87=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=20getTargetBlockExact=20=E4=B8=8D=E5=87=86=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E6=9F=A5=E6=97=A0=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/Sdf1_login/LandRecordManager.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/Sdf1_login/LandRecordManager.java b/src/main/java/Sdf1_login/LandRecordManager.java index 5b2e541..2782a0a 100644 --- a/src/main/java/Sdf1_login/LandRecordManager.java +++ b/src/main/java/Sdf1_login/LandRecordManager.java @@ -44,6 +44,9 @@ public class LandRecordManager implements Listener { /** 回声碎片物品材质(1.19+ 存在) */ public static final Material ECHO_SHARD_MATERIAL = Material.ECHO_SHARD; + /** 玩家最后一次查询的坐标缓存,翻页导航时复用,避免 getTargetBlockExact 不准 */ + private final Map lastQueryLocations = new ConcurrentHashMap<>(); + /** 记录查询默认条数 */ private static final int QUERY_LIMIT = 20; /** 记录保留天数 */ @@ -293,7 +296,9 @@ public class LandRecordManager implements Listener { p.sendMessage("§c§l[回声碎片] §f你面前没有可查询的方块或容器"); return; } - queryAndPrint(p, target.getLocation()); + Location loc = target.getLocation(); + lastQueryLocations.put(p.getUniqueId(), loc); + queryAndPrint(p, loc); } private void queryAndPrint(Player p, Location loc) { @@ -501,21 +506,33 @@ public class LandRecordManager implements Listener { } Player p = (Player) sender; int page = 0; // 默认今日 + boolean isNav = false; // true=从翻页链接跳转,复用 lastQueryLocations if (args.length >= 2) { try { page = Math.max(0, Integer.parseInt(args[1]) - 1); + isNav = true; } catch (NumberFormatException ignored) { sender.sendMessage("§c§l[回声碎片] §f页码格式错误"); return true; } } - // 取玩家准心对准的方块 + // 翻页时复用上次查询坐标,避免 getTargetBlockExact 玩家未对准 + Location navLoc = isNav ? lastQueryLocations.get(p.getUniqueId()) : null; + if (navLoc != null) { + queryAndPrint(p, navLoc, page); + return true; + } + // 首次查询或缓存过期,取准心方块 Block target = p.getTargetBlockExact(6); if (target == null || target.getType() == Material.AIR) { sender.sendMessage("§c§l[回声碎片] §f你面前没有可查询的方块或容器"); return true; } - queryAndPrint(p, target.getLocation(), page); + Location loc = target.getLocation(); + if (!isNav) { + lastQueryLocations.put(p.getUniqueId(), loc); + } + queryAndPrint(p, loc, page); return true; } sendHelp(sender);