diff --git a/nms-patches/ItemBucket.patch b/nms-patches/ItemBucket.patch index 44c3067fea..cce590e621 100644 --- a/nms-patches/ItemBucket.patch +++ b/nms-patches/ItemBucket.patch @@ -14,7 +14,7 @@ public class ItemBucket extends Item { -@@ -26,12 +33,20 @@ +@@ -26,12 +33,21 @@ if (this.fluidType == FluidTypes.a) { iblockdata = world.getType(blockposition); if (iblockdata.getBlock() instanceof IFluidSource) { @@ -23,6 +23,7 @@ + PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent(entityhuman, blockposition.getX(), blockposition.getY(), blockposition.getZ(), null, itemstack, dummyFluid.b()); + + if (event.isCancelled()) { ++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); // SPIGOT-4541 + return new InteractionResultWrapper(EnumInteractionResult.FAIL, itemstack); + } + // CraftBukkit end @@ -36,7 +37,7 @@ if (!world.isClientSide) { CriterionTriggers.j.a((EntityPlayer) entityhuman, new ItemStack(fluidtype.b())); -@@ -46,7 +61,7 @@ +@@ -46,7 +62,7 @@ iblockdata = world.getType(blockposition); BlockPosition blockposition1 = this.a(iblockdata, blockposition, movingobjectposition); @@ -45,7 +46,7 @@ this.a(world, itemstack, blockposition1); if (entityhuman instanceof EntityPlayer) { CriterionTriggers.y.a((EntityPlayer) entityhuman, blockposition1, itemstack); -@@ -76,16 +91,19 @@ +@@ -76,16 +92,19 @@ public void a(World world, ItemStack itemstack, BlockPosition blockposition) {} @@ -69,7 +70,7 @@ } return itemstack; -@@ -93,7 +111,13 @@ +@@ -93,7 +112,13 @@ } } @@ -83,7 +84,7 @@ if (!(this.fluidType instanceof FluidTypeFlowing)) { return false; } else { -@@ -103,8 +127,18 @@ +@@ -103,8 +128,18 @@ boolean flag1 = material.isReplaceable(); if (!world.isEmpty(blockposition) && !flag && !flag1 && (!(iblockdata.getBlock() instanceof IFluidContainer) || !((IFluidContainer) iblockdata.getBlock()).canPlace(world, blockposition, iblockdata, this.fluidType))) { @@ -95,7 +96,7 @@ + PlayerBucketEmptyEvent event = CraftEventFactory.callPlayerBucketEmptyEvent(entityhuman, clicked.getX(), clicked.getY(), clicked.getZ(), enumdirection, itemstack); + if (event.isCancelled()) { + ((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutBlockChange(world, blockposition)); // SPIGOT-4238: needed when looking through entity -+ // TODO: inventory not updated ++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); // SPIGOT-4541 + return false; + } + }