2021-07-12 18:20:17 -05:00
|
|
|
package net.nuggetmc.ai.bot.agent;
|
|
|
|
|
|
2021-07-21 13:52:21 -05:00
|
|
|
import net.nuggetmc.ai.TerminatorPlus;
|
2021-07-24 23:34:07 -05:00
|
|
|
import net.nuggetmc.ai.bot.Bot;
|
2021-07-12 18:20:17 -05:00
|
|
|
import net.nuggetmc.ai.bot.BotManager;
|
2021-07-23 17:25:10 -05:00
|
|
|
import net.nuggetmc.ai.bot.event.BotDamageByPlayerEvent;
|
2021-07-24 23:34:07 -05:00
|
|
|
import net.nuggetmc.ai.bot.event.BotDeathEvent;
|
2021-07-19 17:35:28 -05:00
|
|
|
import net.nuggetmc.ai.bot.event.BotFallDamageEvent;
|
2021-07-24 23:34:07 -05:00
|
|
|
import net.nuggetmc.ai.bot.event.BotKilledByPlayerEvent;
|
2021-07-12 18:20:17 -05:00
|
|
|
import org.bukkit.Bukkit;
|
2021-07-24 23:34:07 -05:00
|
|
|
import org.bukkit.entity.Player;
|
2021-07-12 18:20:17 -05:00
|
|
|
import org.bukkit.scheduler.BukkitRunnable;
|
|
|
|
|
import org.bukkit.scheduler.BukkitScheduler;
|
|
|
|
|
|
|
|
|
|
import java.util.HashSet;
|
|
|
|
|
import java.util.Random;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
|
|
public abstract class Agent {
|
|
|
|
|
|
2021-07-21 13:52:21 -05:00
|
|
|
protected final TerminatorPlus plugin;
|
2021-07-12 18:20:17 -05:00
|
|
|
protected final BotManager manager;
|
|
|
|
|
protected final BukkitScheduler scheduler;
|
|
|
|
|
protected final Set<BukkitRunnable> taskList;
|
|
|
|
|
protected final Random random;
|
|
|
|
|
|
|
|
|
|
protected boolean enabled;
|
|
|
|
|
protected int taskID;
|
|
|
|
|
|
2021-07-24 23:34:07 -05:00
|
|
|
protected boolean drops;
|
|
|
|
|
|
2021-07-12 18:20:17 -05:00
|
|
|
public Agent(BotManager manager) {
|
2021-07-21 13:52:21 -05:00
|
|
|
this.plugin = TerminatorPlus.getInstance();
|
2021-07-12 18:20:17 -05:00
|
|
|
this.manager = manager;
|
|
|
|
|
this.scheduler = Bukkit.getScheduler();
|
|
|
|
|
this.taskList = new HashSet<>();
|
|
|
|
|
this.random = new Random();
|
|
|
|
|
|
|
|
|
|
setEnabled(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean isEnabled() {
|
|
|
|
|
return enabled;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void setEnabled(boolean b) {
|
|
|
|
|
enabled = b;
|
|
|
|
|
|
|
|
|
|
if (b) {
|
|
|
|
|
taskID = scheduler.scheduleSyncRepeatingTask(plugin, this::tick, 0, 1);
|
|
|
|
|
} else {
|
|
|
|
|
scheduler.cancelTask(taskID);
|
2021-07-19 17:35:28 -05:00
|
|
|
stopAllTasks();
|
2021-07-12 18:20:17 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-19 17:35:28 -05:00
|
|
|
public void stopAllTasks() {
|
2021-07-23 03:47:11 -05:00
|
|
|
taskList.stream().filter(t -> !t.isCancelled()).forEach(BukkitRunnable::cancel);
|
2021-07-19 17:35:28 -05:00
|
|
|
taskList.clear();
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-24 23:34:07 -05:00
|
|
|
public void setDrops(boolean enabled) {
|
|
|
|
|
this.drops = enabled;
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-12 18:20:17 -05:00
|
|
|
protected abstract void tick();
|
2021-07-19 17:35:28 -05:00
|
|
|
|
2021-07-23 03:47:11 -05:00
|
|
|
public void onFallDamage(BotFallDamageEvent event) { }
|
2021-07-23 17:25:10 -05:00
|
|
|
|
|
|
|
|
public void onPlayerDamage(BotDamageByPlayerEvent event) { }
|
2021-07-24 23:34:07 -05:00
|
|
|
|
|
|
|
|
public void onBotDeath(BotDeathEvent event) { }
|
|
|
|
|
|
|
|
|
|
public void onBotKilledByPlayer(BotKilledByPlayerEvent event) {
|
|
|
|
|
Player player = event.getPlayer();
|
|
|
|
|
|
|
|
|
|
scheduler.runTaskAsynchronously(plugin, () -> {
|
|
|
|
|
Bot bot = manager.getBot(player);
|
|
|
|
|
|
|
|
|
|
if (bot != null) {
|
|
|
|
|
bot.incrementKills();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2021-07-12 18:20:17 -05:00
|
|
|
}
|