From 5617a2829162e34834a695dc452514bf4e6d7279 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 26 Jul 2017 23:40:49 -0400
Subject: [PATCH] Implement 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.
---
 .../ensureServerConversions-API.patch         | 63 +++++++++++++++++++
 ...mplement-ensureServerConversions-API.patch | 25 ++++++++
 2 files changed, 88 insertions(+)
 create mode 100644 Spigot-API-Patches/ensureServerConversions-API.patch
 create mode 100644 Spigot-Server-Patches/Implement-ensureServerConversions-API.patch

diff --git a/Spigot-API-Patches/ensureServerConversions-API.patch b/Spigot-API-Patches/ensureServerConversions-API.patch
new file mode 100644
index 0000000000..14945849c4
--- /dev/null
+++ b/Spigot-API-Patches/ensureServerConversions-API.patch
@@ -0,0 +1,63 @@
+From 0000000000000000000000000000000000000000 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 52a8d4d8..99b90629 100644
+--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
++++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
+@@ -0,0 +0,0 @@ public interface ItemFactory {
+      * @return the default color for leather armor
+      */
+     Color getDefaultLeatherColor();
++
++    // 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
+index 188ae6d7..6bb19b9d 100644
+--- a/src/main/java/org/bukkit/inventory/ItemStack.java
++++ b/src/main/java/org/bukkit/inventory/ItemStack.java
+@@ -0,0 +0,0 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
+             }
+         }
+ 
+-        return result;
++        return result.ensureServerConversions(); // Paper
+     }
+ 
+     /**
+@@ -0,0 +0,0 @@ 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
+ }
+--
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Implement-ensureServerConversions-API.patch b/Spigot-Server-Patches/Implement-ensureServerConversions-API.patch
new file mode 100644
index 0000000000..9c480cefc7
--- /dev/null
+++ b/Spigot-Server-Patches/Implement-ensureServerConversions-API.patch
@@ -0,0 +1,25 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <aikar@aikar.co>
+Date: Wed, 4 May 2016 22:43:12 -0400
+Subject: [PATCH] Implement 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/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
+index 49ebad22e..eb6987338 100644
+--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
+@@ -0,0 +0,0 @@ public final class CraftItemFactory implements ItemFactory {
+     public Color getDefaultLeatherColor() {
+         return DEFAULT_LEATHER_COLOR;
+     }
++
++    // Paper start
++    @Override
++    public ItemStack ensureServerConversions(ItemStack item) {
++        return CraftItemStack.asCraftMirror(CraftItemStack.asNMSCopy(item));
++    }
++    // Paper end
+ }
+--
\ No newline at end of file