mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-09 11:44:19 +01:00
eed041d629
By: md_5 <git@md-5.net>
50 lines
2.6 KiB
Diff
50 lines
2.6 KiB
Diff
--- a/net/minecraft/world/entity/animal/Bucketable.java
|
|
+++ b/net/minecraft/world/entity/animal/Bucketable.java
|
|
@@ -17,6 +17,14 @@
|
|
import net.minecraft.world.item.component.CustomData;
|
|
import net.minecraft.world.level.World;
|
|
|
|
+// CraftBukkit start
|
|
+import net.minecraft.network.protocol.game.PacketPlayOutSpawnEntity;
|
|
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
|
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
|
+import org.bukkit.event.entity.EntityRemoveEvent;
|
|
+import org.bukkit.event.player.PlayerBucketEntityEvent;
|
|
+// CraftBukkit end
|
|
+
|
|
public interface Bucketable {
|
|
|
|
boolean fromBucket();
|
|
@@ -93,10 +101,22 @@
|
|
ItemStack itemstack = entityhuman.getItemInHand(enumhand);
|
|
|
|
if (itemstack.getItem() == Items.WATER_BUCKET && t0.isAlive()) {
|
|
- t0.playSound(((Bucketable) t0).getPickupSound(), 1.0F, 1.0F);
|
|
+ // CraftBukkit start
|
|
+ // t0.playSound(((Bucketable) t0).getPickupSound(), 1.0F, 1.0F); // CraftBukkit - moved down
|
|
ItemStack itemstack1 = ((Bucketable) t0).getBucketItemStack();
|
|
|
|
((Bucketable) t0).saveToBucketTag(itemstack1);
|
|
+
|
|
+ PlayerBucketEntityEvent playerBucketFishEvent = CraftEventFactory.callPlayerFishBucketEvent(t0, entityhuman, itemstack, itemstack1, enumhand);
|
|
+ itemstack1 = CraftItemStack.asNMSCopy(playerBucketFishEvent.getEntityBucket());
|
|
+ if (playerBucketFishEvent.isCancelled()) {
|
|
+ ((EntityPlayer) entityhuman).containerMenu.sendAllDataToRemote(); // We need to update inventory to resync client's bucket
|
|
+ t0.getBukkitEntity().update((EntityPlayer) entityhuman); // We need to play out these packets as the client assumes the fish is gone
|
|
+ t0.refreshEntityData((EntityPlayer) entityhuman); // Need to send data such as the display name to client
|
|
+ return Optional.of(EnumInteractionResult.FAIL);
|
|
+ }
|
|
+ t0.playSound(((Bucketable) t0).getPickupSound(), 1.0F, 1.0F);
|
|
+ // CraftBukkit end
|
|
ItemStack itemstack2 = ItemLiquidUtil.createFilledResult(itemstack, entityhuman, itemstack1, false);
|
|
|
|
entityhuman.setItemInHand(enumhand, itemstack2);
|
|
@@ -106,7 +126,7 @@
|
|
CriterionTriggers.FILLED_BUCKET.trigger((EntityPlayer) entityhuman, itemstack1);
|
|
}
|
|
|
|
- t0.discard();
|
|
+ t0.discard(EntityRemoveEvent.Cause.PICKUP); // CraftBukkit - add Bukkit remove cause
|
|
return Optional.of(EnumInteractionResult.sidedSuccess(world.isClientSide));
|
|
} else {
|
|
return Optional.empty();
|