diff --git a/src/main/java/lol/hyper/toolstats/ToolStats.java b/src/main/java/lol/hyper/toolstats/ToolStats.java index a14d6fe..9842cd5 100644 --- a/src/main/java/lol/hyper/toolstats/ToolStats.java +++ b/src/main/java/lol/hyper/toolstats/ToolStats.java @@ -37,7 +37,7 @@ public final class ToolStats extends JavaPlugin { public PlayerFish playerFish; public SheepShear sheepShear; - public Logger logger = this.getLogger(); + public final Logger logger = this.getLogger(); @Override public void onEnable() { diff --git a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java index a4cb9c1..e4b989d 100644 --- a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java +++ b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java @@ -10,10 +10,13 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; +import java.math.RoundingMode; +import java.text.DecimalFormat; import java.util.*; public class EntityDamage implements Listener { @@ -22,7 +25,9 @@ public class EntityDamage implements Listener { private final String[] validTools = {"sword", "trident", "axe"}; private final String playerKillsLore = ChatColor.GRAY + "Player kills: " + ChatColor.DARK_GRAY + "X"; private final String mobKillsLore = ChatColor.GRAY + "Mob kills: " + ChatColor.DARK_GRAY + "X"; - public Set trackedMobs = new HashSet<>(); + private final String damageTakenLore = ChatColor.GRAY + "Damage taken: " + ChatColor.DARK_GRAY + "X"; + private final DecimalFormat decimalFormat = new DecimalFormat("0.00"); + public final Set trackedMobs = new HashSet<>(); public EntityDamage(ToolStats toolStats) { this.toolStats = toolStats; @@ -57,6 +62,14 @@ public class EntityDamage implements Listener { trackedMobs.add(livingEntity.getUniqueId()); } } + // player is taken damage but not being killed + if (livingEntity instanceof Player) { + Player player = (Player) livingEntity; + PlayerInventory inventory = player.getInventory(); + for (ItemStack armor : inventory.getArmorContents()) { + updateArmorDamage(armor, event.getDamage()); + } + } } private void updatePlayerKills(ItemStack itemStack) { @@ -146,4 +159,49 @@ public class EntityDamage implements Listener { meta.setLore(lore); itemStack.setItemMeta(meta); } + + private void updateArmorDamage(ItemStack itemStack, double damage) { + ItemMeta meta = itemStack.getItemMeta(); + if (meta == null) { + return; + } + Double damageTaken = 0.0; + PersistentDataContainer container = meta.getPersistentDataContainer(); + if (container.has(toolStats.armorDamage, PersistentDataType.DOUBLE)) { + damageTaken = container.get(toolStats.armorDamage, PersistentDataType.DOUBLE); + } + if (damageTaken == null) { + return; + } else { + damageTaken = damageTaken + damage; + } + decimalFormat.setRoundingMode(RoundingMode.DOWN); + container.set(toolStats.armorDamage, PersistentDataType.DOUBLE, damageTaken); + + List lore; + if (meta.hasLore()) { + lore = meta.getLore(); + assert lore != null; + boolean hasLore = false; + // we do a for loop like this, we can keep track of index + // this doesn't mess the lore up of existing items + for (int x = 0; x < lore.size(); x++) { + if (lore.get(x).contains("Damage taken")) { + hasLore = true; + lore.set(x, damageTakenLore.replace("X", decimalFormat.format(damageTaken))); + break; + } + } + // if the item has lore but doesn't have the tag, add it + if (!hasLore) { + lore.add(damageTakenLore.replace("X", decimalFormat.format(damageTaken))); + } + } else { + // if the item has no lore, create a new list and add the string + lore = new ArrayList<>(); + lore.add(damageTakenLore.replace("X", decimalFormat.format(damageTaken))); + } + meta.setLore(lore); + itemStack.setItemMeta(meta); + } } diff --git a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java index 1930f8e..dc51ff8 100644 --- a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java +++ b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java @@ -1,7 +1,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; -import lol.hyper.toolstats.UUIDDataType; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -14,7 +13,6 @@ import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; import java.util.ArrayList; -import java.util.Date; import java.util.List; public class PlayerFish implements Listener {