mirror of
https://github.com/Minestom/Minestom.git
synced 2025-01-07 08:58:20 +01:00
Caching entity target found by goal selectors
This commit is contained in:
parent
85a8396c9d
commit
54da48fd3e
@ -60,6 +60,23 @@ public abstract class GoalSelector {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds a target for an entity.
|
||||
* If the current one is not present, falls back to {@link GoalSelector#findTarget()}
|
||||
* and updates the target inside the entity.
|
||||
*
|
||||
* @return the target entity, null if not found
|
||||
*/
|
||||
@Nullable
|
||||
public Entity findAndUpdateTarget() {
|
||||
Entity target = entityCreature.getTarget();
|
||||
if (target == null) {
|
||||
target = findTarget();
|
||||
entityCreature.setTarget(target);
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the entity behind the goal selector.
|
||||
*
|
||||
|
@ -40,12 +40,12 @@ public class MeleeAttackGoal extends GoalSelector {
|
||||
|
||||
@Override
|
||||
public boolean shouldStart() {
|
||||
return getTarget() != null;
|
||||
return findAndUpdateTarget() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
final Entity target = getTarget();
|
||||
final Entity target = findAndUpdateTarget();
|
||||
Check.notNull(target, "The target is not expected to be null!");
|
||||
final Position targetPosition = target.getPosition();
|
||||
entityCreature.getNavigator().setPathTo(targetPosition);
|
||||
@ -53,7 +53,7 @@ public class MeleeAttackGoal extends GoalSelector {
|
||||
|
||||
@Override
|
||||
public void tick(long time) {
|
||||
final Entity target = getTarget();
|
||||
final Entity target = findAndUpdateTarget();
|
||||
|
||||
this.stop = target == null;
|
||||
|
||||
@ -88,16 +88,4 @@ public class MeleeAttackGoal extends GoalSelector {
|
||||
// Stop following the target
|
||||
entityCreature.getNavigator().setPathTo(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Use {@link EntityCreature#getTarget()} or
|
||||
* the entity target selectors to get the correct target
|
||||
*
|
||||
* @return the target of the entity
|
||||
*/
|
||||
@Nullable
|
||||
private Entity getTarget() {
|
||||
final Entity target = entityCreature.getTarget();
|
||||
return target == null ? findTarget() : target;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user