aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0979-Only-erase-allay-memory-on-non-item-targets.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0979-Only-erase-allay-memory-on-non-item-targets.patch')
-rw-r--r--patches/server/0979-Only-erase-allay-memory-on-non-item-targets.patch29
1 files changed, 29 insertions, 0 deletions
diff --git a/patches/server/0979-Only-erase-allay-memory-on-non-item-targets.patch b/patches/server/0979-Only-erase-allay-memory-on-non-item-targets.patch
new file mode 100644
index 0000000000..4afac36fc3
--- /dev/null
+++ b/patches/server/0979-Only-erase-allay-memory-on-non-item-targets.patch
@@ -0,0 +1,29 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Bjarne Koll <[email protected]>
+Date: Fri, 4 Aug 2023 15:53:36 +0200
+Subject: [PATCH] Only erase allay memory on non-item targets
+
+Spigot incorrectly instanceOf checks the EntityTargetEvent#getTarget
+against the internal ItemEntity type and removes the nearest wanted item
+memory if said instanceOf check fails, (which is always the case)
+causing allays to behave differently as they constantly loose their
+target item.
+
+This commit fixes the faulty behaviour by instance performing a check
+against the CraftItem type.
+
+diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/GoToWantedItem.java b/src/main/java/net/minecraft/world/entity/ai/behavior/GoToWantedItem.java
+index bd9aa4a5443da862be3403c1941113373741a87c..2f92eb39cde7b30a894db347ca85a506d880411e 100644
+--- a/src/main/java/net/minecraft/world/entity/ai/behavior/GoToWantedItem.java
++++ b/src/main/java/net/minecraft/world/entity/ai/behavior/GoToWantedItem.java
+@@ -35,8 +35,9 @@ public class GoToWantedItem {
+ if (event.isCancelled()) {
+ return false;
+ }
+- if (!(event.getTarget() instanceof ItemEntity)) {
++ if (!(event.getTarget() instanceof org.bukkit.craftbukkit.entity.CraftItem)) { // Paper - only erase allay memory on non-item targets
+ memoryaccessor2.erase();
++ return false; // Paper - only erase allay memory on non-item targets
+ }
+
+ entityitem = (ItemEntity) ((org.bukkit.craftbukkit.entity.CraftEntity) event.getTarget()).getHandle();