diff options
Diffstat (limited to 'Spigot-Server-Patches/0269-EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch')
-rw-r--r-- | Spigot-Server-Patches/0269-EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0269-EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch b/Spigot-Server-Patches/0269-EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch new file mode 100644 index 0000000000..99104085e1 --- /dev/null +++ b/Spigot-Server-Patches/0269-EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch @@ -0,0 +1,85 @@ +From 72ff41a6569670f3194ca52bf850eef0349b13a8 Mon Sep 17 00:00:00 2001 +From: Aikar <[email protected]> +Date: Sat, 15 Jun 2013 19:51:17 -0400 +Subject: [PATCH] EntityShootBowEvent consumeArrow and getArrowItem API + +Adds ability to get what arrow was shot, and control if it should be consumed. + +diff --git a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java +index 749a8a5272..6e2ee04c77 100644 +--- a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java ++++ b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java +@@ -152,7 +152,7 @@ public abstract class EntitySkeletonAbstract extends EntityMonster implements IR + + entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.world.getDifficulty().a() * 4)); + // CraftBukkit start +- org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getItemInMainHand(), entityarrow, 0.8F); ++ org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getItemInMainHand(), this.getItemInOffHand(), entityarrow, 0.8F); // Paper + if (event.isCancelled()) { + event.getProjectile().remove(); + return; +diff --git a/src/main/java/net/minecraft/server/ItemBow.java b/src/main/java/net/minecraft/server/ItemBow.java +index 6934114005..52bc68e6a6 100644 +--- a/src/main/java/net/minecraft/server/ItemBow.java ++++ b/src/main/java/net/minecraft/server/ItemBow.java +@@ -55,6 +55,7 @@ public class ItemBow extends Item { + if ((double) f >= 0.1D) { + boolean flag1 = flag && itemstack1.getItem() == Items.ARROW; + ++ boolean consumeArrow = true; // Paper + if (!world.isClientSide) { + ItemArrow itemarrow = (ItemArrow) ((ItemArrow) (itemstack1.getItem() instanceof ItemArrow ? itemstack1.getItem() : Items.ARROW)); + EntityArrow entityarrow = itemarrow.a(world, itemstack1, (EntityLiving) entityhuman); +@@ -80,7 +81,7 @@ public class ItemBow extends Item { + entityarrow.setOnFire(100); + } + // CraftBukkit start +- org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(entityhuman, itemstack, entityarrow, f); ++ org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(entityhuman, itemstack, itemstack1, entityarrow, f); // Paper + if (event.isCancelled()) { + event.getProjectile().remove(); + return; +@@ -88,7 +89,8 @@ public class ItemBow extends Item { + // CraftBukkit end + + itemstack.damage(1, entityhuman); +- if (flag1 || entityhuman.abilities.canInstantlyBuild && (itemstack1.getItem() == Items.SPECTRAL_ARROW || itemstack1.getItem() == Items.TIPPED_ARROW)) { ++ consumeArrow = event.getConsumeArrow(); // Paper ++ if (!consumeArrow || flag1 || (entityhuman.abilities.canInstantlyBuild && ((itemstack1.getItem() == Items.SPECTRAL_ARROW) || (itemstack1.getItem() == Items.TIPPED_ARROW)))) { // Paper - add !consumeArrow + entityarrow.fromPlayer = EntityArrow.PickupStatus.CREATIVE_ONLY; + } + +@@ -105,7 +107,7 @@ public class ItemBow extends Item { + } + + world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0F, 1.0F / (ItemBow.i.nextFloat() * 0.4F + 1.2F) + f * 0.5F); +- if (!flag1 && !entityhuman.abilities.canInstantlyBuild) { ++ if (!flag1 && !entityhuman.abilities.canInstantlyBuild && consumeArrow) { // Paper + itemstack1.subtract(1); + if (itemstack1.isEmpty()) { + entityhuman.inventory.f(itemstack1); +diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +index c02619bb57..acc80d0684 100644 +--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java ++++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +@@ -332,7 +332,7 @@ public class CraftEventFactory { + /** + * EntityShootBowEvent + */ +- public static EntityShootBowEvent callEntityShootBowEvent(EntityLiving who, ItemStack itemstack, EntityArrow entityArrow, float force) { ++ public static EntityShootBowEvent callEntityShootBowEvent(EntityLiving who, /*bow*/ItemStack itemstack, /*arrow*/ ItemStack arrowItem, EntityArrow entityArrow, float force) { // Paper + LivingEntity shooter = (LivingEntity) who.getBukkitEntity(); + CraftItemStack itemInHand = CraftItemStack.asCraftMirror(itemstack); + Arrow arrow = (Arrow) entityArrow.getBukkitEntity(); +@@ -341,7 +341,7 @@ public class CraftEventFactory { + itemInHand = null; + } + +- EntityShootBowEvent event = new EntityShootBowEvent(shooter, itemInHand, arrow, force); ++ EntityShootBowEvent event = new EntityShootBowEvent(shooter, itemInHand, CraftItemStack.asCraftMirror(arrowItem), arrow, force); // Paper + Bukkit.getPluginManager().callEvent(event); + + return event; +-- +2.21.0 + |