From e3b459a00c5e74daab3f72ba21c36499803167f8 Mon Sep 17 00:00:00 2001 From: youpaishidifu Date: Mon, 13 Jul 2026 14:38:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AE=B9=E5=99=A8=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E4=BB=85=E6=98=BE=E7=A4=BA=E6=89=93=E5=BC=80=EF=BC=9A?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=AD=98=E5=85=A5(put)+=E6=8B=BF=E5=8F=96(ta?= =?UTF-8?q?ke)=E5=B7=AE=E9=87=8F=E8=AE=B0=E5=BD=95=EF=BC=8C=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=E7=B1=BB=E5=9E=8B=E7=BA=B3=E5=85=A5=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/Sdf1_login/LandRecordManager.java | 59 ++++++++++++++----- 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/src/main/java/Sdf1_login/LandRecordManager.java b/src/main/java/Sdf1_login/LandRecordManager.java index 0e242f0..89a0a79 100644 --- a/src/main/java/Sdf1_login/LandRecordManager.java +++ b/src/main/java/Sdf1_login/LandRecordManager.java @@ -184,24 +184,39 @@ public class LandRecordManager implements Listener { ContainerSnapshot snap = openSnapshots.remove(p.getName()); if (snap == null) return; - Map after = - scanInventory(e.getInventory()); - for (Map.Entry en : - snap.before.entrySet()) { - int taken = en.getValue() - - after.getOrDefault(en.getKey(), 0); + Map after = scanInventory(e.getInventory()); + + // 1. 拿取:before > after + for (Map.Entry en : snap.before.entrySet()) { + int taken = en.getValue() - after.getOrDefault(en.getKey(), 0); if (taken > 0) { - try { - plugin.getDb().recordLandContainer( - snap.landName, snap.landId, - snap.world, snap.x, snap.y, snap.z, - p.getName(), "take", - snap.containerType, en.getKey(), taken); - } catch (Exception ex) { - ex.printStackTrace(); - } + recordContainerChange(snap, p.getName(), "take", + en.getKey(), taken); } } + + // 2. 存入:after > before + for (Map.Entry en : after.entrySet()) { + int put = en.getValue() - snap.before.getOrDefault(en.getKey(), 0); + if (put > 0) { + recordContainerChange(snap, p.getName(), "put", + en.getKey(), put); + } + } + } + + private void recordContainerChange(ContainerSnapshot snap, + String playerName, String action, + String detail, int amount) { + try { + plugin.getDb().recordLandContainer( + snap.landName, snap.landId, + snap.world, snap.x, snap.y, snap.z, + playerName, action, snap.containerType, + detail, amount); + } catch (Exception ex) { + ex.printStackTrace(); + } } /** 扫描容器库存,按"类型名"聚合数量 */ @@ -269,9 +284,14 @@ public class LandRecordManager implements Listener { materials.add((String) r.get("material")); } for (Map r : containers) { - if ("take".equals(r.get("action"))) { + if ("take".equals(r.get("action")) || "put".equals(r.get("action"))) { materials.add((String) r.get("detail")); } + // 容器类型(如 CHEST)也要翻译 + String ct = (String) r.get("container_type"); + if (ct != null && !ct.isEmpty()) { + materials.add(ct); + } } // 异步批量翻译 @@ -321,6 +341,13 @@ public class LandRecordManager implements Listener { + " §f" + r.get("player_name") + " §c拿取 §e" + mat + " §a" + zh + " §7x" + r.get("amount")); + } else if ("put".equals(act)) { + String mat = (String) r.get("detail"); + String zh = translations.getOrDefault(mat, MaterialTranslator.toReadable(mat)); + p.sendMessage(" §7" + fmt((Long) r.get("time")) + + " §f" + r.get("player_name") + + " §a存入 §e" + mat + " §a" + zh + + " §7x" + r.get("amount")); } } }