diff --git a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java index c9a4c9f..f41a2b0 100644 --- a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java +++ b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java @@ -29,6 +29,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.projectiles.ProjectileSource; @@ -69,6 +70,14 @@ public class EntityDamage implements Listener { EntityType mobAttackedType = event.getEntityType(); boolean critical = event.isCritical(); + if (playerBeingAttacked) { + Player player = (Player) event.getEntity(); + if (player.isBlocking()) { + double blockedDamage = -event.getDamage(EntityDamageEvent.DamageModifier.BLOCKING); + updateShieldDamage(player.getInventory(), blockedDamage); + } + } + // player attacks something if (playerAttacking) { Player player = (Player) damager; @@ -345,4 +354,45 @@ public class EntityDamage implements Listener { playerInventory.getItemInMainHand().setItemMeta(newHeldWeaponMeta); } } + + private void updateShieldDamage(PlayerInventory playerInventory, double damage) { + boolean isMain = playerInventory.getItemInMainHand().getType() == Material.SHIELD; + boolean isOffHand = playerInventory.getItemInOffHand().getType() == Material.SHIELD; + + ItemStack heldShield; + if (isMain && isOffHand) { + heldShield = playerInventory.getItemInMainHand(); + int shieldDamage = (heldShield.getItemMeta() instanceof Damageable d) ? d.getDamage() : 0; + + ItemMeta newShieldMeta = toolStats.itemLore.updateArmorDamage(heldShield, damage, false); + if (newShieldMeta != null) { + if (newShieldMeta instanceof Damageable dNew) { + dNew.setDamage(shieldDamage); + } + playerInventory.getItemInMainHand().setItemMeta(newShieldMeta); + } + } else if (isMain) { + heldShield = playerInventory.getItemInMainHand(); + int shieldDamage = (heldShield.getItemMeta() instanceof Damageable d) ? d.getDamage() : 0; + + ItemMeta newShieldMeta = toolStats.itemLore.updateArmorDamage(heldShield, damage, false); + if (newShieldMeta != null) { + if (newShieldMeta instanceof Damageable dNew) { + dNew.setDamage(shieldDamage); + } + playerInventory.getItemInMainHand().setItemMeta(newShieldMeta); + } + } else if (isOffHand) { + heldShield = playerInventory.getItemInOffHand(); + int shieldDamage = (heldShield.getItemMeta() instanceof Damageable d) ? d.getDamage() : 0; + + ItemMeta newShieldMeta = toolStats.itemLore.updateArmorDamage(heldShield, damage, false); + if (newShieldMeta != null) { + if (newShieldMeta instanceof Damageable dNew) { + dNew.setDamage(shieldDamage); + } + playerInventory.getItemInOffHand().setItemMeta(newShieldMeta); + } + } + } } diff --git a/src/main/java/lol/hyper/toolstats/tools/ItemChecker.java b/src/main/java/lol/hyper/toolstats/tools/ItemChecker.java index da37134..34c96f0 100644 --- a/src/main/java/lol/hyper/toolstats/tools/ItemChecker.java +++ b/src/main/java/lol/hyper/toolstats/tools/ItemChecker.java @@ -70,6 +70,7 @@ public class ItemChecker { validItems.add(Material.CROSSBOW); validItems.add(Material.FISHING_ROD); validItems.add(Material.ELYTRA); + validItems.add(Material.SHIELD); // combine the lists validItems.addAll(armorItems);