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