mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 15:49:00 +01:00
Only erase allay memory on non-item targets (#9570)
* 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. * Reduce diff * fix typo --------- Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
This commit is contained in:
parent
732f98a4bf
commit
f9c9ac2e65
2 changed files with 30 additions and 1 deletions
|
@ -0,0 +1,29 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Bjarne Koll <git@lynxplay.dev>
|
||||||
|
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 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
|
||||||
|
@@ -0,0 +0,0 @@ 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();
|
|
@ -120,7 +120,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
Brain<?> brain = entity.getBrain();
|
Brain<?> brain = entity.getBrain();
|
||||||
List<ItemEntity> list = world.getEntitiesOfClass(ItemEntity.class, entity.getBoundingBox().inflate(32.0D, 16.0D, 32.0D), (itemEntity) -> {
|
List<ItemEntity> list = world.getEntitiesOfClass(ItemEntity.class, entity.getBoundingBox().inflate(32.0D, 16.0D, 32.0D), (itemEntity) -> {
|
||||||
- return true;
|
- return true;
|
||||||
+ return itemEntity.closerThan(entity, 9.0D) && entity.wantsToPickUp(itemEntity.getItem()); // Paper - move predicate into getEntities
|
+ return itemEntity.closerThan(entity, MAX_DISTANCE_TO_WANTED_ITEM) && entity.wantsToPickUp(itemEntity.getItem()); // Paper - move predicate into getEntities
|
||||||
});
|
});
|
||||||
- list.sort(Comparator.comparingDouble(entity::distanceToSqr));
|
- list.sort(Comparator.comparingDouble(entity::distanceToSqr));
|
||||||
+ list.sort((e1, e2) -> Double.compare(entity.distanceToSqr(e1), entity.distanceToSqr(e2))); // better to take the sort perf hit than using line of sight more than we need to.
|
+ list.sort((e1, e2) -> Double.compare(entity.distanceToSqr(e1), entity.distanceToSqr(e2))); // better to take the sort perf hit than using line of sight more than we need to.
|
||||||
|
|
Loading…
Reference in a new issue