From a41d9245b2a3b69f0e7021e8d3f93c123abcbdab Mon Sep 17 00:00:00 2001 From: ThisTestUser Date: Sun, 11 Dec 2022 19:13:39 -0500 Subject: [PATCH] Fix bot stuck issues -Fix bot being sometimes clipped into the ground at checkup (5 tick delay -> 3) -Fix stuck on snow layer issue --- .../api/agent/legacyagent/LegacyAgent.java | 87 ++++++------------- .../agent/legacyagent/LegacyBlockCheck.java | 1 - .../api/agent/legacyagent/LegacyLevel.java | 72 ++++++++++----- .../tplus/command/commands/BotCommand.java | 2 +- 4 files changed, 78 insertions(+), 84 deletions(-) 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 57668f8..c675eaf 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 @@ -510,6 +510,24 @@ public class LegacyAgent extends Agent { Collections.sort(locStanding, (a, b) -> Double.compare(BotUtils.getHorizSqDist(a, player.getLocation()), BotUtils.getHorizSqDist(b, player.getLocation()))); + //Break snow in the way + for (Location loc : locStanding) { + if (loc.getBlock().getType() == Material.SNOW) { + get = loc.getBlock(); + npc.faceLocation(get.getLocation()); + level = LegacyLevel.getOffset(player.getLocation(), loc); + + if (level != null) { + preBreak(npc, player, get, level); + return level; + } else { + //This should not happen + level = null; + get = null; + } + } + } + //Break potential obstructing walls for (Location loc : locStanding) { boolean up = false; @@ -847,7 +865,7 @@ public class LegacyAgent extends Agent { towerList.put(playerNPC, playerNPC.getLocation()); } } - }, 5); + }, 3); if (npc.isBotOnGround()) { if (target.getLocation().distance(playerNPC.getLocation()) < 16) { @@ -1077,67 +1095,12 @@ public class LegacyAgent extends Agent { byte i = mining.get(this); Block cur; - switch (wrapper.getLevel()) { - case ABOVE: - cur = player.getLocation().add(0, 2, 0).getBlock(); - break; - case BELOW: - cur = bot.getStandingOn().isEmpty() ? null : bot.getStandingOn().get(0); - break; - case NORTH_U: - cur = player.getLocation().add(0, 2, -1).getBlock(); - break; - case SOUTH_U: - cur = player.getLocation().add(0, 2, 1).getBlock(); - break; - case EAST_U: - cur = player.getLocation().add(1, 2, 0).getBlock(); - break; - case WEST_U: - cur = player.getLocation().add(-1, 2, 0).getBlock(); - break; - case NORTH: - cur = player.getLocation().add(0, 1, -1).getBlock(); - break; - case SOUTH: - cur = player.getLocation().add(0, 1, 1).getBlock(); - break; - case EAST: - cur = player.getLocation().add(1, 1, 0).getBlock(); - break; - case WEST: - cur = player.getLocation().add(-1, 1, 0).getBlock(); - break; - case NORTH_D: - cur = player.getLocation().add(0, 0, -1).getBlock(); - break; - case SOUTH_D: - cur = player.getLocation().add(0, 0, 1).getBlock(); - break; - case EAST_D: - cur = player.getLocation().add(1, 0, 0).getBlock(); - break; - case WEST_D: - cur = player.getLocation().add(-1, 0, 0).getBlock(); - break; - case NORTH_D_2: - cur = player.getLocation().add(0, -1, -1).getBlock(); - break; - case SOUTH_D_2: - cur = player.getLocation().add(0, -1, 1).getBlock(); - break; - case EAST_D_2: - cur = player.getLocation().add(1, -1, 0).getBlock(); - break; - case WEST_D_2: - cur = player.getLocation().add(-1, -1, 0).getBlock(); - break; - case AT_D: - cur = player.getLocation().getBlock(); - break; - default: - cur = player.getLocation().add(0, 1, 0).getBlock(); - } + if (wrapper.getLevel() == null) + cur = player.getLocation().add(0, 1, 0).getBlock(); + else if (wrapper.getLevel() == LegacyLevel.BELOW) + cur = bot.getStandingOn().isEmpty() ? null : bot.getStandingOn().get(0); + else + cur = wrapper.getLevel().offset(player.getLocation()).getBlock(); // Fix boat clutching while breaking block // As a side effect, the bot is able to break multiple blocks at once while over lava diff --git a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyBlockCheck.java b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyBlockCheck.java index 54f290c..309cfdd 100644 --- a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyBlockCheck.java +++ b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyBlockCheck.java @@ -6,7 +6,6 @@ import net.nuggetmc.tplus.api.utils.BotUtils; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.block.data.Waterlogged; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; diff --git a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyLevel.java b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyLevel.java index 32f446f..9f6b44c 100644 --- a/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyLevel.java +++ b/TerminatorPlus-API/src/main/java/net/nuggetmc/tplus/api/agent/legacyagent/LegacyLevel.java @@ -4,27 +4,43 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Set; +import org.bukkit.Location; + public enum LegacyLevel { - ABOVE, - BELOW, - AT, - AT_D, - NORTH_U, - SOUTH_U, - EAST_U, - WEST_U, - NORTH, - SOUTH, - EAST, - WEST, - NORTH_D, - SOUTH_D, - EAST_D, - WEST_D, - NORTH_D_2, - SOUTH_D_2, - EAST_D_2, - WEST_D_2; + ABOVE(0, 2, 0), + BELOW(0, -1, 0), + AT(0, 1, 0), + AT_D(0, 0, 0), + NORTH_U(0, 2, -1), + SOUTH_U(0, 2, 1), + EAST_U(1, 2, 0), + WEST_U(-1, 2, 0), + NORTH(0, 1, -1), + SOUTH(0, 1, 1), + EAST(1, 1, 0), + WEST(-1, 1, 0), + NORTH_D(0, 0, -1), + SOUTH_D(0, 0, 1), + EAST_D(1, 0, 0), + WEST_D(-1, 0, 0), + NORTHWEST_D(-1, 0, -1), + SOUTHWEST_D(-1, 0, 1), + NORTHEAST_D(1, 0, -1), + SOUTHEAST_D(1, 0, 1), + NORTH_D_2(0, -1, -1), + SOUTH_D_2(0, -1, 1), + EAST_D_2(1, -1, 0), + WEST_D_2(-1, -1, 0); + + private final int offsetX; + private final int offsetY; + private final int offsetZ; + + private LegacyLevel(int offsetX, int offsetY, int offsetZ) { + this.offsetX = offsetX; + this.offsetY = offsetY; + this.offsetZ = offsetZ; + } private static final Set NON_SIDE = new HashSet<>(Arrays.asList( ABOVE, @@ -115,6 +131,22 @@ public enum LegacyLevel { } } + public static LegacyLevel getOffset(Location start, Location end) { + int diffX = end.getBlockX() - start.getBlockX(); + int diffY = end.getBlockY() - start.getBlockY(); + int diffZ = end.getBlockZ() - start.getBlockZ(); + for (LegacyLevel level : LegacyLevel.values()) { + if (level.offsetX == diffX && level.offsetY == diffY && level.offsetZ == diffZ) { + return level; + } + } + return null; + } + + public Location offset(Location loc) { + return loc.add(offsetX, offsetY, offsetZ); + } + public static class LevelWrapper { private LegacyLevel level; 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 6b1d2f0..8b61ceb 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 @@ -213,7 +213,7 @@ public class BotCommand extends CommandInstance { String botName = bot.getBotName(); String world = ChatColor.YELLOW + bot.getBukkitEntity().getWorld().getName(); Location loc = bot.getLocation(); - String strLoc = ChatColor.YELLOW + formatter.format(loc.getBlockX()) + ", " + formatter.format(loc.getBlockY()) + ", " + formatter.format(loc.getBlockZ()); + String strLoc = ChatColor.YELLOW + formatter.format(loc.getX()) + ", " + formatter.format(loc.getY()) + ", " + formatter.format(loc.getZ()); Vector vel = bot.getVelocity(); String strVel = ChatColor.AQUA + formatter.format(vel.getX()) + ", " + formatter.format(vel.getY()) + ", " + formatter.format(vel.getZ());