package net.glowstone.entity.ai;
import net.glowstone.entity.GlowLivingEntity;
import java.util.ArrayList;
import java.util.Objects;
public class TaskManager {
private final GlowLivingEntity entity;
private final ArrayList<EntityTask> tasks;
public TaskManager(GlowLivingEntity entity) {
this.entity = entity;
this.tasks = new ArrayList<>();
}
public EntityTask getTask(String name) {
for (EntityTask task : tasks) {
if (task != null && Objects.equals(task.getName(), name)) {
return task;
}
}
return null;
}
public EntityTask getTask(Class<? extends EntityTask> clazz) {
for (EntityTask task : tasks) {
if (Objects.equals(task.getClass(), clazz)) {
return task;
}
}
return null;
}
public EntityTask getNewTask(String name) {
Class<? extends EntityTask> clazz = EntityDirector.getEntityTask(name);
try {
if (clazz != null) {
return clazz.newInstance();
}
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
public void updateState() {
cancelTasks();
for (String task : EntityDirector.getEntityMobStateTask(entity.getType(), entity.getState())) {
addTask(task);
}
}
public void cancel(EntityTask task) {
task.reset(entity);
tasks.remove(task);
}
public void cancelTasks() {
tasks.forEach(task -> task.reset(entity));
tasks.clear();
}
public void pulse() {
tasks.forEach(task -> task.pulse(entity));
}
public void addTask(EntityTask task) {
if (task != null) {
if (getTask(task.getName()) != null) {
cancel(getTask(task.getName()));
}
tasks.add(task);
}
}
public void addTask(String task) {
if (getTask(task) != null) {
cancel(getTask(task));
}
tasks.add(getNewTask(task));
}
}