mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-30 16:19:03 +01:00
EntityPickupItemEvent fixes (#8096)
This commit is contained in:
parent
6e4207e2d9
commit
365d10556b
1 changed files with 66 additions and 0 deletions
66
patches/server/EntityPickupItemEvent-fixes.patch
Normal file
66
patches/server/EntityPickupItemEvent-fixes.patch
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
||||||
|
Date: Mon, 4 Jul 2022 21:45:36 -0700
|
||||||
|
Subject: [PATCH] EntityPickupItemEvent fixes
|
||||||
|
|
||||||
|
Fixes double firing of the event in PiglinAi
|
||||||
|
|
||||||
|
Fixes cancelling the event for piglins still triggering the
|
||||||
|
advancement trigger
|
||||||
|
|
||||||
|
Fires the event when a Raider tries to pick up a raid banner
|
||||||
|
to become raid leader.
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||||
|
@@ -0,0 +0,0 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void pickUpItem(ItemEntity item) {
|
||||||
|
- this.onItemPickup(item);
|
||||||
|
+ // this.onItemPickup(item); // Paper - call in PiglinAi#pickUpItem after EntityPickupItemEvent is fired
|
||||||
|
PiglinAi.pickUpItem(this, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java
|
||||||
|
@@ -0,0 +0,0 @@ public class PiglinAi {
|
||||||
|
ItemStack itemstack;
|
||||||
|
|
||||||
|
// CraftBukkit start
|
||||||
|
- if (drop.getItem().is(Items.GOLD_NUGGET) && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(piglin, drop, 0, false).isCancelled()) {
|
||||||
|
+ // Paper start - fix event firing twice
|
||||||
|
+ if (drop.getItem().is(Items.GOLD_NUGGET) /* && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(piglin, drop, 0, false).isCancelled() */) {
|
||||||
|
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(piglin, drop, 0, false).isCancelled()) return;
|
||||||
|
+ // Paper end
|
||||||
|
piglin.take(drop, drop.getItem().getCount());
|
||||||
|
itemstack = drop.getItem();
|
||||||
|
drop.discard();
|
||||||
|
@@ -0,0 +0,0 @@ public class PiglinAi {
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
+ piglin.onItemPickup(drop); // Paper - moved from Piglin#pickUpItem
|
||||||
|
// CraftBukkit end
|
||||||
|
|
||||||
|
if (PiglinAi.isLovedItem(itemstack, piglin)) { // CraftBukkit - Changes to allow for custom payment in bartering
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/entity/raid/Raider.java b/src/main/java/net/minecraft/world/entity/raid/Raider.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/entity/raid/Raider.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/entity/raid/Raider.java
|
||||||
|
@@ -0,0 +0,0 @@ public abstract class Raider extends PatrollingMonster {
|
||||||
|
boolean flag = this.hasActiveRaid() && this.getCurrentRaid().getLeader(this.getWave()) != null;
|
||||||
|
|
||||||
|
if (this.hasActiveRaid() && !flag && ItemStack.matches(itemstack, Raid.getLeaderBannerInstance())) {
|
||||||
|
+ // Paper start
|
||||||
|
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(this, item, 0, false).isCancelled()) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
EquipmentSlot enumitemslot = EquipmentSlot.HEAD;
|
||||||
|
ItemStack itemstack1 = this.getItemBySlot(enumitemslot);
|
||||||
|
double d0 = (double) this.getEquipmentDropChance(enumitemslot);
|
Loading…
Reference in a new issue