05466e3b47
Upstream has released updates that appear to apply compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing. Bukkit Changes: d2834556 SPIGOT-4219: Event for PigZombies angering. CraftBukkit Changes: a9c796f1 SPIGOT-4184: Fix furnaces not matching Vanilla smelt or animations 195f071e SPIGOT-4219: Event for PigZombies angering. 5e3082c7 SPIGOT-4230: Improve legacy block types
79 lines
3.6 KiB
Diff
79 lines
3.6 KiB
Diff
From 73d7eb479aefb2c9551ac611ddacd39482407cec Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
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/ItemBow.java b/src/main/java/net/minecraft/server/ItemBow.java
|
|
index 379a7f84a5..c0caeda362 100644
|
|
--- a/src/main/java/net/minecraft/server/ItemBow.java
|
|
+++ b/src/main/java/net/minecraft/server/ItemBow.java
|
|
@@ -1,5 +1,6 @@
|
|
package net.minecraft.server;
|
|
|
|
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
|
import org.bukkit.event.entity.EntityCombustEvent; // CraftBukkit
|
|
|
|
public class ItemBow extends Item {
|
|
@@ -18,16 +19,16 @@ public class ItemBow extends Item {
|
|
// CraftBukkit end
|
|
}
|
|
|
|
- private ItemStack a(EntityHuman entityhuman) {
|
|
- if (this.e_(entityhuman.b(EnumHand.OFF_HAND))) {
|
|
+ private ItemStack a(EntityHuman entityhuman, ItemStack bow) { // Paper
|
|
+ if (this.e_(entityhuman, bow, entityhuman.b(EnumHand.OFF_HAND))) { // Paper
|
|
return entityhuman.b(EnumHand.OFF_HAND);
|
|
- } else if (this.e_(entityhuman.b(EnumHand.MAIN_HAND))) {
|
|
+ } else if (this.e_(entityhuman, bow, entityhuman.b(EnumHand.MAIN_HAND))) {
|
|
return entityhuman.b(EnumHand.MAIN_HAND);
|
|
} else {
|
|
for (int i = 0; i < entityhuman.inventory.getSize(); ++i) {
|
|
ItemStack itemstack = entityhuman.inventory.getItem(i);
|
|
|
|
- if (this.e_(itemstack)) {
|
|
+ if (this.e_(entityhuman, bow, itemstack)) {
|
|
return itemstack;
|
|
}
|
|
}
|
|
@@ -36,15 +37,23 @@ public class ItemBow extends Item {
|
|
}
|
|
}
|
|
|
|
- protected boolean e_(ItemStack itemstack) {
|
|
- return itemstack.getItem() instanceof ItemArrow;
|
|
+ // Paper start
|
|
+ protected boolean e_(EntityHuman player, ItemStack bow, ItemStack itemstack) {
|
|
+ return itemstack.getItem() instanceof ItemArrow && (
|
|
+ !(player instanceof EntityPlayer) ||
|
|
+ new com.destroystokyo.paper.event.player.PlayerReadyArrowEvent(
|
|
+ ((EntityPlayer) player).getBukkitEntity(),
|
|
+ CraftItemStack.asCraftMirror(bow),
|
|
+ CraftItemStack.asCraftMirror(itemstack)
|
|
+ ).callEvent());
|
|
+ // Paper end
|
|
}
|
|
|
|
public void a(ItemStack itemstack, World world, EntityLiving entityliving, int i) {
|
|
if (entityliving instanceof EntityHuman) {
|
|
EntityHuman entityhuman = (EntityHuman) entityliving;
|
|
boolean flag = entityhuman.abilities.canInstantlyBuild || EnchantmentManager.getEnchantmentLevel(Enchantments.ARROW_INFINITE, itemstack) > 0;
|
|
- ItemStack itemstack1 = this.a(entityhuman);
|
|
+ ItemStack itemstack1 = this.a(entityhuman, itemstack); // Paper
|
|
|
|
if (!itemstack1.isEmpty() || flag) {
|
|
if (itemstack1.isEmpty()) {
|
|
@@ -148,7 +157,7 @@ public class ItemBow extends Item {
|
|
|
|
public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
|
|
ItemStack itemstack = entityhuman.b(enumhand);
|
|
- boolean flag = !this.a(entityhuman).isEmpty();
|
|
+ boolean flag = !this.a(entityhuman, itemstack).isEmpty(); // Paper
|
|
|
|
if (!entityhuman.abilities.canInstantlyBuild && !flag) {
|
|
return flag ? new InteractionResultWrapper(EnumInteractionResult.PASS, itemstack) : new InteractionResultWrapper(EnumInteractionResult.FAIL, itemstack);
|
|
--
|
|
2.18.0
|
|
|