Add more ItemStack convenience stuffs

This commit is contained in:
William Blake Galbreath
2020-04-06 05:58:37 -05:00
parent c76b42c0eb
commit dd056edcc5

View File

@@ -1,14 +1,56 @@
From e957ac37c9a7393b96fbc805c4c1a8f88c7e9940 Mon Sep 17 00:00:00 2001
From 85943cc20b759c76b1573e03fca687c1b4933dc2 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Sun, 15 Mar 2020 20:52:12 -0500
Subject: [PATCH] Add ItemStack convenience methods for ItemMeta
Subject: [PATCH] Add ItemStack convenience methods
---
.../java/org/bukkit/inventory/ItemStack.java | 590 ++++++++++++++++++
1 file changed, 590 insertions(+)
src/main/java/org/bukkit/Material.java | 32 +
.../java/org/bukkit/inventory/ItemStack.java | 619 ++++++++++++++++++
2 files changed, 651 insertions(+)
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
index 1f2dbd68c..f2be0d0ce 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
@@ -7995,4 +7995,36 @@ public enum Material implements Keyed {
// </editor-fold>
}
}
+
+ // Purpur start
+ public boolean isArmor() {
+ switch (this) {
+ // <editor-fold defaultstate="collapsed" desc="isarmor">
+ case LEATHER_BOOTS:
+ case LEATHER_CHESTPLATE:
+ case LEATHER_HELMET:
+ case LEATHER_LEGGINGS:
+ case CHAINMAIL_BOOTS:
+ case CHAINMAIL_CHESTPLATE:
+ case CHAINMAIL_HELMET:
+ case CHAINMAIL_LEGGINGS:
+ case IRON_BOOTS:
+ case IRON_CHESTPLATE:
+ case IRON_HELMET:
+ case IRON_LEGGINGS:
+ case GOLDEN_BOOTS:
+ case GOLDEN_CHESTPLATE:
+ case GOLDEN_HELMET:
+ case GOLDEN_LEGGINGS:
+ case DIAMOND_BOOTS:
+ case DIAMOND_CHESTPLATE:
+ case DIAMOND_HELMET:
+ case DIAMOND_LEGGINGS:
+ case TURTLE_HELMET:
+ return true;
+ default:
+ return false;
+ }
+ }
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
index cf8d77491..2c2ca7d97 100644
index cf8d77491..69ebfa11a 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -17,6 +17,18 @@ import org.bukkit.inventory.meta.ItemMeta;
@@ -30,7 +72,7 @@ index cf8d77491..2c2ca7d97 100644
/**
* Represents a stack of items.
@@ -760,4 +772,582 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
@@ -760,4 +772,611 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
return itemMeta.hasItemFlag(flag);
}
// Paper end
@@ -604,12 +646,41 @@ index cf8d77491..2c2ca7d97 100644
+ * @param amount Amount of durability to damage
+ */
+ public void damage(int amount) {
+ damage(amount, false);
+ }
+
+ /**
+ * Damages this item's durability by amount
+ *
+ * @param amount Amount of durability to damage
+ * @param ignoreUnbreaking Ignores unbreaking enchantment
+ */
+ public void damage(int amount, boolean ignoreUnbreaking) {
+ if (amount > 0) {
+ int unbreaking = getEnchantLevel(Enchantment.DURABILITY);
+ 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;
+ }
+ }
+ ItemMeta itemMeta = getItemMeta();
+ Damageable damageable = (Damageable) itemMeta;
+ damageable.setDamage(damageable.getDamage() + amount);
+ damageable.setDamage(damageable.getDamage() - amount);
+ setItemMeta(itemMeta);
+ }
+
+ 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
}