From 14f245ae57a8b8bd05c680966505c7d82dd9fc57 Mon Sep 17 00:00:00 2001 From: Badbird-5907 <50347938+Badbird-5907@users.noreply.github.com> Date: Thu, 11 Aug 2022 19:25:25 -0400 Subject: [PATCH 1/8] added single player target --- .../java/net/nuggetmc/tplus/api/Terminator.java | 6 ++++++ .../api/agent/legacyagent/EnumTargetGoal.java | 3 ++- .../tplus/api/agent/legacyagent/LegacyAgent.java | 15 +++++++++++++-- .../src/main/java/net/nuggetmc/tplus/bot/Bot.java | 12 +++++++++++- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/Terminator.java b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/Terminator.java index 615b948..9d368d2 100644 --- a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/Terminator.java +++ b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/Terminator.java @@ -11,6 +11,8 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; +import java.util.UUID; + public interface Terminator { String getBotName(); @@ -110,4 +112,8 @@ public interface Terminator { void renderBot(Object packetListener, boolean login); void setOnFirePackets(boolean onFire); + + UUID getTargetPlayer(); + + void setTargetPlayer(UUID target); } diff --git a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/EnumTargetGoal.java b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/EnumTargetGoal.java index 1f9c71e..c2e8a1c 100644 --- a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/EnumTargetGoal.java +++ b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/EnumTargetGoal.java @@ -11,9 +11,10 @@ public enum EnumTargetGoal { NEAREST_BOT("Locate the nearest bot."), NEAREST_BOT_DIFFER("Locate the nearest bot with a different username."), NEAREST_BOT_DIFFER_ALPHA("Locate the nearest bot with a different username after filtering out non-alpha characters."), + PLAYER("Target a single player. Defaults to NEAREST_VULNERABLE_PLAYER if no player found."), NONE("No target goal."); - private static final Map VALUES = new HashMap() { + private static final Map VALUES = new HashMap<>() { { this.put("none", NONE); this.put("nearestvulnerableplayer", NEAREST_VULNERABLE_PLAYER); diff --git a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyAgent.java b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyAgent.java index bbc8213..fe558d3 100644 --- a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyAgent.java +++ b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyAgent.java @@ -1115,10 +1115,12 @@ public class LegacyAgent extends Agent { this.goal = goal; } - public LivingEntity locateTarget(Terminator bot, Location loc) { + public LivingEntity locateTarget(Terminator bot, Location loc, EnumTargetGoal... targetGoal) { LivingEntity result = null; - switch (goal) { + EnumTargetGoal g = goal; + if (targetGoal.length > 0) g = targetGoal[0]; + switch (g) { default: return null; @@ -1205,6 +1207,15 @@ public class LegacyAgent extends Agent { } } } + case PLAYER: { //Target a single player. Defaults to NEAREST_VULNERABLE_PLAYER if no player found. + if (bot.getTargetPlayer() != null) { + Player player = Bukkit.getPlayer(bot.getTargetPlayer()); + if (player != null) { + return player; + } + } + return locateTarget(bot, loc, EnumTargetGoal.NEAREST_VULNERABLE_PLAYER); + } } return result; diff --git a/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/bot/Bot.java b/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/bot/Bot.java index a15c04e..017176f 100644 --- a/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/bot/Bot.java +++ b/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/bot/Bot.java @@ -73,7 +73,7 @@ public class Bot extends ServerPlayer implements Terminator { private byte jumpTicks; private byte noFallTicks; private boolean ignoredByMobs = true; - + private UUID targetPlayer = null; private Bot(MinecraftServer minecraftServer, ServerLevel worldServer, GameProfile profile) { super(minecraftServer, worldServer, profile, null); @@ -373,6 +373,16 @@ public class Bot extends ServerPlayer implements Terminator { //sendPacket(new ClientboundSetEntityDataPacket(getId(), entityData, false)); } + @Override + public UUID getTargetPlayer() { + return targetPlayer; + } + + @Override + public void setTargetPlayer(UUID target) { + this.targetPlayer = target; + } + @Override public boolean isBotOnFire() { return fireTicks != 0; From 24f9790f5276f1401f24b423abbc94470db27b43 Mon Sep 17 00:00:00 2001 From: Badbird-5907 <50347938+Badbird-5907@users.noreply.github.com> Date: Thu, 11 Aug 2022 19:29:46 -0400 Subject: [PATCH 2/8] Added TerminatorLocateTargetEvent --- .../api/agent/legacyagent/LegacyAgent.java | 7 ++- .../event/TerminatorLocateTargetEvent.java | 52 +++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/event/TerminatorLocateTargetEvent.java diff --git a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyAgent.java b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyAgent.java index fe558d3..90874e9 100644 --- a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyAgent.java +++ b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyAgent.java @@ -10,6 +10,7 @@ import net.nuggetmc.tplus.api.agent.legacyagent.ai.NeuralNetwork; import net.nuggetmc.tplus.api.event.BotDamageByPlayerEvent; import net.nuggetmc.tplus.api.event.BotDeathEvent; import net.nuggetmc.tplus.api.event.BotFallDamageEvent; +import net.nuggetmc.tplus.api.event.TerminatorLocateTargetEvent; import net.nuggetmc.tplus.api.utils.MathUtils; import net.nuggetmc.tplus.api.utils.PlayerUtils; import org.bukkit.*; @@ -1217,8 +1218,10 @@ public class LegacyAgent extends Agent { return locateTarget(bot, loc, EnumTargetGoal.NEAREST_VULNERABLE_PLAYER); } } - - return result; + TerminatorLocateTargetEvent event = new TerminatorLocateTargetEvent(bot, result); + Bukkit.getPluginManager().callEvent(event); + if (event.isCancelled()) return null; + return event.getTarget(); } private boolean validateCloserEntity(LivingEntity entity, Location loc, LivingEntity result) { diff --git a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/event/TerminatorLocateTargetEvent.java b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/event/TerminatorLocateTargetEvent.java new file mode 100644 index 0000000..a24d129 --- /dev/null +++ b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/event/TerminatorLocateTargetEvent.java @@ -0,0 +1,52 @@ +package net.nuggetmc.tplus.api.event; + +import net.nuggetmc.tplus.api.Terminator; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class TerminatorLocateTargetEvent extends Event implements Cancellable { + + private static final HandlerList handlerList = new HandlerList(); + private Terminator terminator; + private LivingEntity target; + private boolean cancelled; + + public TerminatorLocateTargetEvent(Terminator terminator, LivingEntity target) { + this.terminator = terminator; + this.target = target; + } + + public static HandlerList getHandlerList() { + return handlerList; + } + + @Override + public HandlerList getHandlers() { + return handlerList; + } + + + public Terminator getTerminator() { + return terminator; + } + + public LivingEntity getTarget() { + return target; + } + + public void setTarget(LivingEntity target) { + this.target = target; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + cancelled = cancel; + } +} From 534258dd0a00050a6e100bc026da42c7c54c4fd4 Mon Sep 17 00:00:00 2001 From: Badbird-5907 <50347938+Badbird-5907@users.noreply.github.com> Date: Thu, 11 Aug 2022 19:42:14 -0400 Subject: [PATCH 3/8] added mob target command --- .../net/nuggetmc/tplus/api/BotManager.java | 3 ++ .../nuggetmc/tplus/bot/BotManagerImpl.java | 13 +++++++- .../tplus/command/commands/BotCommand.java | 30 +++++++++++-------- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/BotManager.java b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/BotManager.java index 71927c4..ad1eeb4 100644 --- a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/BotManager.java +++ b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/BotManager.java @@ -46,5 +46,8 @@ public interface BotManager { Terminator getBot(int entityId); + boolean isMobTarget(); + + void setMobTarget(boolean mobTarget); } diff --git a/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/bot/BotManagerImpl.java b/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/bot/BotManagerImpl.java index edaf7eb..51925f9 100644 --- a/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/bot/BotManagerImpl.java +++ b/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/bot/BotManagerImpl.java @@ -34,7 +34,7 @@ public class BotManagerImpl implements BotManager, Listener { private final NumberFormat numberFormat; public boolean joinMessages = false; - + private boolean mobTarget = false; public BotManagerImpl() { this.agent = new LegacyAgent(this, TerminatorPlus.getInstance()); this.bots = ConcurrentHashMap.newKeySet(); //should fix concurrentmodificationexception @@ -139,6 +139,7 @@ public class BotManagerImpl implements BotManager, Listener { } else if (i > 1) { bot.setVelocity(randomVelocity().multiply(f)); } + bot.setIgnoredByMobs(!mobTarget); bots.add(bot); i++; @@ -194,6 +195,16 @@ public class BotManagerImpl implements BotManager, Listener { return null; } + @Override + public boolean isMobTarget() { + return mobTarget; + } + + @Override + public void setMobTarget(boolean mobTarget) { + this.mobTarget = mobTarget; + } + @EventHandler public void onJoin(PlayerJoinEvent event) { ServerGamePacketListenerImpl connection = ((CraftPlayer) event.getPlayer()).getHandle().connection; diff --git a/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/command/commands/BotCommand.java b/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/command/commands/BotCommand.java index ccb6db1..5550c24 100644 --- a/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/command/commands/BotCommand.java +++ b/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/command/commands/BotCommand.java @@ -267,29 +267,33 @@ public class BotCommand extends CommandInstance { String extra = ChatColor.GRAY + " [" + ChatColor.YELLOW + "/bot settings" + ChatColor.GRAY + "]"; - if (arg1 == null || (!arg1.equals("setgoal"))) { + if (arg1 == null || ((!arg1.equals("setgoal")) && !arg1.equals("mobtarget"))) { sender.sendMessage(ChatUtils.LINE); sender.sendMessage(ChatColor.GOLD + "Bot Settings" + extra); sender.sendMessage(ChatUtils.BULLET_FORMATTED + ChatColor.YELLOW + "setgoal" + ChatUtils.BULLET_FORMATTED + "Set the global bot target selection method."); - sender.sendMessage(ChatUtils.BULLET_FORMATTED + ChatColor.YELLOW + "mobtarget" + ChatUtils.BULLET_FORMATTED + "Allow all future bots spawned to be targetted by hostile mobs."); + sender.sendMessage(ChatUtils.BULLET_FORMATTED + ChatColor.YELLOW + "mobtarget" + ChatUtils.BULLET_FORMATTED + "Allow all future bots spawned to be targeted by hostile mobs."); sender.sendMessage(ChatUtils.LINE); return; } - EnumTargetGoal goal = EnumTargetGoal.from(arg2 == null ? "" : arg2); + if (arg1.equalsIgnoreCase("setgoal")) { + EnumTargetGoal goal = EnumTargetGoal.from(arg2 == null ? "" : arg2); - if (goal == null) { - sender.sendMessage(ChatUtils.LINE); - sender.sendMessage(ChatColor.GOLD + "Goal Selection Types" + extra); - Arrays.stream(EnumTargetGoal.values()).forEach(g -> sender.sendMessage(ChatUtils.BULLET_FORMATTED + ChatColor.YELLOW + g.name().replace("_", "").toLowerCase() - + ChatUtils.BULLET_FORMATTED + g.description())); - sender.sendMessage(ChatUtils.LINE); - return; + if (goal == null) { + sender.sendMessage(ChatUtils.LINE); + sender.sendMessage(ChatColor.GOLD + "Goal Selection Types" + extra); + Arrays.stream(EnumTargetGoal.values()).forEach(g -> sender.sendMessage(ChatUtils.BULLET_FORMATTED + ChatColor.YELLOW + g.name().replace("_", "").toLowerCase() + + ChatUtils.BULLET_FORMATTED + g.description())); + sender.sendMessage(ChatUtils.LINE); + return; + } + agent.setTargetType(goal); + sender.sendMessage("The global bot goal has been set to " + ChatColor.BLUE + goal.name() + ChatColor.RESET + "."); + } else if (arg1.equalsIgnoreCase("mobtarget")) { + manager.setMobTarget(!manager.isMobTarget()); + sender.sendMessage("Mob targeting is now " + (manager.isMobTarget() ? ChatColor.GREEN + "enabled" : ChatColor.RED + "disabled") + ChatColor.RESET + ". (for all future bots)"); } - agent.setTargetType(goal); - - sender.sendMessage("The global bot goal has been set to " + ChatColor.BLUE + goal.name() + ChatColor.RESET + "."); } @Autofill From 1836eb1dd8dcf33b494093ba202ae532ef7bee86 Mon Sep 17 00:00:00 2001 From: Badbird-5907 <50347938+Badbird-5907@users.noreply.github.com> Date: Thu, 11 Aug 2022 21:21:16 -0400 Subject: [PATCH 4/8] [UNTESTED] added playertarget setting --- .../tplus/command/commands/BotCommand.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/command/commands/BotCommand.java b/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/command/commands/BotCommand.java index 5550c24..36b0157 100644 --- a/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/command/commands/BotCommand.java +++ b/TerminatorPlus-Plugin/src/main/java/net/nuggetmc/tplus/command/commands/BotCommand.java @@ -267,7 +267,7 @@ public class BotCommand extends CommandInstance { String extra = ChatColor.GRAY + " [" + ChatColor.YELLOW + "/bot settings" + ChatColor.GRAY + "]"; - if (arg1 == null || ((!arg1.equals("setgoal")) && !arg1.equals("mobtarget"))) { + if (arg1 == null || ((!arg1.equalsIgnoreCase("setgoal")) && !arg1.equalsIgnoreCase("mobtarget") && !arg1.equalsIgnoreCase("playertarget"))) { sender.sendMessage(ChatUtils.LINE); sender.sendMessage(ChatColor.GOLD + "Bot Settings" + extra); sender.sendMessage(ChatUtils.BULLET_FORMATTED + ChatColor.YELLOW + "setgoal" + ChatUtils.BULLET_FORMATTED + "Set the global bot target selection method."); @@ -292,8 +292,22 @@ public class BotCommand extends CommandInstance { } else if (arg1.equalsIgnoreCase("mobtarget")) { manager.setMobTarget(!manager.isMobTarget()); sender.sendMessage("Mob targeting is now " + (manager.isMobTarget() ? ChatColor.GREEN + "enabled" : ChatColor.RED + "disabled") + ChatColor.RESET + ". (for all future bots)"); + } else if (arg1.equalsIgnoreCase("playertarget")) { + if (args.size() < 2) { + sender.sendMessage(ChatColor.RED + "You must specify a player name!"); + return; + } + String playerName = args.get(1); + Player player = Bukkit.getPlayer(playerName); + if (player == null) { + sender.sendMessage(ChatColor.RED + "Could not find player " + ChatColor.YELLOW + playerName + ChatColor.RED + "!"); + return; + } + for (Terminator fetch : manager.fetch()) { + fetch.setTargetPlayer(player.getUniqueId()); + } + sender.sendMessage("All spawned bots are now set to target " + ChatColor.BLUE + player.getName() + ChatColor.RESET + ". They will target the closest player if they can't be found.\nYou may need to set the goal to PLAYER."); } - } @Autofill @@ -310,10 +324,15 @@ public class BotCommand extends CommandInstance { if (args.length == 2) { output.add("setgoal"); + output.add("mobtarget"); } else if (args.length == 3) { if (args[1].equalsIgnoreCase("setgoal")) { Arrays.stream(EnumTargetGoal.values()).forEach(goal -> output.add(goal.name().replace("_", "").toLowerCase())); } + if (args[1].equalsIgnoreCase("mobtarget")) { + output.add("true"); + output.add("false"); + } } return output; From 88a0033daa22805db7d26fdd404f72e208379229 Mon Sep 17 00:00:00 2001 From: Badbird-5907 <50347938+Badbird-5907@users.noreply.github.com> Date: Thu, 11 Aug 2022 21:22:32 -0400 Subject: [PATCH 5/8] make github actions work?? --- .github/workflows/dev-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev-analysis.yml b/.github/workflows/dev-analysis.yml index b718f63..ac98a8f 100644 --- a/.github/workflows/dev-analysis.yml +++ b/.github/workflows/dev-analysis.yml @@ -48,4 +48,4 @@ jobs: if: success() with: name: TerminatorPlus - path: target/ + path: build/libs/ From 90d94702a245e5c1e48220c40330a3c3168451c6 Mon Sep 17 00:00:00 2001 From: Badbird-5907 <50347938+Badbird-5907@users.noreply.github.com> Date: Thu, 11 Aug 2022 21:27:46 -0400 Subject: [PATCH 6/8] gradle build --- .github/workflows/dev-analysis.yml | 34 +++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/.github/workflows/dev-analysis.yml b/.github/workflows/dev-analysis.yml index ac98a8f..6fefbac 100644 --- a/.github/workflows/dev-analysis.yml +++ b/.github/workflows/dev-analysis.yml @@ -36,16 +36,30 @@ jobs: with: languages: ${{ matrix.language }} - - name: Autobuild - uses: github/codeql-action/autobuild@v1 - - - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 - - name: Upload a Build Artifact - uses: actions/upload-artifact@v2.2.4 - if: success() - with: - name: TerminatorPlus - path: build/libs/ + gradle: + strategy: + matrix: + os: [ ubuntu-latest, macos-latest, windows-latest ] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: 17 + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + + - name: Execute Gradle build + run: ./gradlew build + + - name: Upload a Build Artifact + uses: actions/upload-artifact@v2.2.4 + if: success() + with: + name: TerminatorPlus + path: build/libs/ From 5c7c08059ceb86609612aa332eb0b1cf80df43ea Mon Sep 17 00:00:00 2001 From: Badbird-5907 <50347938+Badbird-5907@users.noreply.github.com> Date: Thu, 11 Aug 2022 21:29:03 -0400 Subject: [PATCH 7/8] fix chmod --- .github/workflows/dev-analysis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/dev-analysis.yml b/.github/workflows/dev-analysis.yml index 6fefbac..97cfb1a 100644 --- a/.github/workflows/dev-analysis.yml +++ b/.github/workflows/dev-analysis.yml @@ -51,6 +51,9 @@ jobs: distribution: temurin java-version: 17 + - name: Make gradlew executable + run: chmod +x ./gradlew + - name: Setup Gradle uses: gradle/gradle-build-action@v2 From 0afe1dc2447c2669d01b7aead8432b1e92167506 Mon Sep 17 00:00:00 2001 From: Badbird-5907 <50347938+Badbird-5907@users.noreply.github.com> Date: Thu, 11 Aug 2022 21:30:21 -0400 Subject: [PATCH 8/8] only run on ubuntu --- .github/workflows/dev-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev-analysis.yml b/.github/workflows/dev-analysis.yml index 97cfb1a..8d11f31 100644 --- a/.github/workflows/dev-analysis.yml +++ b/.github/workflows/dev-analysis.yml @@ -42,7 +42,7 @@ jobs: gradle: strategy: matrix: - os: [ ubuntu-latest, macos-latest, windows-latest ] + os: [ ubuntu-latest ] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3