Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Loading