diff options
Diffstat (limited to 'patch-remap/og/net/minecraft/world/item/ItemBucket.patch')
-rw-r--r-- | patch-remap/og/net/minecraft/world/item/ItemBucket.patch | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/patch-remap/og/net/minecraft/world/item/ItemBucket.patch b/patch-remap/og/net/minecraft/world/item/ItemBucket.patch new file mode 100644 index 0000000000..6f02b19e96 --- /dev/null +++ b/patch-remap/og/net/minecraft/world/item/ItemBucket.patch @@ -0,0 +1,88 @@ +--- a/net/minecraft/world/item/ItemBucket.java ++++ b/net/minecraft/world/item/ItemBucket.java +@@ -29,6 +29,16 @@ + import net.minecraft.world.phys.MovingObjectPosition; + import net.minecraft.world.phys.MovingObjectPositionBlock; + ++// CraftBukkit start ++import net.minecraft.network.protocol.game.PacketPlayOutBlockChange; ++import net.minecraft.server.level.WorldServer; ++import org.bukkit.craftbukkit.event.CraftEventFactory; ++import org.bukkit.craftbukkit.inventory.CraftItemStack; ++import org.bukkit.craftbukkit.util.DummyGeneratorAccess; ++import org.bukkit.event.player.PlayerBucketEmptyEvent; ++import org.bukkit.event.player.PlayerBucketFillEvent; ++// CraftBukkit end ++ + public class ItemBucket extends Item implements DispensibleContainerItem { + + public final FluidType content; +@@ -61,6 +71,17 @@ + + if (block instanceof IFluidSource) { + IFluidSource ifluidsource = (IFluidSource) block; ++ // CraftBukkit start ++ ItemStack dummyFluid = ifluidsource.pickupBlock(entityhuman, DummyGeneratorAccess.INSTANCE, blockposition, iblockdata); ++ if (dummyFluid.isEmpty()) return InteractionResultWrapper.fail(itemstack); // Don't fire event if the bucket won't be filled. ++ PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent((WorldServer) world, entityhuman, blockposition, blockposition, movingobjectpositionblock.getDirection(), itemstack, dummyFluid.getItem(), enumhand); ++ ++ if (event.isCancelled()) { ++ ((EntityPlayer) entityhuman).connection.send(new PacketPlayOutBlockChange(world, blockposition)); // SPIGOT-5163 (see PlayerInteractManager) ++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); // SPIGOT-4541 ++ return InteractionResultWrapper.fail(itemstack); ++ } ++ // CraftBukkit end + ItemStack itemstack1 = ifluidsource.pickupBlock(entityhuman, world, blockposition, iblockdata); + + if (!itemstack1.isEmpty()) { +@@ -69,7 +90,7 @@ + entityhuman.playSound(soundeffect, 1.0F, 1.0F); + }); + world.gameEvent((Entity) entityhuman, GameEvent.FLUID_PICKUP, blockposition); +- ItemStack itemstack2 = ItemLiquidUtil.createFilledResult(itemstack, entityhuman, itemstack1); ++ ItemStack itemstack2 = ItemLiquidUtil.createFilledResult(itemstack, entityhuman, CraftItemStack.asNMSCopy(event.getItemStack())); // CraftBukkit + + if (!world.isClientSide) { + CriterionTriggers.FILLED_BUCKET.trigger((EntityPlayer) entityhuman, itemstack1); +@@ -84,7 +105,7 @@ + iblockdata = world.getBlockState(blockposition); + BlockPosition blockposition2 = iblockdata.getBlock() instanceof IFluidContainer && this.content == FluidTypes.WATER ? blockposition : blockposition1; + +- if (this.emptyContents(entityhuman, world, blockposition2, movingobjectpositionblock)) { ++ if (this.emptyContents(entityhuman, world, blockposition2, movingobjectpositionblock, movingobjectpositionblock.getDirection(), blockposition, itemstack, enumhand)) { // CraftBukkit + this.checkExtraContent(entityhuman, world, itemstack, blockposition2); + if (entityhuman instanceof EntityPlayer) { + CriterionTriggers.PLACED_BLOCK.trigger((EntityPlayer) entityhuman, blockposition2, itemstack); +@@ -111,6 +132,12 @@ + + @Override + public boolean emptyContents(@Nullable EntityHuman entityhuman, World world, BlockPosition blockposition, @Nullable MovingObjectPositionBlock movingobjectpositionblock) { ++ // CraftBukkit start ++ return emptyContents(entityhuman, world, blockposition, movingobjectpositionblock, null, null, null, EnumHand.MAIN_HAND); ++ } ++ ++ public boolean emptyContents(EntityHuman entityhuman, World world, BlockPosition blockposition, @Nullable MovingObjectPositionBlock movingobjectpositionblock, EnumDirection enumdirection, BlockPosition clicked, ItemStack itemstack, EnumHand enumhand) { ++ // CraftBukkit end + FluidType fluidtype = this.content; + + if (!(fluidtype instanceof FluidTypeFlowing)) { +@@ -148,8 +175,18 @@ + + boolean flag2 = flag1; + ++ // CraftBukkit start ++ if (flag2 && entityhuman != null) { ++ PlayerBucketEmptyEvent event = CraftEventFactory.callPlayerBucketEmptyEvent((WorldServer) world, entityhuman, blockposition, clicked, enumdirection, itemstack, enumhand); ++ if (event.isCancelled()) { ++ ((EntityPlayer) entityhuman).connection.send(new PacketPlayOutBlockChange(world, blockposition)); // SPIGOT-4238: needed when looking through entity ++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); // SPIGOT-4541 ++ return false; ++ } ++ } ++ // CraftBukkit end + if (!flag2) { +- return movingobjectpositionblock != null && this.emptyContents(entityhuman, world, movingobjectpositionblock.getBlockPos().relative(movingobjectpositionblock.getDirection()), (MovingObjectPositionBlock) null); ++ return movingobjectpositionblock != null && this.emptyContents(entityhuman, world, movingobjectpositionblock.getBlockPos().relative(movingobjectpositionblock.getDirection()), (MovingObjectPositionBlock) null, enumdirection, clicked, itemstack, enumhand); // CraftBukkit + } else if (world.dimensionType().ultraWarm() && this.content.is(TagsFluid.WATER)) { + int i = blockposition.getX(); + int j = blockposition.getY(); |