papermc/Spigot-API-Patches/0060-ensureServerConversions-API.patch

70 lines
2.5 KiB
Diff
Raw Normal View History

2018-07-23 22:57:54 +00:00
From 913761361c5a2b8da0f5eaa0ddfd7b6a18cc9ecc Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 4 May 2016 23:55:48 -0400
Subject: [PATCH] ensureServerConversions API
This will take a Bukkit ItemStack and run it through any conversions a server process would perform on it,
to ensure it meets latest minecraft expectations.
diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
index 762c43d6..045c26d9 100644
--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
+++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
@@ -134,4 +134,16 @@ public interface ItemFactory {
*/
@Deprecated
Material updateMaterial(final ItemMeta meta, final Material material) throws IllegalArgumentException;
+ // Paper start
+ /**
+ * Minecart updates are converting simple item stacks into more complex NBT oriented Item Stacks.
+ *
+ * Use this method to to ensure any desired data conversions are processed.
+ * The input itemstack will not be the same as the returned itemstack.
+ *
+ * @param item The item to process conversions on
+ * @return A potentially Data Converted ItemStack
+ */
+ ItemStack ensureServerConversions(ItemStack item);
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
2018-07-23 22:57:54 +00:00
index 41a43053..24a45189 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
2018-07-23 22:57:54 +00:00
@@ -488,7 +488,12 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
}
}
- return result;
+ // Set damage again incase meta overwrote it
+ if (args.containsKey("damage")) {
+ result.setDurability(damage);
+ }
+
+ return result.ensureServerConversions(); // Paper
}
/**
2018-07-23 22:57:54 +00:00
@@ -546,4 +551,18 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
return true;
}
+
+ // Paper start
+ /**
+ * Minecart updates are converting simple item stacks into more complex NBT oriented Item Stacks.
+ *
+ * Use this method to to ensure any desired data conversions are processed.
+ * The input itemstack will not be the same as the returned itemstack.
+ *
+ * @return A potentially Data Converted ItemStack
+ */
+ public ItemStack ensureServerConversions() {
+ return Bukkit.getServer().getItemFactory().ensureServerConversions(this);
+ }
+ // Paper end
}
--
2.18.0