From aac2c8bb5c984fbcdb11ebd6a391e4de76851b62 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 4e91fdd69e..3917980b76 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -2149,6 +2149,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)) { @@ -2165,7 +2176,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.24.1