From 8dfa97afe465a9cb5f5d9f745b4eac279bd2c881 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 23 Jul 2021 16:36:16 +1000 Subject: [PATCH] SPIGOT-6669: Shearing a Mooshroom does not fire EntityDropItemEvent --- .../entity/animal/EntityMushroomCow.patch | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/nms-patches/net/minecraft/world/entity/animal/EntityMushroomCow.patch b/nms-patches/net/minecraft/world/entity/animal/EntityMushroomCow.patch index 945939026..488d66ddf 100644 --- a/nms-patches/net/minecraft/world/entity/animal/EntityMushroomCow.patch +++ b/nms-patches/net/minecraft/world/entity/animal/EntityMushroomCow.patch @@ -1,18 +1,20 @@ --- a/net/minecraft/world/entity/animal/EntityMushroomCow.java +++ b/net/minecraft/world/entity/animal/EntityMushroomCow.java -@@ -42,6 +42,11 @@ +@@ -42,6 +42,13 @@ import net.minecraft.world.level.gameevent.GameEvent; import org.apache.commons.lang3.tuple.Pair; +// CraftBukkit start ++import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.event.CraftEventFactory; ++import org.bukkit.event.entity.EntityDropItemEvent; +import org.bukkit.event.entity.EntityTransformEvent; +// CraftBukkit end + public class EntityMushroomCow extends EntityCow implements IShearable { private static final DataWatcherObject DATA_TYPE = DataWatcher.a(EntityMushroomCow.class, DataWatcherRegistry.STRING); -@@ -113,6 +118,11 @@ +@@ -113,6 +120,11 @@ this.playSound(soundeffect, 1.0F, 1.0F); return EnumInteractionResult.a(this.level.isClientSide); } else if (itemstack.a(Items.SHEARS) && this.canShear()) { @@ -24,7 +26,7 @@ this.shear(SoundCategory.PLAYERS); this.a(GameEvent.SHEAR, (Entity) entityhuman); if (!this.level.isClientSide) { -@@ -160,7 +170,7 @@ +@@ -160,7 +172,7 @@ this.level.playSound((EntityHuman) null, (Entity) this, SoundEffects.MOOSHROOM_SHEAR, soundcategory, 1.0F, 1.0F); if (!this.level.isClientSide()) { ((WorldServer) this.level).a(Particles.EXPLOSION, this.locX(), this.e(0.5D), this.locZ(), 1, 0.0D, 0.0D, 0.0D, 0.0D); @@ -33,7 +35,7 @@ EntityCow entitycow = (EntityCow) EntityTypes.COW.a(this.level); entitycow.setPositionRotation(this.locX(), this.locY(), this.locZ(), this.getYRot(), this.getXRot()); -@@ -176,7 +186,14 @@ +@@ -176,10 +188,25 @@ } entitycow.setInvulnerable(this.isInvulnerable()); @@ -48,4 +50,16 @@ + // CraftBukkit end for (int i = 0; i < 5; ++i) { - this.level.addEntity(new EntityItem(this.level, this.locX(), this.e(1.0D), this.locZ(), new ItemStack(this.getVariant().blockState.getBlock()))); +- this.level.addEntity(new EntityItem(this.level, this.locX(), this.e(1.0D), this.locZ(), new ItemStack(this.getVariant().blockState.getBlock()))); ++ // CraftBukkit start ++ EntityItem entityitem = new EntityItem(this.level, this.locX(), this.e(1.0D), this.locZ(), new ItemStack(this.getVariant().blockState.getBlock())); ++ EntityDropItemEvent event = new EntityDropItemEvent(this.getBukkitEntity(), (org.bukkit.entity.Item) entityitem.getBukkitEntity()); ++ Bukkit.getPluginManager().callEvent(event); ++ if (event.isCancelled()) { ++ continue; ++ } ++ this.level.addEntity(entityitem); ++ // CraftBukkit end + } + } +