From b2ef154cc683e622d04c23fc311f2c58a07216ce Mon Sep 17 00:00:00 2001 From: hyperdefined Date: Wed, 7 May 2025 17:51:54 -0400 Subject: [PATCH] add `dropped-by` --- .../java/lol/hyper/toolstats/ToolStats.java | 4 ++ .../toolstats/commands/CommandToolStats.java | 17 ++++++++ .../hyper/toolstats/events/EntityDeath.java | 39 ++++++++++++++++--- .../tools/config/versions/Version12.java | 7 ++++ src/main/resources/config.yml | 4 +- 5 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/main/java/lol/hyper/toolstats/ToolStats.java b/src/main/java/lol/hyper/toolstats/ToolStats.java index 3c2acdb..fbb0c55 100644 --- a/src/main/java/lol/hyper/toolstats/ToolStats.java +++ b/src/main/java/lol/hyper/toolstats/ToolStats.java @@ -93,6 +93,10 @@ public final class ToolStats extends JavaPlugin { * Key for arrows shot. */ public final NamespacedKey arrowsShot = new NamespacedKey(this, "arrows-shot"); + /** + * Key for arrows shot. + */ + public final NamespacedKey droppedBy = new NamespacedKey(this, "dropped-by"); /** * Key for tracking flight time. */ diff --git a/src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java b/src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java index eeddaae..b2e7bd6 100644 --- a/src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java +++ b/src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java @@ -266,6 +266,17 @@ public class CommandToolStats implements TabExecutor { player.getInventory().setItem(slot, finalItem); } + if (container.has(toolStats.droppedBy, PersistentDataType.STRING)) { + if (toolStats.config.getBoolean("enabled.dropped-by")) { + if (container.has(toolStats.droppedBy)) { + String droppedBy = container.get(toolStats.droppedBy, PersistentDataType.STRING); + lore.add(toolStats.configTools.formatLore("dropped-by", "{name}", droppedBy)); + } else { + player.sendMessage(Component.text("Unable to set 'dropped-by', as this item has no record of it.")); + } + } + } + if (container.has(toolStats.itemOwner, new UUIDDataType())) { UUID owner = container.get(toolStats.itemOwner, new UUIDDataType()); String ownerName = null; @@ -329,6 +340,12 @@ public class CommandToolStats implements TabExecutor { } break; } + case 1: { + if (toolStats.config.getBoolean("enabled.dropped-on")) { + lore.add(toolStats.configTools.formatLore("dropped-on", "{date}", date)); + } + break; + } case 2: { if (toolStats.configTools.checkConfig(original.getType(), "looted-on")) { lore.add(toolStats.configTools.formatLore("looted.looted-on", "{date}", date)); diff --git a/src/main/java/lol/hyper/toolstats/events/EntityDeath.java b/src/main/java/lol/hyper/toolstats/events/EntityDeath.java index 6c73f93..8ca6c47 100644 --- a/src/main/java/lol/hyper/toolstats/events/EntityDeath.java +++ b/src/main/java/lol/hyper/toolstats/events/EntityDeath.java @@ -30,6 +30,8 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.UUID; @@ -84,19 +86,44 @@ public class EntityDeath implements Listener { return null; } - if (!toolStats.config.getBoolean("enabled.dropped-by")) { - return null; + long timeCreated = System.currentTimeMillis(); + Date finalDate; + if (toolStats.config.getBoolean("normalize-time-creation")) { + finalDate = toolStats.numberFormat.normalizeTime(timeCreated); + timeCreated = finalDate.getTime(); + } else { + finalDate = new Date(timeCreated); } PersistentDataContainer container = meta.getPersistentDataContainer(); - container.set(toolStats.originType, PersistentDataType.INTEGER, 1); String mobName = toolStats.config.getString("messages.mob." + entity.getType()); if (mobName == null) { mobName = entity.getName(); } - Component newLine = toolStats.configTools.formatLore("dropped-by", "{name}", mobName); - List newLore = toolStats.itemLore.addItemLore(meta, newLine); - meta.lore(newLore); + + List lore; + if (meta.hasLore()) { + lore = meta.lore(); + } else { + lore = new ArrayList<>(); + } + + if (toolStats.config.getBoolean("enabled.dropped-on")) { + container.set(toolStats.originType, PersistentDataType.INTEGER, 1); + container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated); + String date = toolStats.numberFormat.formatDate(finalDate); + Component droppedOn = toolStats.configTools.formatLore("dropped-on", "{date}", date); + lore.add(droppedOn); + } + + if (toolStats.config.getBoolean("enabled.dropped-by")) { + container.set(toolStats.originType, PersistentDataType.INTEGER, 1); + container.set(toolStats.droppedBy, PersistentDataType.STRING, mobName); + Component droppedBy = toolStats.configTools.formatLore("dropped-by", "{name}", mobName); + lore.add(droppedBy); + } + + meta.lore(lore); newItem.setItemMeta(meta); return newItem; } diff --git a/src/main/java/lol/hyper/toolstats/tools/config/versions/Version12.java b/src/main/java/lol/hyper/toolstats/tools/config/versions/Version12.java index 625e6f2..1ea12e1 100644 --- a/src/main/java/lol/hyper/toolstats/tools/config/versions/Version12.java +++ b/src/main/java/lol/hyper/toolstats/tools/config/versions/Version12.java @@ -80,6 +80,13 @@ public class Version12 { toolStats.config.set("enabled.traded-tag", null); toolStats.config.set("enabled.spawned-in", null); + toolStats.logger.info("Adding enabled.dropped-on"); + boolean droppedBy = toolStats.config.getBoolean("enabled.dropped-by"); + toolStats.config.set("enabled.dropped-on", droppedBy); + + toolStats.logger.info("Adding messages.dropped-on"); + toolStats.config.set("messages.dropped-on", "&7Dropped on: &8{date}"); + // rename crafted to crafted here // copy the old ones first diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c501d46..e30a1d7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -208,6 +208,7 @@ enabled: sheep-sheared: true armor-damage: true dropped-by: true + dropped-on: true elytra-tag: true arrows-shot: true flight-time: true @@ -238,7 +239,8 @@ messages: blocks-mined: "&7Blocks mined: &8{blocks}" crops-harvested: "&7Crops harvested: &8{crops}" sheep-sheared: "&7Sheep sheared: &8{sheep}" - dropped-by: "&7Dropped by: &8{name}" # name will be player/mob name + dropped-by: "&7Dropped by: &8{name}" # name will be mob name + dropped-on: "&7Dropped on: &8{date}" damage-taken: "&7Damage taken: &8{damage}" arrows-shot: "&7Arrows shot: &8{arrows}" flight-time: "&7Flight time: &8{years}y {months}m {days}d {hours}h {minutes}m {seconds}s"