From dd17f98e612b14142eeabf76b12233e431fd80e7 Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Tue, 7 Aug 2018 09:44:44 -0500 Subject: [PATCH] [1.13] Hand for bucket events (#1300) This adds the `getHand()` method to the `PlayerBucketEvent`s --- .../0132-Add-hand-to-bucket-events.patch | 111 ++++++++++++++++++ .../0329-Add-hand-to-bucket-events.patch | 109 +++++++++++++++++ 2 files changed, 220 insertions(+) create mode 100644 Spigot-API-Patches/0132-Add-hand-to-bucket-events.patch create mode 100644 Spigot-Server-Patches/0329-Add-hand-to-bucket-events.patch diff --git a/Spigot-API-Patches/0132-Add-hand-to-bucket-events.patch b/Spigot-API-Patches/0132-Add-hand-to-bucket-events.patch new file mode 100644 index 0000000000..eb3327a240 --- /dev/null +++ b/Spigot-API-Patches/0132-Add-hand-to-bucket-events.patch @@ -0,0 +1,111 @@ +From 71a62262e3b7a417bb316b0067d86744556662a4 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Thu, 2 Aug 2018 08:44:20 -0500 +Subject: [PATCH] Add hand to bucket events + + +diff --git a/src/main/java/org/bukkit/event/player/PlayerBucketEmptyEvent.java b/src/main/java/org/bukkit/event/player/PlayerBucketEmptyEvent.java +index 8fb121a9..7b9596f3 100644 +--- a/src/main/java/org/bukkit/event/player/PlayerBucketEmptyEvent.java ++++ b/src/main/java/org/bukkit/event/player/PlayerBucketEmptyEvent.java +@@ -5,6 +5,7 @@ import org.bukkit.block.Block; + import org.bukkit.block.BlockFace; + import org.bukkit.entity.Player; + import org.bukkit.event.HandlerList; ++import org.bukkit.inventory.EquipmentSlot; + import org.bukkit.inventory.ItemStack; + + /** +@@ -17,6 +18,12 @@ public class PlayerBucketEmptyEvent extends PlayerBucketEvent { + super(who, blockClicked, blockFace, bucket, itemInHand); + } + ++ // Paper start - add EquipmentSlot ++ public PlayerBucketEmptyEvent(final Player who, final Block blockClicked, final BlockFace blockFace, final Material bucket, final ItemStack itemInHand, final EquipmentSlot hand) { ++ super(who, blockClicked, blockFace, bucket, itemInHand, hand); ++ } ++ // Paper end ++ + @Override + public HandlerList getHandlers() { + return handlers; +diff --git a/src/main/java/org/bukkit/event/player/PlayerBucketEvent.java b/src/main/java/org/bukkit/event/player/PlayerBucketEvent.java +index 56584687..3dbe428b 100644 +--- a/src/main/java/org/bukkit/event/player/PlayerBucketEvent.java ++++ b/src/main/java/org/bukkit/event/player/PlayerBucketEvent.java +@@ -5,6 +5,7 @@ import org.bukkit.block.Block; + import org.bukkit.block.BlockFace; + import org.bukkit.entity.Player; + import org.bukkit.event.Cancellable; ++import org.bukkit.inventory.EquipmentSlot; + import org.bukkit.inventory.ItemStack; + + /** +@@ -16,13 +17,21 @@ public abstract class PlayerBucketEvent extends PlayerEvent implements Cancellab + private final Block blockClicked; + private final BlockFace blockFace; + private final Material bucket; ++ private final EquipmentSlot hand; // Paper - add EquipmentSlot + + public PlayerBucketEvent(final Player who, final Block blockClicked, final BlockFace blockFace, final Material bucket, final ItemStack itemInHand) { ++ // Paper start - add EquipmentSlot ++ this(who, blockClicked, blockFace, bucket, itemInHand, null); ++ } ++ ++ public PlayerBucketEvent(final Player who, final Block blockClicked, final BlockFace blockFace, final Material bucket, final ItemStack itemInHand, final EquipmentSlot hand) { ++ // Paper end + super(who); + this.blockClicked = blockClicked; + this.blockFace = blockFace; + this.itemStack = itemInHand; + this.bucket = bucket; ++ this.hand = hand == null ? player.getInventory().getItemInMainHand().equals(itemInHand) ? EquipmentSlot.HAND : EquipmentSlot.OFF_HAND : hand; // Paper - add EquipmentSlot + } + + /** +@@ -70,6 +79,17 @@ public abstract class PlayerBucketEvent extends PlayerEvent implements Cancellab + return blockFace; + } + ++ // Paper start ++ /** ++ * The hand used to perform this action. ++ * ++ * @return the hand used ++ */ ++ public EquipmentSlot getHand() { ++ return hand; ++ } ++ // Paper end ++ + public boolean isCancelled() { + return cancelled; + } +diff --git a/src/main/java/org/bukkit/event/player/PlayerBucketFillEvent.java b/src/main/java/org/bukkit/event/player/PlayerBucketFillEvent.java +index 94e042a3..884b9240 100644 +--- a/src/main/java/org/bukkit/event/player/PlayerBucketFillEvent.java ++++ b/src/main/java/org/bukkit/event/player/PlayerBucketFillEvent.java +@@ -5,6 +5,7 @@ import org.bukkit.block.Block; + import org.bukkit.block.BlockFace; + import org.bukkit.entity.Player; + import org.bukkit.event.HandlerList; ++import org.bukkit.inventory.EquipmentSlot; + import org.bukkit.inventory.ItemStack; + + /** +@@ -17,6 +18,12 @@ public class PlayerBucketFillEvent extends PlayerBucketEvent { + super(who, blockClicked, blockFace, bucket, itemInHand); + } + ++ // Paper start - add EquipmentSlot ++ public PlayerBucketFillEvent(final Player who, final Block blockClicked, final BlockFace blockFace, final Material bucket, final ItemStack itemInHand, final EquipmentSlot hand) { ++ super(who, blockClicked, blockFace, bucket, itemInHand, hand); ++ } ++ // Paper end ++ + @Override + public HandlerList getHandlers() { + return handlers; +-- +2.11.0 + diff --git a/Spigot-Server-Patches/0329-Add-hand-to-bucket-events.patch b/Spigot-Server-Patches/0329-Add-hand-to-bucket-events.patch new file mode 100644 index 0000000000..3e15d0284b --- /dev/null +++ b/Spigot-Server-Patches/0329-Add-hand-to-bucket-events.patch @@ -0,0 +1,109 @@ +From 2c6d1dfa07de5e7327b1ab86be0795e156d9279c Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Thu, 2 Aug 2018 08:44:35 -0500 +Subject: [PATCH] Add hand to bucket events + + +diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java +index b2010ffa6..3493c4c44 100644 +--- a/src/main/java/net/minecraft/server/EntityCow.java ++++ b/src/main/java/net/minecraft/server/EntityCow.java +@@ -65,7 +65,7 @@ public class EntityCow extends EntityAnimal { + if (itemstack.getItem() == Items.BUCKET && !entityhuman.abilities.canInstantlyBuild && !this.isBaby()) { + // CraftBukkit start - Got milk? + org.bukkit.Location loc = this.getBukkitEntity().getLocation(); +- org.bukkit.event.player.PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent(entityhuman, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), null, itemstack, Items.MILK_BUCKET); ++ org.bukkit.event.player.PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent(entityhuman, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), null, itemstack, Items.MILK_BUCKET, enumhand); // Paper - add enumHand + + if (event.isCancelled()) { + return false; +diff --git a/src/main/java/net/minecraft/server/ItemBucket.java b/src/main/java/net/minecraft/server/ItemBucket.java +index 4355ef52c..e720dded0 100644 +--- a/src/main/java/net/minecraft/server/ItemBucket.java ++++ b/src/main/java/net/minecraft/server/ItemBucket.java +@@ -37,7 +37,7 @@ public class ItemBucket extends Item { + if (iblockdata.getBlock() instanceof IFluidSource) { + // CraftBukkit start + FluidType dummyFluid = ((IFluidSource) iblockdata.getBlock()).a(DummyGeneratorAccess.INSTANCE, blockposition, iblockdata); +- PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent(entityhuman, blockposition.getX(), blockposition.getY(), blockposition.getZ(), null, itemstack, dummyFluid.b()); ++ PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent(entityhuman, blockposition.getX(), blockposition.getY(), blockposition.getZ(), null, itemstack, dummyFluid.b(), enumhand); // Paper - add enumHand + + if (event.isCancelled()) { + return new InteractionResultWrapper(EnumInteractionResult.FAIL, itemstack); +@@ -63,7 +63,7 @@ public class ItemBucket extends Item { + iblockdata = world.getType(blockposition); + BlockPosition blockposition1 = this.a(iblockdata, blockposition, movingobjectposition); + +- if (this.a(entityhuman, world, blockposition1, movingobjectposition, movingobjectposition.direction, blockposition, itemstack)) { // CraftBukkit ++ if (this.a(entityhuman, world, blockposition1, movingobjectposition, movingobjectposition.direction, blockposition, itemstack, enumhand)) { // CraftBukkit // Paper - add enumHand + this.a(world, itemstack, blockposition1); + if (entityhuman instanceof EntityPlayer) { + CriterionTriggers.y.a((EntityPlayer) entityhuman, blockposition1, itemstack); +@@ -117,6 +117,12 @@ public class ItemBucket extends Item { + } + + public boolean a(EntityHuman entityhuman, World world, BlockPosition blockposition, @Nullable MovingObjectPosition movingobjectposition, EnumDirection enumdirection, BlockPosition clicked, ItemStack itemstack) { ++ // Paper start - add enumHand ++ return a(entityhuman, world, blockposition, movingobjectposition, enumdirection, clicked, itemstack, null); ++ } ++ ++ public boolean a(EntityHuman entityhuman, World world, BlockPosition blockposition, @Nullable MovingObjectPosition movingobjectposition, EnumDirection enumdirection, BlockPosition clicked, ItemStack itemstack, EnumHand enumhand) { ++ // Paper end + // CraftBukkit end + if (!(this.a instanceof FluidTypeFlowing)) { + return false; +@@ -127,11 +133,11 @@ public class ItemBucket extends Item { + boolean flag1 = material.isReplaceable(); + + if (!world.isEmpty(blockposition) && !flag && !flag1 && (!(iblockdata.getBlock() instanceof IFluidContainer) || !((IFluidContainer) iblockdata.getBlock()).a((IBlockAccess) world, blockposition, iblockdata, this.a))) { +- return movingobjectposition == null ? false : this.a(entityhuman, world, movingobjectposition.a().shift(movingobjectposition.direction), (MovingObjectPosition) null, enumdirection, clicked, itemstack); // CraftBukkit ++ return movingobjectposition == null ? false : this.a(entityhuman, world, movingobjectposition.a().shift(movingobjectposition.direction), (MovingObjectPosition) null, enumdirection, clicked, itemstack, enumhand); // CraftBukkit // Paper - add enumHand + } else { + // CraftBukkit start + if (entityhuman != null) { +- PlayerBucketEmptyEvent event = CraftEventFactory.callPlayerBucketEmptyEvent(entityhuman, clicked.getX(), clicked.getY(), clicked.getZ(), enumdirection, itemstack); ++ PlayerBucketEmptyEvent event = CraftEventFactory.callPlayerBucketEmptyEvent(entityhuman, clicked.getX(), clicked.getY(), clicked.getZ(), enumdirection, itemstack, enumhand); // Paper - add enumHand + if (event.isCancelled()) { + // TODO: inventory not updated + return false; +diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +index 140ddae0d..9037a1233 100644 +--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java ++++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +@@ -168,6 +168,20 @@ public class CraftEventFactory { + } + + private static PlayerEvent getPlayerBucketEvent(boolean isFilling, EntityHuman who, int clickedX, int clickedY, int clickedZ, EnumDirection clickedFace, ItemStack itemstack, net.minecraft.server.Item item) { ++ // Paper start - add EnumHand ++ return getPlayerBucketEvent(isFilling, who, clickedX, clickedY, clickedZ, clickedFace, itemstack, item, null); ++ } ++ ++ public static PlayerBucketEmptyEvent callPlayerBucketEmptyEvent(EntityHuman who, int clickedX, int clickedY, int clickedZ, EnumDirection clickedFace, ItemStack itemInHand, EnumHand enumHand) { ++ return (PlayerBucketEmptyEvent) getPlayerBucketEvent(false, who, clickedX, clickedY, clickedZ, clickedFace, itemInHand, Items.BUCKET, enumHand); ++ } ++ ++ public static PlayerBucketFillEvent callPlayerBucketFillEvent(EntityHuman who, int clickedX, int clickedY, int clickedZ, EnumDirection clickedFace, ItemStack itemInHand, net.minecraft.server.Item bucket, EnumHand enumHand) { ++ return (PlayerBucketFillEvent) getPlayerBucketEvent(true, who, clickedX, clickedY, clickedZ, clickedFace, itemInHand, bucket, enumHand); ++ } ++ ++ private static PlayerEvent getPlayerBucketEvent(boolean isFilling, EntityHuman who, int clickedX, int clickedY, int clickedZ, EnumDirection clickedFace, ItemStack itemstack, net.minecraft.server.Item item, EnumHand enumHand) { ++ // Paper end + Player player = (who == null) ? null : (Player) who.getBukkitEntity(); + CraftItemStack itemInHand = CraftItemStack.asNewCraftStack(item); + Material bucket = CraftMagicNumbers.getMaterial(itemstack.getItem()); +@@ -180,10 +194,10 @@ public class CraftEventFactory { + + PlayerEvent event = null; + if (isFilling) { +- event = new PlayerBucketFillEvent(player, blockClicked, blockFace, bucket, itemInHand); ++ event = new PlayerBucketFillEvent(player, blockClicked, blockFace, bucket, itemInHand, enumHand == null ? null : enumHand == EnumHand.OFF_HAND ? EquipmentSlot.OFF_HAND : EquipmentSlot.HAND); // Paper - add enumHand + ((PlayerBucketFillEvent) event).setCancelled(!canBuild(craftWorld, player, clickedX, clickedZ)); + } else { +- event = new PlayerBucketEmptyEvent(player, blockClicked, blockFace, bucket, itemInHand); ++ event = new PlayerBucketEmptyEvent(player, blockClicked, blockFace, bucket, itemInHand, enumHand == null ? null : enumHand == EnumHand.OFF_HAND ? EquipmentSlot.OFF_HAND : EquipmentSlot.HAND); // Paper - add enumHand + ((PlayerBucketEmptyEvent) event).setCancelled(!canBuild(craftWorld, player, clickedX, clickedZ)); + } + +-- +2.11.0 +