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 613d787..5e3e1bb 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 @@ -10,10 +10,10 @@ import java.util.Set; import java.util.UUID; public interface BotManager { - Location getSpawnLoc(); - - void setSpawnLoc(Location loc); - + Location getSpawnLoc(); + + void setSpawnLoc(Location loc); + Set fetch(); Agent getAgent(); 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 ef98b21..71b71f9 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 @@ -1006,14 +1006,13 @@ public class LegacyAgent extends Agent { bot.setItem(new ItemStack(item)); - if (level == LegacyLevel.EAST_D || level == LegacyLevel.NORTH_D || level == LegacyLevel.SOUTH_D || level == LegacyLevel.WEST_D - || level == LegacyLevel.EAST_D_2 || level == LegacyLevel.NORTH_D_2 || level == LegacyLevel.SOUTH_D_2 || level == LegacyLevel.WEST_D_2) { + if (level.isSideDown() || level.isSideDown2()) { bot.setBotPitch(69); scheduler.runTaskLater(plugin, () -> { btCheck.put(player, true); }, 5); - } else if (level == LegacyLevel.EAST_U || level == LegacyLevel.NORTH_U || level == LegacyLevel.SOUTH_U || level == LegacyLevel.WEST_U) { + } else if (level.isSideUp()) { bot.setBotPitch(-53); }else if (level == LegacyLevel.AT_D || level == LegacyLevel.AT) { Location blockLoc = block.getLocation().add(0.5, -1, 0.5); @@ -1035,10 +1034,10 @@ public class LegacyAgent extends Agent { miningAnim.put(player, task); } - blockBreakEffect(bot, player, block, level); + blockBreakEffect(bot, player, block, new LegacyLevel.LevelWrapper(level)); } - private void blockBreakEffect(Terminator bot, LivingEntity player, Block block, LegacyLevel level) { + private void blockBreakEffect(Terminator bot, LivingEntity player, Block block, LegacyLevel.LevelWrapper wrapper) { if (LegacyMats.NO_CRACK.contains(block.getType())) return; @@ -1050,7 +1049,7 @@ public class LegacyAgent extends Agent { byte i = mining.get(this); Block cur; - switch (level) { + switch (wrapper.getLevel()) { case ABOVE: cur = player.getLocation().add(0, 2, 0).getBlock(); break; @@ -1112,6 +1111,34 @@ public class LegacyAgent extends Agent { cur = player.getLocation().add(0, 1, 0).getBlock(); } + // Fix boat clutching while breaking block + if ((wrapper.getLevel().isSideAt() || wrapper.getLevel().isSideUp()) + && bot.getLocation().add(0, -2, 0).getBlock().getType() == Material.LAVA + && block.getLocation().clone().add(0, 1, 0).equals(cur.getLocation())) { + cur = block; + wrapper.setLevel(wrapper.getLevel().sideDown()); + + if (wrapper.getLevel().isSideDown() || wrapper.getLevel().isSideDown2()) + bot.setBotPitch(69); + else if (wrapper.getLevel().isSideUp()) + bot.setBotPitch(-53); + else if (wrapper.getLevel().isSide()) + bot.setBotPitch(0); + } + if ((wrapper.getLevel().isSideAt() || wrapper.getLevel().isSideDown()) + && bot.getLocation().add(0, -1, 0).getBlock().getType() == Material.LAVA + && block.getLocation().clone().add(0, -1, 0).equals(cur.getLocation())) { + cur = block; + wrapper.setLevel(wrapper.getLevel().sideUp()); + + if (wrapper.getLevel().isSideDown() || wrapper.getLevel().isSideDown2()) + bot.setBotPitch(69); + else if (wrapper.getLevel().isSideUp()) + bot.setBotPitch(-53); + else if (wrapper.getLevel().isSide()) + bot.setBotPitch(0); + } + // wow this repeated code is so bad lmao if (player.isDead() || cur == null || (!block.equals(cur) || block.getType() != cur.getType())) { @@ -1139,7 +1166,7 @@ public class LegacyAgent extends Agent { block.breakNaturally(); - if (level == LegacyLevel.ABOVE) { + if (wrapper.getLevel() == LegacyLevel.ABOVE) { noJump.add(player); scheduler.runTaskLater(plugin, () -> { 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 218dd63..32f446f 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 @@ -32,8 +32,102 @@ public enum LegacyLevel { AT, AT_D )); + private static final Set SIDE_AT = new HashSet<>(Arrays.asList( + NORTH, + SOUTH, + EAST, + WEST + )); + private static final Set SIDE_UP = new HashSet<>(Arrays.asList( + NORTH_U, + SOUTH_U, + EAST_U, + WEST_U + )); + private static final Set SIDE_DOWN = new HashSet<>(Arrays.asList( + NORTH_D, + SOUTH_D, + EAST_D, + WEST_D + )); + private static final Set SIDE_DOWN_2 = new HashSet<>(Arrays.asList( + NORTH_D_2, + SOUTH_D_2, + EAST_D_2, + WEST_D_2 + )); public boolean isSide() { return !NON_SIDE.contains(this); } + + public boolean isSideAt() { + return SIDE_AT.contains(this); + } + + public boolean isSideUp() { + return SIDE_UP.contains(this); + } + + public boolean isSideDown() { + return SIDE_DOWN.contains(this); + } + + public boolean isSideDown2() { + return SIDE_DOWN_2.contains(this); + } + + public LegacyLevel sideUp() { + switch(this) { + case NORTH: return NORTH_U; + case SOUTH: return SOUTH_U; + case EAST: return EAST_U; + case WEST: return WEST_U; + case NORTH_D: return NORTH; + case SOUTH_D: return SOUTH; + case EAST_D: return EAST; + case WEST_D: return WEST; + case NORTH_D_2: return NORTH_D; + case SOUTH_D_2: return SOUTH_D; + case EAST_D_2: return EAST_D; + case WEST_D_2: return WEST_D; + default: + return null; + } + } + + public LegacyLevel sideDown() { + switch(this) { + case NORTH_U: return NORTH; + case SOUTH_U: return SOUTH; + case EAST_U: return EAST; + case WEST_U: return WEST; + case NORTH: return NORTH_D; + case SOUTH: return SOUTH_D; + case EAST: return EAST_D; + case WEST: return WEST_D; + case NORTH_D: return NORTH_D_2; + case SOUTH_D: return SOUTH_D_2; + case EAST_D: return EAST_D_2; + case WEST_D: return WEST_D_2; + default: + return null; + } + } + + public static class LevelWrapper { + private LegacyLevel level; + + public LevelWrapper(LegacyLevel level) { + this.level = level; + } + + public LegacyLevel getLevel() { + return level; + } + + public void setLevel(LegacyLevel level) { + this.level = level; + } + } }