From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 3 Oct 2024 18:33:14 -0700 Subject: [PATCH] ItemStack convenience methods diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java index bfddaa146c1bcb6a3fdd43773ec06f91a259b200..53929a8827e2cf93cff70aaa08b2646505052aed 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java @@ -660,4 +660,285 @@ public final class CraftItemStack extends ItemStack { } // Paper end - data component API + + // Purpur start + @Override + public String getDisplayName() { + return getItemMeta().getDisplayName(); + } + + @Override + public void setDisplayName(String name) { + ItemMeta itemMeta = getItemMeta(); + itemMeta.setDisplayName(name); + setItemMeta(itemMeta); + } + + @Override + public boolean hasDisplayName() { + return hasItemMeta() && getItemMeta().hasDisplayName(); + } + + @Override + public String getLocalizedName() { + return getItemMeta().getLocalizedName(); + } + + @Override + public void setLocalizedName(String name) { + ItemMeta itemMeta = getItemMeta(); + itemMeta.setLocalizedName(name); + setItemMeta(itemMeta); + } + + @Override + public boolean hasLocalizedName() { + return hasItemMeta() && getItemMeta().hasLocalizedName(); + } + + @Override + public boolean hasLore() { + return hasItemMeta() && getItemMeta().hasLore(); + } + + @Override + public boolean hasEnchant(Enchantment ench) { + return hasItemMeta() && getItemMeta().hasEnchant(ench); + } + + @Override + public int getEnchantLevel(Enchantment ench) { + return getItemMeta().getEnchantLevel(ench); + } + + @Override + public Map getEnchants() { + return getItemMeta().getEnchants(); + } + + @Override + public boolean addEnchant(Enchantment ench, int level, boolean ignoreLevelRestriction) { + ItemMeta itemMeta = getItemMeta(); + boolean result = itemMeta.addEnchant(ench, level, ignoreLevelRestriction); + setItemMeta(itemMeta); + return result; + } + + @Override + public boolean removeEnchant(Enchantment ench) { + ItemMeta itemMeta = getItemMeta(); + boolean result = itemMeta.removeEnchant(ench); + setItemMeta(itemMeta); + return result; + } + + @Override + public boolean hasEnchants() { + return hasItemMeta() && getItemMeta().hasEnchants(); + } + + @Override + public boolean hasConflictingEnchant(Enchantment ench) { + return hasItemMeta() && getItemMeta().hasConflictingEnchant(ench); + } + + @Override + public void setCustomModelData(Integer data) { + ItemMeta itemMeta = getItemMeta(); + itemMeta.setCustomModelData(data); + setItemMeta(itemMeta); + } + + @Override + public int getCustomModelData() { + return getItemMeta().getCustomModelData(); + } + + @Override + public boolean hasCustomModelData() { + return hasItemMeta() && getItemMeta().hasCustomModelData(); + } + + @Override + public boolean hasBlockData() { + return hasItemMeta() && ((org.bukkit.inventory.meta.BlockDataMeta) getItemMeta()).hasBlockData(); + } + + @Override + public org.bukkit.block.data.BlockData getBlockData(Material material) { + return ((org.bukkit.inventory.meta.BlockDataMeta) getItemMeta()).getBlockData(material); + } + + @Override + public void setBlockData(org.bukkit.block.data.BlockData blockData) { + ItemMeta itemMeta = getItemMeta(); + ((org.bukkit.inventory.meta.BlockDataMeta) itemMeta).setBlockData(blockData); + setItemMeta(itemMeta); + } + + @Override + public int getRepairCost() { + return ((org.bukkit.inventory.meta.Repairable) getItemMeta()).getRepairCost(); + } + + @Override + public void setRepairCost(int cost) { + ItemMeta itemMeta = getItemMeta(); + ((org.bukkit.inventory.meta.Repairable) itemMeta).setRepairCost(cost); + setItemMeta(itemMeta); + } + + @Override + public boolean hasRepairCost() { + return hasItemMeta() && ((org.bukkit.inventory.meta.Repairable) getItemMeta()).hasRepairCost(); + } + + @Override + public boolean isUnbreakable() { + return hasItemMeta() && getItemMeta().isUnbreakable(); + } + + @Override + public void setUnbreakable(boolean unbreakable) { + ItemMeta itemMeta = getItemMeta(); + itemMeta.setUnbreakable(unbreakable); + setItemMeta(itemMeta); + } + + @Override + public boolean hasAttributeModifiers() { + return hasItemMeta() && getItemMeta().hasAttributeModifiers(); + } + + @Override + public com.google.common.collect.Multimap getAttributeModifiers() { + return getItemMeta().getAttributeModifiers(); + } + + @Override + public com.google.common.collect.Multimap getAttributeModifiers(org.bukkit.inventory.EquipmentSlot slot) { + return getItemMeta().getAttributeModifiers(slot); + } + + @Override + public java.util.Collection getAttributeModifiers(org.bukkit.attribute.Attribute attribute) { + return getItemMeta().getAttributeModifiers(attribute); + } + + @Override + public boolean addAttributeModifier(org.bukkit.attribute.Attribute attribute, org.bukkit.attribute.AttributeModifier modifier) { + ItemMeta itemMeta = getItemMeta(); + boolean result = itemMeta.addAttributeModifier(attribute, modifier); + setItemMeta(itemMeta); + return result; + } + + @Override + public void setAttributeModifiers(com.google.common.collect.Multimap attributeModifiers) { + ItemMeta itemMeta = getItemMeta(); + itemMeta.setAttributeModifiers(attributeModifiers); + setItemMeta(itemMeta); + } + + @Override + public boolean removeAttributeModifier(org.bukkit.attribute.Attribute attribute) { + ItemMeta itemMeta = getItemMeta(); + boolean result = itemMeta.removeAttributeModifier(attribute); + setItemMeta(itemMeta); + return result; + } + + @Override + public boolean removeAttributeModifier(org.bukkit.inventory.EquipmentSlot slot) { + ItemMeta itemMeta = getItemMeta(); + boolean result = itemMeta.removeAttributeModifier(slot); + setItemMeta(itemMeta); + return result; + } + + @Override + public boolean removeAttributeModifier(org.bukkit.attribute.Attribute attribute, org.bukkit.attribute.AttributeModifier modifier) { + ItemMeta itemMeta = getItemMeta(); + boolean result = itemMeta.removeAttributeModifier(attribute, modifier); + setItemMeta(itemMeta); + return result; + } + + @Override + public boolean hasDamage() { + return hasItemMeta() && ((org.bukkit.inventory.meta.Damageable) getItemMeta()).hasDamage(); + } + + @Override + public int getDamage() { + return ((org.bukkit.inventory.meta.Damageable) getItemMeta()).getDamage(); + } + + @Override + public void setDamage(int damage) { + ItemMeta itemMeta = getItemMeta(); + ((org.bukkit.inventory.meta.Damageable) itemMeta).setDamage(damage); + setItemMeta(itemMeta); + } + + @Override + public void repair() { + repair(1); + } + + @Override + public boolean damage() { + return damage(1); + } + + @Override + public void repair(int amount) { + damage(-amount); + } + + @Override + public boolean damage(int amount) { + return damage(amount, false); + } + + @Override + public boolean damage(int amount, boolean ignoreUnbreaking) { + org.bukkit.inventory.meta.Damageable damageable = (org.bukkit.inventory.meta.Damageable) getItemMeta(); + if (amount > 0) { + int unbreaking = getEnchantLevel(Enchantment.UNBREAKING); + int reduce = 0; + for (int i = 0; unbreaking > 0 && i < amount; ++i) { + if (reduceDamage(java.util.concurrent.ThreadLocalRandom.current(), unbreaking)) { + ++reduce; + } + } + amount -= reduce; + if (amount <= 0) { + return isBroke(damageable.getDamage()); + } + } + int damage = damageable.getDamage() + amount; + damageable.setDamage(damage); + setItemMeta((ItemMeta) damageable); + return isBroke(damage); + } + + private boolean isBroke(int damage) { + if (damage > getType().getMaxDurability()) { + if (getAmount() > 0) { + // ensure it "breaks" + setAmount(0); + } + return true; + } + return false; + } + + private boolean reduceDamage(java.util.Random random, int unbreaking) { + if (getType().isArmor()) { + return random.nextFloat() < 0.6F; + } + return random.nextInt(unbreaking + 1) > 0; + } + // Purpur end }