From e9aa334aee79caeed9145d0ad65349f6d871cf9e Mon Sep 17 00:00:00 2001 From: batchprogrammer314 Date: Thu, 1 Jul 2021 01:12:18 -0500 Subject: [PATCH] optimizations --- pom.xml | 2 +- src/main/java/net/nuggetmc/ai/PlayerAI.java | 4 +- src/main/java/net/nuggetmc/ai/bot/Bot.java | 4 ++ .../net/nuggetmc/ai/bot/agent/BotAgent.java | 16 ++++-- .../{commands => command}/CommandHandler.java | 37 ++++++------- .../CommandInstance.java | 2 +- .../commands/PlayerAICommand.java | 24 +++------ .../java/net/nuggetmc/ai/utils/ChatUtils.java | 7 --- .../java/net/nuggetmc/ai/utils/Debugger.java | 53 +++++++++++++++---- 9 files changed, 88 insertions(+), 61 deletions(-) rename src/main/java/net/nuggetmc/ai/{commands => command}/CommandHandler.java (58%) rename src/main/java/net/nuggetmc/ai/{commands => command}/CommandInstance.java (89%) rename src/main/java/net/nuggetmc/ai/{commands => command}/commands/PlayerAICommand.java (78%) delete mode 100644 src/main/java/net/nuggetmc/ai/utils/ChatUtils.java diff --git a/pom.xml b/pom.xml index 57a7775..1458da8 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - me.horsenuggets + net.nuggetmc PlayerAI 1.0-SNAPSHOT PlayerAI diff --git a/src/main/java/net/nuggetmc/ai/PlayerAI.java b/src/main/java/net/nuggetmc/ai/PlayerAI.java index 6331f4d..7a70a9e 100644 --- a/src/main/java/net/nuggetmc/ai/PlayerAI.java +++ b/src/main/java/net/nuggetmc/ai/PlayerAI.java @@ -1,12 +1,12 @@ package net.nuggetmc.ai; import net.nuggetmc.ai.bot.BotManager; -import net.nuggetmc.ai.commands.CommandHandler; +import net.nuggetmc.ai.command.CommandHandler; import org.bukkit.plugin.java.JavaPlugin; public class PlayerAI extends JavaPlugin { - public static final double VERSION = 1.0; + public static final double VERSION = 3.0; private static PlayerAI instance; diff --git a/src/main/java/net/nuggetmc/ai/bot/Bot.java b/src/main/java/net/nuggetmc/ai/bot/Bot.java index 8195a5b..560d10f 100644 --- a/src/main/java/net/nuggetmc/ai/bot/Bot.java +++ b/src/main/java/net/nuggetmc/ai/bot/Bot.java @@ -171,6 +171,10 @@ public class Bot extends EntityPlayer { } } + public void jump() { + jump(new Vector(0, 0.5, 0)); + } + public void attack(org.bukkit.entity.Entity entity) { faceLocation(entity.getLocation()); punch(); diff --git a/src/main/java/net/nuggetmc/ai/bot/agent/BotAgent.java b/src/main/java/net/nuggetmc/ai/bot/agent/BotAgent.java index cf2a837..6351de8 100644 --- a/src/main/java/net/nuggetmc/ai/bot/agent/BotAgent.java +++ b/src/main/java/net/nuggetmc/ai/bot/agent/BotAgent.java @@ -10,6 +10,8 @@ import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.util.Vector; +import java.util.Set; + public class BotAgent { private PlayerAI plugin; @@ -21,6 +23,8 @@ public class BotAgent { private int taskID; + private int count; + public BotAgent(BotManager manager) { this.plugin = PlayerAI.getInstance(); this.manager = manager; @@ -44,24 +48,28 @@ public class BotAgent { } private void tick() { - manager.fetch().forEach(this::tickBot); + Set bots = manager.fetch(); + count = bots.size(); + bots.forEach(this::tickBot); } private void tickBot(Bot bot) { Location loc = bot.getLocation(); + // if bot.hasHoldState() return; << This will be to check if a bot is mining or something similar where it can't move + Player player = nearestPlayer(loc); if (player == null) return; Location target = player.getLocation(); - if (manager.fetch().size() > 1) { - target.add(bot.getOffset()); - } + if (count > 1) target.add(bot.getOffset()); // Make the XZ offsets stored in the bot object (so they don't form a straight line), // and make it so when mining and stuff, the offset is not taken into account + // if checkVertical(bot) { break block action add; return; } + if (bot.tickDelay(3)) attack(bot, player, loc); move(bot, player, loc, target); } diff --git a/src/main/java/net/nuggetmc/ai/commands/CommandHandler.java b/src/main/java/net/nuggetmc/ai/command/CommandHandler.java similarity index 58% rename from src/main/java/net/nuggetmc/ai/commands/CommandHandler.java rename to src/main/java/net/nuggetmc/ai/command/CommandHandler.java index fef8f25..0b2fca3 100644 --- a/src/main/java/net/nuggetmc/ai/commands/CommandHandler.java +++ b/src/main/java/net/nuggetmc/ai/command/CommandHandler.java @@ -1,10 +1,11 @@ -package net.nuggetmc.ai.commands; +package net.nuggetmc.ai.command; import com.jonahseguin.drink.Drink; import com.jonahseguin.drink.annotation.Command; import com.jonahseguin.drink.command.DrinkCommandService; +import com.jonahseguin.drink.utils.ChatUtils; import net.nuggetmc.ai.PlayerAI; -import net.nuggetmc.ai.commands.commands.PlayerAICommand; +import net.nuggetmc.ai.command.commands.PlayerAICommand; import org.bukkit.ChatColor; import java.lang.reflect.Method; @@ -22,38 +23,34 @@ public class CommandHandler { drink.registerCommands(); help = new HashMap<>(); - - setHelps(new Class[] { - PlayerAICommand.class - }); + setHelps(PlayerAICommand.class); } - private void setHelps(Class[] cls) { - for (Class clazz : cls) { - help.put(clazz, getUsage(clazz)); - } + @SafeVarargs + private final void setHelps(Class... cls) { + Arrays.stream(cls).forEach(c -> help.put(c, getUsage(c))); } - public List getHelp(Class clazz) { - return help.get(clazz); + public List getHelp(Class cls) { + return help.get(cls); } - private List getUsage(Class clazz) { - String rootName = getRootName(clazz); + private List getUsage(Class cls) { + String rootName = getRootName(cls); - return getSubCommands(clazz).stream().map(c -> { + return getSubCommands(cls).stream().map(c -> { Command command = c.getAnnotation(Command.class); - return ChatColor.GRAY + " ▪ " + ChatColor.YELLOW + "/" + rootName + " " + command.name() + ChatColor.GRAY + " ▪ " + return ChatUtils.BULLET_FORMATTED + ChatColor.YELLOW + "/" + rootName + " " + command.name() + ChatUtils.BULLET_FORMATTED + ChatColor.RESET + command.desc(); }).sorted().collect(Collectors.toList()); } - private String getRootName(Class clazz) { + private String getRootName(Class cls) { return drink.getCommands().entrySet().stream() - .filter(c -> c.getValue().getObject().getClass().isAssignableFrom(clazz)).map(Map.Entry::getKey).findFirst().orElse(null); + .filter(c -> c.getValue().getObject().getClass().isAssignableFrom(cls)).map(Map.Entry::getKey).findFirst().orElse(null); } - private List getSubCommands(Class clazz) { - return Arrays.stream(clazz.getDeclaredMethods()).filter(m -> m.isAnnotationPresent(Command.class) && !m.getAnnotation(Command.class).name().isEmpty()).collect(Collectors.toList()); + private List getSubCommands(Class cls) { + return Arrays.stream(cls.getDeclaredMethods()).filter(m -> m.isAnnotationPresent(Command.class) && !m.getAnnotation(Command.class).name().isEmpty()).collect(Collectors.toList()); } } diff --git a/src/main/java/net/nuggetmc/ai/commands/CommandInstance.java b/src/main/java/net/nuggetmc/ai/command/CommandInstance.java similarity index 89% rename from src/main/java/net/nuggetmc/ai/commands/CommandInstance.java rename to src/main/java/net/nuggetmc/ai/command/CommandInstance.java index 8533820..86d818a 100644 --- a/src/main/java/net/nuggetmc/ai/commands/CommandInstance.java +++ b/src/main/java/net/nuggetmc/ai/command/CommandInstance.java @@ -1,4 +1,4 @@ -package net.nuggetmc.ai.commands; +package net.nuggetmc.ai.command; public abstract class CommandInstance { diff --git a/src/main/java/net/nuggetmc/ai/commands/commands/PlayerAICommand.java b/src/main/java/net/nuggetmc/ai/command/commands/PlayerAICommand.java similarity index 78% rename from src/main/java/net/nuggetmc/ai/commands/commands/PlayerAICommand.java rename to src/main/java/net/nuggetmc/ai/command/commands/PlayerAICommand.java index 01830e1..1adb6ab 100644 --- a/src/main/java/net/nuggetmc/ai/commands/commands/PlayerAICommand.java +++ b/src/main/java/net/nuggetmc/ai/command/commands/PlayerAICommand.java @@ -1,15 +1,11 @@ -package net.nuggetmc.ai.commands.commands; +package net.nuggetmc.ai.command.commands; -import com.jonahseguin.drink.annotation.Command; -import com.jonahseguin.drink.annotation.OptArg; -import com.jonahseguin.drink.annotation.Require; -import com.jonahseguin.drink.annotation.Sender; +import com.jonahseguin.drink.annotation.*; +import com.jonahseguin.drink.utils.ChatUtils; import net.nuggetmc.ai.PlayerAI; import net.nuggetmc.ai.bot.BotManager; -import net.nuggetmc.ai.bot.agent.BotAgent; -import net.nuggetmc.ai.commands.CommandHandler; -import net.nuggetmc.ai.commands.CommandInstance; -import net.nuggetmc.ai.utils.ChatUtils; +import net.nuggetmc.ai.command.CommandHandler; +import net.nuggetmc.ai.command.CommandInstance; import net.nuggetmc.ai.utils.Debugger; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -35,11 +31,7 @@ public class PlayerAICommand extends CommandInstance { public void rootCommand(@Sender Player sender) { sender.sendMessage(ChatUtils.LINE); sender.sendMessage(ChatColor.GOLD + "PlayerAI" + ChatColor.GRAY + " [" + ChatColor.RED + "v" + PlayerAI.VERSION + ChatColor.GRAY + "]"); - - for (String line : commandHandler.getHelp(getClass())) { - sender.sendMessage(line); - } - + commandHandler.getHelp(getClass()).forEach(sender::sendMessage); sender.sendMessage(ChatUtils.LINE); } @@ -57,8 +49,8 @@ public class PlayerAICommand extends CommandInstance { @Command(name = "debug", desc = "Debug plugin code.", usage = "") @Require("playerai.manage") - public void debugCommand(@Sender CommandSender sender, String cmd) { - (new Debugger(sender)).execute(cmd); + public void debugCommand(@Sender CommandSender sender, @Text String cmd) { + new Debugger(sender).execute(cmd); } @Command(name = "info", desc = "Information about loaded bots.") diff --git a/src/main/java/net/nuggetmc/ai/utils/ChatUtils.java b/src/main/java/net/nuggetmc/ai/utils/ChatUtils.java deleted file mode 100644 index 2a6f3cd..0000000 --- a/src/main/java/net/nuggetmc/ai/utils/ChatUtils.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.nuggetmc.ai.utils; - -import net.md_5.bungee.api.ChatColor; - -public class ChatUtils { - public static String LINE = ChatColor.GRAY + "------------------------------------------------"; -} diff --git a/src/main/java/net/nuggetmc/ai/utils/Debugger.java b/src/main/java/net/nuggetmc/ai/utils/Debugger.java index b097428..601ad56 100644 --- a/src/main/java/net/nuggetmc/ai/utils/Debugger.java +++ b/src/main/java/net/nuggetmc/ai/utils/Debugger.java @@ -6,41 +6,74 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import java.beans.Statement; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; public class Debugger { + private static final String PREFIX = ChatColor.YELLOW + "[DEBUG] " + ChatColor.RESET; + private CommandSender sender; - private String prefix; public Debugger(CommandSender sender) { this.sender = sender; - this.prefix = ChatColor.YELLOW + "[DEBUG] " + ChatColor.RESET; } - private void print(String msg) { - sender.sendMessage(msg); + private void print(Object... objects) { + String[] values = Arrays.stream(objects).map(Object::toString).toArray(String[]::new); + sender.sendMessage(PREFIX + String.join(" ", values)); } public void execute(String cmd) { try { - Statement statement = new Statement(this, cmd.replace("()", ""), new Object[]{}); - print(prefix + "Running the expression \"" + ChatColor.AQUA + cmd + ChatColor.RESET + "\"..."); + int[] pts = {cmd.indexOf('('), cmd.indexOf(')')}; + if (pts[0] == -1 || pts[1] == -1) throw new IllegalArgumentException(); + + String name = cmd.substring(0, pts[0]); + String content = cmd.substring(pts[0] + 1, pts[1]); + + Statement statement = new Statement(this, name, new Object[]{content}); + print("Running the expression \"" + ChatColor.AQUA + cmd + ChatColor.RESET + "\"..."); statement.execute(); } catch (Exception e) { - print(prefix + "Error: the expression \"" + ChatColor.AQUA + cmd + ChatColor.RESET + "\" failed to execute."); - print(prefix + e.toString()); + print("Error: the expression \"" + ChatColor.AQUA + cmd + ChatColor.RESET + "\" failed to execute."); + print(e.toString()); } } - public void toggleAgent() { + public Object[] buildObjects(String content) { + List list = new ArrayList<>(); + + if (!content.isEmpty()) { + String[] values = content.split(","); + + for (String str : values) { + list.add(str.startsWith(" ") ? str.substring(1) : str); + } + } + + return list.toArray(); + } + + public void printObj(String content) { + if (content.isEmpty()) { + print("null"); + return; + } + + Arrays.stream(buildObjects(content)).forEach(this::print); + } + + public void toggleAgent(String content) { BotAgent agent = PlayerAI.getInstance().getManager().getAgent(); boolean b = agent.isEnabled(); agent.setEnabled(!b); - print(prefix + "The Bot Agent is now " + print("The Bot Agent is now " + (b ? ChatColor.RED + "DISABLED" : ChatColor.GREEN + "ENABLED") + ChatColor.RESET + "."); }