From a357c5059ef997e144535886449cf34ea30c8ae4 Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 18 Jun 2018 01:12:53 -0400 Subject: [PATCH] PlayerReadyArrowEvent Called when a player is firing a bow and the server is choosing an arrow to use. Plugins can skip selection of certain arrows and control which is used. diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java index 1d3c7ce488..4721c288ba 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -2157,6 +2157,17 @@ public abstract class EntityHuman extends EntityLiving { return (EntitySize) EntityHuman.b.getOrDefault(entitypose, EntityHuman.bp); } + // Paper start + protected boolean tryReadyArrow(ItemStack bow, ItemStack itemstack) { + return !(this instanceof EntityPlayer) || + new com.destroystokyo.paper.event.player.PlayerReadyArrowEvent( + ((EntityPlayer) this).getBukkitEntity(), + org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(bow), + org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack) + ).callEvent(); + // Paper end + } + @Override public ItemStack f(ItemStack itemstack) { if (!(itemstack.getItem() instanceof ItemProjectileWeapon)) { @@ -2173,7 +2184,7 @@ public abstract class EntityHuman extends EntityLiving { for (int i = 0; i < this.inventory.getSize(); ++i) { ItemStack itemstack2 = this.inventory.getItem(i); - if (predicate.test(itemstack2)) { + if (predicate.test(itemstack2) && tryReadyArrow(itemstack, itemstack2)) { // Paper return itemstack2; } } -- 2.25.0