修复容器记录仅显示打开:补充存入(put)+拿取(take)差量记录,容器类型纳入翻译
This commit is contained in:
@@ -184,25 +184,40 @@ public class LandRecordManager implements Listener {
|
||||
ContainerSnapshot snap = openSnapshots.remove(p.getName());
|
||||
if (snap == null) return;
|
||||
|
||||
Map<String, Integer> after =
|
||||
scanInventory(e.getInventory());
|
||||
for (Map.Entry<String, Integer> en :
|
||||
snap.before.entrySet()) {
|
||||
int taken = en.getValue() -
|
||||
after.getOrDefault(en.getKey(), 0);
|
||||
Map<String, Integer> after = scanInventory(e.getInventory());
|
||||
|
||||
// 1. 拿取:before > after
|
||||
for (Map.Entry<String, Integer> en : snap.before.entrySet()) {
|
||||
int taken = en.getValue() - after.getOrDefault(en.getKey(), 0);
|
||||
if (taken > 0) {
|
||||
recordContainerChange(snap, p.getName(), "take",
|
||||
en.getKey(), taken);
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 存入:after > before
|
||||
for (Map.Entry<String, Integer> 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,
|
||||
p.getName(), "take",
|
||||
snap.containerType, en.getKey(), taken);
|
||||
playerName, action, snap.containerType,
|
||||
detail, amount);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** 扫描容器库存,按"类型名"聚合数量 */
|
||||
private Map<String, Integer> scanInventory(Inventory inv) {
|
||||
@@ -269,9 +284,14 @@ public class LandRecordManager implements Listener {
|
||||
materials.add((String) r.get("material"));
|
||||
}
|
||||
for (Map<String, Object> 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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user