mirror of
https://github.com/hyperdefined/ToolStats.git
synced 2026-01-26 23:46:00 +00:00
support shields for damage taken
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user