diff --git a/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch index 0124d8638f0b..daf2293f80ab 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch @@ -620,18 +620,19 @@ double d = entity.getX() - this.getX(); double d1 = entity.getZ() - this.getZ(); double max = Mth.absMax(d, d1); -@@ -1805,7 +_,23 @@ +@@ -1804,8 +_,24 @@ + } public void push(double x, double y, double z) { - if (Double.isFinite(x) && Double.isFinite(y) && Double.isFinite(z)) { -- this.setDeltaMovement(this.getDeltaMovement().add(x, y, z)); -+ // Paper start - Add EntityKnockbackByEntityEvent and EntityPushedByEntityAttackEvent -+ this.push(x, y, z, null); -+ } ++ // Paper start - Add EntityKnockbackByEntityEvent and EntityPushedByEntityAttackEvent ++ this.push(x, y, z, null); + } + + public void push(double x, double y, double z, @Nullable Entity pushingEntity) { -+ { ++ // Paper end - Add EntityKnockbackByEntityEvent and EntityPushedByEntityAttackEvent + if (Double.isFinite(x) && Double.isFinite(y) && Double.isFinite(z)) { +- this.setDeltaMovement(this.getDeltaMovement().add(x, y, z)); ++ // Paper start - Add EntityKnockbackByEntityEvent and EntityPushedByEntityAttackEvent + org.bukkit.util.Vector delta = new org.bukkit.util.Vector(x, y, z); + if (pushingEntity != null) { + io.papermc.paper.event.entity.EntityPushedByEntityAttackEvent event = new io.papermc.paper.event.entity.EntityPushedByEntityAttackEvent(this.getBukkitEntity(), io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.PUSH, pushingEntity.getBukkitEntity(), delta); diff --git a/paper-server/patches/sources/net/minecraft/world/entity/animal/dolphin/Dolphin.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/animal/dolphin/Dolphin.java.patch index 1fdf4e400bf8..91bed267dcc2 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/animal/dolphin/Dolphin.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/animal/dolphin/Dolphin.java.patch @@ -28,7 +28,7 @@ ItemStack item = entity.getItem(); if (this.canHoldItem(item)) { + // CraftBukkit start - call EntityPickupItemEvent -+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(this, entity, 0, false).isCancelled()) return; ++ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(this, entity, 0).isCancelled()) return; + item = entity.getItem(); // CraftBukkit- update ItemStack from event + // CraftBukkit end this.onItemPickup(entity); diff --git a/paper-server/patches/sources/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch index 6ed008f0f724..d0c0a517b7e0 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch @@ -1,28 +1,22 @@ --- a/net/minecraft/world/entity/monster/piglin/PiglinAi.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinAi.java -@@ -336,23 +_,32 @@ +@@ -335,24 +_,26 @@ + protected static void pickUpItem(ServerLevel level, Piglin piglin, ItemEntity itemEntity) { stopWalking(piglin); ++ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(piglin, itemEntity, itemEntity.getItem().is(Items.GOLD_NUGGET) ? 0 : itemEntity.getItem().getCount() - 1).isCancelled()) return; // Paper ++ piglin.onItemPickup(itemEntity); // Paper - moved from Piglin#pickUpItem - call prior to item entity modification ItemStack item; -- if (itemEntity.getItem().is(Items.GOLD_NUGGET)) { -+ // CraftBukkit start -+ // Paper start - EntityPickupItemEvent fixes; fix event firing twice -+ if (itemEntity.getItem().is(Items.GOLD_NUGGET)) { // Paper -+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(piglin, itemEntity, 0, false).isCancelled()) return; -+ piglin.onItemPickup(itemEntity); // Paper - moved from Piglin#pickUpItem - call prior to item entity modification -+ // Paper end - piglin.take(itemEntity, itemEntity.getItem().getCount()); + if (itemEntity.getItem().is(Items.GOLD_NUGGET)) { +- piglin.take(itemEntity, itemEntity.getItem().getCount()); ++ piglin.take(itemEntity, itemEntity.getItem().getCount()); // Paper - diff on change for above event item = itemEntity.getItem(); - itemEntity.discard(); -- } else { + itemEntity.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.PICKUP); // CraftBukkit - add Bukkit remove cause -+ } else if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(piglin, itemEntity, itemEntity.getItem().getCount() - 1, false).isCancelled()) { -+ piglin.onItemPickup(itemEntity); // Paper - EntityPickupItemEvent fixes; moved from Piglin#pickUpItem - call prior to item entity modification - piglin.take(itemEntity, 1); + } else { +- piglin.take(itemEntity, 1); ++ piglin.take(itemEntity, 1); // Paper - diff on change for above event item = removeOneItemFromItemEntity(itemEntity); -+ } else { -+ return; -+ // CraftBukkit end } - if (isLovedItem(item)) { diff --git a/paper-server/patches/sources/net/minecraft/world/entity/npc/InventoryCarrier.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/npc/InventoryCarrier.java.patch index d6e11326339e..106c9c66cfb6 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/npc/InventoryCarrier.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/npc/InventoryCarrier.java.patch @@ -6,7 +6,7 @@ + // CraftBukkit start + ItemStack remaining = new SimpleContainer(inventory).addItem(item); -+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(mob, itemEntity, remaining.getCount(), false).isCancelled()) { ++ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(mob, itemEntity, remaining.getCount()).isCancelled()) { + return; + } + // CraftBukkit end diff --git a/paper-server/patches/sources/net/minecraft/world/entity/raid/Raider.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/raid/Raider.java.patch index 1d98a008dec0..e71cc3849ea2 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/raid/Raider.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/raid/Raider.java.patch @@ -5,7 +5,7 @@ && !flag && ItemStack.matches(item, Raid.getOminousBannerInstance(this.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN)))) { + // Paper start - EntityPickupItemEvent fixes -+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(this, entity, 0, false).isCancelled()) { ++ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(this, entity, 0).isCancelled()) { + return; + } + // Paper end - EntityPickupItemEvent fixes diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 0cc84ce20747..cd83ca2ace1d 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -1944,6 +1944,10 @@ public static PlayerRecipeDiscoverEvent callPlayerRecipeListUpdateEvent(net.mine return event; } + public static EntityPickupItemEvent callEntityPickupItemEvent(Entity entity, ItemEntity item, int remaining) { + return callEntityPickupItemEvent(entity, item, remaining, false); + } + public static EntityPickupItemEvent callEntityPickupItemEvent(Entity entity, ItemEntity item, int remaining, boolean cancelled) { EntityPickupItemEvent event = new EntityPickupItemEvent((LivingEntity) entity.getBukkitEntity(), (Item) item.getBukkitEntity(), remaining); event.setCancelled(cancelled);