From e714262016134da88f5a684759e1810de02fbcd0 Mon Sep 17 00:00:00 2001 From: Doc Date: Tue, 16 Aug 2022 19:53:20 +1000 Subject: [PATCH] SPIGOT-7079: Allays don't call EntityTargetEvent on ground items --- .../behavior/BehaviorFindAdmirableItem.patch | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 nms-patches/net/minecraft/world/entity/ai/behavior/BehaviorFindAdmirableItem.patch diff --git a/nms-patches/net/minecraft/world/entity/ai/behavior/BehaviorFindAdmirableItem.patch b/nms-patches/net/minecraft/world/entity/ai/behavior/BehaviorFindAdmirableItem.patch new file mode 100644 index 000000000..11c605563 --- /dev/null +++ b/nms-patches/net/minecraft/world/entity/ai/behavior/BehaviorFindAdmirableItem.patch @@ -0,0 +1,28 @@ +--- a/net/minecraft/world/entity/ai/behavior/BehaviorFindAdmirableItem.java ++++ b/net/minecraft/world/entity/ai/behavior/BehaviorFindAdmirableItem.java +@@ -35,6 +35,25 @@ + + @Override + protected void start(WorldServer worldserver, E e0, long i) { ++ // CraftBukkit start ++ if (e0 instanceof net.minecraft.world.entity.animal.allay.Allay) { ++ Entity target = this.getClosestLovedItem(e0); ++ org.bukkit.event.entity.EntityTargetEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTargetEvent(e0, target, org.bukkit.event.entity.EntityTargetEvent.TargetReason.CLOSEST_ENTITY); ++ ++ if (event.isCancelled()) { ++ return; ++ } ++ ++ target = (event.getTarget() == null) ? null : ((org.bukkit.craftbukkit.entity.CraftEntity) event.getTarget()).getHandle(); ++ if (target instanceof EntityItem item) { ++ e0.getBrain().setMemory(MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM, java.util.Optional.of(item)); ++ BehaviorUtil.setWalkAndLookTargetMemories(e0, target, this.speedModifier, 0); ++ } else { ++ e0.getBrain().eraseMemory(MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM); ++ } ++ return; ++ } ++ // CraftBukkit end + BehaviorUtil.setWalkAndLookTargetMemories(e0, (Entity) this.getClosestLovedItem(e0), this.speedModifier, 0); + } +