From a1de1619c6e2aea6932fa7a9e03bb9db0d6f9f17 Mon Sep 17 00:00:00 2001
From: Riley Park <rileysebastianpark@gmail.com>
Date: Fri, 22 Apr 2016 00:07:16 -0700
Subject: [PATCH] Arrow pickup rule API

---
 .../Arrow-pickup-rule-API.patch               | 43 ++++++++++++++
 .../Arrow-pickup-rule-API.patch               | 56 +++++++++++++++++++
 2 files changed, 99 insertions(+)
 create mode 100644 Spigot-API-Patches/Arrow-pickup-rule-API.patch
 create mode 100644 Spigot-Server-Patches/Arrow-pickup-rule-API.patch

diff --git a/Spigot-API-Patches/Arrow-pickup-rule-API.patch b/Spigot-API-Patches/Arrow-pickup-rule-API.patch
new file mode 100644
index 0000000000..6bdc17f8e4
--- /dev/null
+++ b/Spigot-API-Patches/Arrow-pickup-rule-API.patch
@@ -0,0 +1,43 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jedediah Smith <jedediah@silencegreys.com>
+Date: Fri, 4 Mar 2016 03:13:18 -0500
+Subject: [PATCH] Arrow pickup rule API
+
+
+diff --git a/src/main/java/org/bukkit/entity/Arrow.java b/src/main/java/org/bukkit/entity/Arrow.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/org/bukkit/entity/Arrow.java
++++ b/src/main/java/org/bukkit/entity/Arrow.java
+@@ -0,0 +0,0 @@ public interface Arrow extends Projectile {
+      */
+     public void setCritical(boolean critical);
+ 
++    // Paper start
++    /**
++     * Gets the {@link PickupRule} for this arrow.
++     *
++     * <p>This is generally {@link PickupRule#ALLOWED} only if the arrow was
++     * <b>not</b> fired from a bow with the infinity enchantment.</p>
++     *
++     * @return The pickup rule
++     */
++    PickupRule getPickupRule();
++
++    /**
++     * Set the rule for which players can pickup this arrow as an item.
++     *
++     * @param rule The pickup rule
++     */
++    void setPickupRule(PickupRule rule);
++
++    enum PickupRule {
++        DISALLOWED,
++        ALLOWED,
++        CREATIVE_ONLY;
++    }
++    // Paper end
++
+     public class Spigot extends Entity.Spigot
+     {
+ 
+--
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Arrow-pickup-rule-API.patch b/Spigot-Server-Patches/Arrow-pickup-rule-API.patch
new file mode 100644
index 0000000000..12d3bd1249
--- /dev/null
+++ b/Spigot-Server-Patches/Arrow-pickup-rule-API.patch
@@ -0,0 +1,56 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jedediah Smith <jedediah@silencegreys.com>
+Date: Fri, 4 Mar 2016 03:16:11 -0500
+Subject: [PATCH] Arrow pickup rule API
+
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java
++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java
+@@ -0,0 +0,0 @@ public class CraftArrow extends AbstractProjectile implements Arrow {
+         getHandle().shooter = ((CraftLivingEntity) shooter).getHandle();
+     }
+ 
++    // Paper start
++    @Override
++    public PickupRule getPickupRule() {
++        return convertPickupRule(this.getHandle().fromPlayer);
++    }
++
++    @Override
++    public void setPickupRule(PickupRule rule) {
++        this.getHandle().fromPlayer = convertPickupRule(rule);
++    }
++
++    public static PickupRule convertPickupRule(EntityArrow.PickupStatus nms) {
++        switch (nms) {
++            case DISALLOWED:
++                return PickupRule.DISALLOWED;
++            case ALLOWED:
++                return PickupRule.ALLOWED;
++            case CREATIVE_ONLY:
++                return PickupRule.CREATIVE_ONLY;
++            default:
++                throw new IllegalStateException();
++        }
++    }
++
++    public static EntityArrow.PickupStatus convertPickupRule(PickupRule bukkit) {
++        switch (bukkit) {
++            case DISALLOWED:
++                return EntityArrow.PickupStatus.DISALLOWED;
++            case ALLOWED:
++                return EntityArrow.PickupStatus.ALLOWED;
++            case CREATIVE_ONLY:
++                return EntityArrow.PickupStatus.CREATIVE_ONLY;
++            default:
++                throw new IllegalStateException();
++        }
++    }
++    // Paper end
++
+     // Spigot start
+     private final Arrow.Spigot spigot = new Arrow.Spigot()
+     {
+--
\ No newline at end of file