mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-20 01:47:42 +01:00
More itemstack api stuffs for plugins
This commit is contained in:
@@ -5,7 +5,7 @@ Subject: [PATCH] ItemStack convenience methods
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
|
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
|
||||||
index e203c5bf..e6ba1b17 100644
|
index e203c5bfc..e6ba1b179 100644
|
||||||
--- a/src/main/java/org/bukkit/Material.java
|
--- a/src/main/java/org/bukkit/Material.java
|
||||||
+++ b/src/main/java/org/bukkit/Material.java
|
+++ b/src/main/java/org/bukkit/Material.java
|
||||||
@@ -8635,4 +8635,36 @@ public enum Material implements Keyed {
|
@@ -8635,4 +8635,36 @@ public enum Material implements Keyed {
|
||||||
@@ -46,7 +46,7 @@ index e203c5bf..e6ba1b17 100644
|
|||||||
+ // Purpur end
|
+ // Purpur end
|
||||||
}
|
}
|
||||||
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
|
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
|
||||||
index ccd81fca..c38fd840 100644
|
index ccd81fca2..3fecde7a0 100644
|
||||||
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
|
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
|
||||||
+++ b/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;
|
@@ -17,6 +17,18 @@ import org.bukkit.inventory.meta.ItemMeta;
|
||||||
@@ -68,7 +68,7 @@ index ccd81fca..c38fd840 100644
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a stack of items.
|
* Represents a stack of items.
|
||||||
@@ -791,4 +803,611 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
|
@@ -791,4 +803,627 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
|
||||||
return itemMeta.hasItemFlag(flag);
|
return itemMeta.hasItemFlag(flag);
|
||||||
}
|
}
|
||||||
// Paper end
|
// Paper end
|
||||||
@@ -622,9 +622,11 @@ index ccd81fca..c38fd840 100644
|
|||||||
+
|
+
|
||||||
+ /**
|
+ /**
|
||||||
+ * Damages this item by 1 durability
|
+ * Damages this item by 1 durability
|
||||||
|
+ *
|
||||||
|
+ * @return True if damage broke the item
|
||||||
+ */
|
+ */
|
||||||
+ public void damage() {
|
+ public boolean damage() {
|
||||||
+ damage(1);
|
+ return damage(1);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ /**
|
+ /**
|
||||||
@@ -640,9 +642,10 @@ index ccd81fca..c38fd840 100644
|
|||||||
+ * Damages this item's durability by amount
|
+ * Damages this item's durability by amount
|
||||||
+ *
|
+ *
|
||||||
+ * @param amount Amount of durability to damage
|
+ * @param amount Amount of durability to damage
|
||||||
|
+ * @return True if damage broke the item
|
||||||
+ */
|
+ */
|
||||||
+ public void damage(int amount) {
|
+ public boolean damage(int amount) {
|
||||||
+ damage(amount, false);
|
+ return damage(amount, false);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ /**
|
+ /**
|
||||||
@@ -650,8 +653,10 @@ index ccd81fca..c38fd840 100644
|
|||||||
+ *
|
+ *
|
||||||
+ * @param amount Amount of durability to damage
|
+ * @param amount Amount of durability to damage
|
||||||
+ * @param ignoreUnbreaking Ignores unbreaking enchantment
|
+ * @param ignoreUnbreaking Ignores unbreaking enchantment
|
||||||
|
+ * @return True if damage broke the item
|
||||||
+ */
|
+ */
|
||||||
+ public void damage(int amount, boolean ignoreUnbreaking) {
|
+ public boolean damage(int amount, boolean ignoreUnbreaking) {
|
||||||
|
+ Damageable damageable = (Damageable) getItemMeta();
|
||||||
+ if (amount > 0) {
|
+ if (amount > 0) {
|
||||||
+ int unbreaking = getEnchantLevel(Enchantment.DURABILITY);
|
+ int unbreaking = getEnchantLevel(Enchantment.DURABILITY);
|
||||||
+ int reduce = 0;
|
+ int reduce = 0;
|
||||||
@@ -662,13 +667,24 @@ index ccd81fca..c38fd840 100644
|
|||||||
+ }
|
+ }
|
||||||
+ amount -= reduce;
|
+ amount -= reduce;
|
||||||
+ if (amount <= 0) {
|
+ if (amount <= 0) {
|
||||||
+ return;
|
+ return isBroke(damageable.getDamage());
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ ItemMeta itemMeta = getItemMeta();
|
+ int damage = damageable.getDamage() + amount;
|
||||||
+ Damageable damageable = (Damageable) itemMeta;
|
+ damageable.setDamage(damage);
|
||||||
+ damageable.setDamage(damageable.getDamage() + amount);
|
+ setItemMeta((ItemMeta) damageable);
|
||||||
+ setItemMeta(itemMeta);
|
+ return isBroke(damage);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public 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) {
|
+ private boolean reduceDamage(java.util.Random random, int unbreaking) {
|
||||||
|
|||||||
23
patches/api/0032-LivingEntity-broadcastItemBreak.patch
Normal file
23
patches/api/0032-LivingEntity-broadcastItemBreak.patch
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||||
|
Date: Mon, 17 Aug 2020 21:50:32 -0500
|
||||||
|
Subject: [PATCH] LivingEntity#broadcastItemBreak
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
|
||||||
|
index a0db76946..7b1cb6623 100644
|
||||||
|
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
|
||||||
|
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
|
||||||
|
@@ -785,5 +785,12 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
|
||||||
|
* @param quantity Quantity of item
|
||||||
|
*/
|
||||||
|
void playPickupItemAnimation(@NotNull Item item, int quantity);
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Play item break animation for the item in specified equipment slot
|
||||||
|
+ *
|
||||||
|
+ * @param slot Equipment slot to play break animation for
|
||||||
|
+ */
|
||||||
|
+ void broadcastItemBreak(@NotNull org.bukkit.inventory.EquipmentSlot slot);
|
||||||
|
// Purpur end
|
||||||
|
}
|
||||||
22
patches/server/0131-LivingEntity-broadcastItemBreak.patch
Normal file
22
patches/server/0131-LivingEntity-broadcastItemBreak.patch
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||||
|
Date: Mon, 17 Aug 2020 21:50:39 -0500
|
||||||
|
Subject: [PATCH] LivingEntity#broadcastItemBreak
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||||
|
index a415707e9a..c97a152f79 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||||
|
@@ -768,5 +768,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||||
|
public void playPickupItemAnimation(org.bukkit.entity.Item item, int quantity) {
|
||||||
|
getHandle().receive(((CraftItem)item).getHandle(), quantity);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void broadcastItemBreak(org.bukkit.inventory.EquipmentSlot slot) {
|
||||||
|
+ if (slot == null) return;
|
||||||
|
+ getHandle().broadcastItemBreak(org.bukkit.craftbukkit.CraftEquipmentSlot.getNMS(slot));
|
||||||
|
+ }
|
||||||
|
// Purpur end
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user