diff --git a/nms-patches/EntityMushroomCow.patch b/nms-patches/EntityMushroomCow.patch index 83850b4a8c..e3e460cc68 100644 --- a/nms-patches/EntityMushroomCow.patch +++ b/nms-patches/EntityMushroomCow.patch @@ -1,26 +1,22 @@ --- a/net/minecraft/server/EntityMushroomCow.java +++ b/net/minecraft/server/EntityMushroomCow.java -@@ -3,6 +3,11 @@ +@@ -3,6 +3,10 @@ import java.util.Random; import java.util.UUID; import org.apache.commons.lang3.tuple.Pair; +// CraftBukkit start +import org.bukkit.craftbukkit.event.CraftEventFactory; +import org.bukkit.event.entity.EntityTransformEvent; -+import org.bukkit.event.player.PlayerShearEntityEvent; +// CraftBukkit end public class EntityMushroomCow extends EntityCow { -@@ -81,9 +86,17 @@ +@@ -81,9 +85,14 @@ int i; if (itemstack.getItem() == Items.SHEARS && !this.isBaby()) { + // CraftBukkit start -+ PlayerShearEntityEvent event = new PlayerShearEntityEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), this.getBukkitEntity()); -+ this.world.getServer().getPluginManager().callEvent(event); -+ -+ if (event.isCancelled()) { ++ if (!CraftEventFactory.handlePlayerShearEntityEvent(entityhuman, this, itemstack, enumhand)) { + return false; + } + // CraftBukkit end @@ -31,7 +27,7 @@ EntityCow entitycow = (EntityCow) EntityTypes.COW.a(this.world); entitycow.setPositionRotation(this.locX(), this.locY(), this.locZ(), this.yaw, this.pitch); -@@ -99,7 +112,14 @@ +@@ -99,7 +108,14 @@ } entitycow.setInvulnerable(this.isInvulnerable()); diff --git a/nms-patches/EntitySheep.patch b/nms-patches/EntitySheep.patch index 75b4507d2c..bab2ee959d 100644 --- a/nms-patches/EntitySheep.patch +++ b/nms-patches/EntitySheep.patch @@ -5,8 +5,8 @@ import javax.annotation.Nullable; +// CraftBukkit start ++import org.bukkit.craftbukkit.event.CraftEventFactory; +import org.bukkit.event.entity.SheepRegrowWoolEvent; -+import org.bukkit.event.player.PlayerShearEntityEvent; +import org.bukkit.inventory.InventoryView; +// CraftBukkit end + @@ -18,15 +18,12 @@ enummap.put(EnumColor.WHITE, Blocks.WHITE_WOOL); enummap.put(EnumColor.ORANGE, Blocks.ORANGE_WOOL); enummap.put(EnumColor.MAGENTA, Blocks.MAGENTA_WOOL); -@@ -141,6 +147,15 @@ +@@ -141,6 +147,12 @@ ItemStack itemstack = entityhuman.b(enumhand); if (itemstack.getItem() == Items.SHEARS && !this.isSheared() && !this.isBaby()) { + // CraftBukkit start -+ PlayerShearEntityEvent event = new PlayerShearEntityEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), this.getBukkitEntity()); -+ this.world.getServer().getPluginManager().callEvent(event); -+ -+ if (event.isCancelled()) { ++ if (!CraftEventFactory.handlePlayerShearEntityEvent(entityhuman, this, itemstack, enumhand)) { + return false; + } + // CraftBukkit end @@ -34,7 +31,7 @@ this.shear(); if (!this.world.isClientSide) { itemstack.damage(1, entityhuman, (entityhuman1) -> { -@@ -160,7 +175,9 @@ +@@ -160,7 +172,9 @@ int i = 1 + this.random.nextInt(3); for (int j = 0; j < i; ++j) { @@ -44,7 +41,7 @@ if (entityitem != null) { entityitem.setMot(entityitem.getMot().add((double) ((this.random.nextFloat() - this.random.nextFloat()) * 0.1F), (double) (this.random.nextFloat() * 0.05F), (double) ((this.random.nextFloat() - this.random.nextFloat()) * 0.1F))); -@@ -247,6 +264,12 @@ +@@ -247,6 +261,12 @@ @Override public void blockEaten() { @@ -57,7 +54,7 @@ this.setSheared(false); if (this.isBaby()) { this.setAge(60); -@@ -265,7 +288,7 @@ +@@ -265,7 +285,7 @@ EnumColor enumcolor = ((EntitySheep) entityanimal).getColor(); EnumColor enumcolor1 = ((EntitySheep) entityanimal1).getColor(); InventoryCrafting inventorycrafting = a(enumcolor, enumcolor1); @@ -66,7 +63,7 @@ return recipecrafting.a(inventorycrafting); }).map(ItemStack::getItem); -@@ -283,10 +306,18 @@ +@@ -283,10 +303,18 @@ public boolean canUse(EntityHuman entityhuman) { return false; } diff --git a/nms-patches/EntitySnowman.patch b/nms-patches/EntitySnowman.patch index 2fb1185cb9..483aded538 100644 --- a/nms-patches/EntitySnowman.patch +++ b/nms-patches/EntitySnowman.patch @@ -1,17 +1,16 @@ --- a/net/minecraft/server/EntitySnowman.java +++ b/net/minecraft/server/EntitySnowman.java -@@ -1,6 +1,10 @@ +@@ -1,6 +1,9 @@ package net.minecraft.server; import javax.annotation.Nullable; +// CraftBukkit start +import org.bukkit.craftbukkit.event.CraftEventFactory; -+import org.bukkit.event.player.PlayerShearEntityEvent; +// CraftBukkit end public class EntitySnowman extends EntityGolem implements IRangedEntity { -@@ -62,7 +66,7 @@ +@@ -62,7 +65,7 @@ } if (this.world.getBiome(new BlockPosition(i, 0, k)).getAdjustedTemperature(new BlockPosition(i, j, k)) > 1.0F) { @@ -20,7 +19,7 @@ } if (!this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING)) { -@@ -78,7 +82,7 @@ +@@ -78,7 +81,7 @@ BlockPosition blockposition = new BlockPosition(i, j, k); if (this.world.getType(blockposition).isAir() && this.world.getBiome(blockposition).getAdjustedTemperature(blockposition) < 0.8F && iblockdata.canPlace(this.world, blockposition)) { @@ -29,15 +28,12 @@ } } } -@@ -110,6 +114,14 @@ +@@ -110,6 +113,11 @@ if (itemstack.getItem() == Items.SHEARS && this.hasPumpkin()) { if (!this.world.isClientSide) { + // CraftBukkit start -+ PlayerShearEntityEvent event = new PlayerShearEntityEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), this.getBukkitEntity()); -+ this.world.getServer().getPluginManager().callEvent(event); -+ -+ if (event.isCancelled()) { ++ if (!CraftEventFactory.handlePlayerShearEntityEvent(entityhuman, this, itemstack, enumhand)) { + return false; + } + // CraftBukkit end diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 59df265924..75cae10710 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -196,6 +196,7 @@ import org.bukkit.event.player.PlayerItemBreakEvent; import org.bukkit.event.player.PlayerItemMendEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.event.player.PlayerRecipeDiscoverEvent; +import org.bukkit.event.player.PlayerShearEntityEvent; import org.bukkit.event.player.PlayerStatisticIncrementEvent; import org.bukkit.event.player.PlayerUnleashEntityEvent; import org.bukkit.event.raid.RaidFinishEvent; @@ -1309,6 +1310,16 @@ public class CraftEventFactory { return bse; } + public static boolean handlePlayerShearEntityEvent(EntityHuman player, Entity sheared, ItemStack shears, EnumHand hand) { + if (!(player instanceof EntityPlayer)) { + return true; + } + + PlayerShearEntityEvent event = new PlayerShearEntityEvent((Player) player.getBukkitEntity(), sheared.getBukkitEntity(), CraftItemStack.asCraftMirror(shears), (hand == EnumHand.OFF_HAND ? EquipmentSlot.OFF_HAND : EquipmentSlot.HAND)); + Bukkit.getPluginManager().callEvent(event); + return !event.isCancelled(); + } + public static Cancellable handleStatisticsIncrease(EntityHuman entityHuman, net.minecraft.server.Statistic statistic, int current, int incrementation) { Player player = ((EntityPlayer) entityHuman).getBukkitEntity(); Event event;