Fix stuck issue

While boat clutching and breaking a side block
This commit is contained in:
ThisTestUser
2022-11-23 18:03:47 -05:00
parent 0e4a5e171f
commit 9c98231cb3
3 changed files with 132 additions and 11 deletions

View File

@@ -10,9 +10,9 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
public interface BotManager { public interface BotManager {
Location getSpawnLoc(); Location getSpawnLoc();
void setSpawnLoc(Location loc); void setSpawnLoc(Location loc);
Set<Terminator> fetch(); Set<Terminator> fetch();

View File

@@ -1006,14 +1006,13 @@ public class LegacyAgent extends Agent {
bot.setItem(new ItemStack(item)); bot.setItem(new ItemStack(item));
if (level == LegacyLevel.EAST_D || level == LegacyLevel.NORTH_D || level == LegacyLevel.SOUTH_D || level == LegacyLevel.WEST_D if (level.isSideDown() || level.isSideDown2()) {
|| level == LegacyLevel.EAST_D_2 || level == LegacyLevel.NORTH_D_2 || level == LegacyLevel.SOUTH_D_2 || level == LegacyLevel.WEST_D_2) {
bot.setBotPitch(69); bot.setBotPitch(69);
scheduler.runTaskLater(plugin, () -> { scheduler.runTaskLater(plugin, () -> {
btCheck.put(player, true); btCheck.put(player, true);
}, 5); }, 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); bot.setBotPitch(-53);
}else if (level == LegacyLevel.AT_D || level == LegacyLevel.AT) { }else if (level == LegacyLevel.AT_D || level == LegacyLevel.AT) {
Location blockLoc = block.getLocation().add(0.5, -1, 0.5); Location blockLoc = block.getLocation().add(0.5, -1, 0.5);
@@ -1035,10 +1034,10 @@ public class LegacyAgent extends Agent {
miningAnim.put(player, task); 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; if (LegacyMats.NO_CRACK.contains(block.getType())) return;
@@ -1050,7 +1049,7 @@ public class LegacyAgent extends Agent {
byte i = mining.get(this); byte i = mining.get(this);
Block cur; Block cur;
switch (level) { switch (wrapper.getLevel()) {
case ABOVE: case ABOVE:
cur = player.getLocation().add(0, 2, 0).getBlock(); cur = player.getLocation().add(0, 2, 0).getBlock();
break; break;
@@ -1112,6 +1111,34 @@ public class LegacyAgent extends Agent {
cur = player.getLocation().add(0, 1, 0).getBlock(); 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 // wow this repeated code is so bad lmao
if (player.isDead() || cur == null || (!block.equals(cur) || block.getType() != cur.getType())) { if (player.isDead() || cur == null || (!block.equals(cur) || block.getType() != cur.getType())) {
@@ -1139,7 +1166,7 @@ public class LegacyAgent extends Agent {
block.breakNaturally(); block.breakNaturally();
if (level == LegacyLevel.ABOVE) { if (wrapper.getLevel() == LegacyLevel.ABOVE) {
noJump.add(player); noJump.add(player);
scheduler.runTaskLater(plugin, () -> { scheduler.runTaskLater(plugin, () -> {

View File

@@ -32,8 +32,102 @@ public enum LegacyLevel {
AT, AT,
AT_D AT_D
)); ));
private static final Set<LegacyLevel> SIDE_AT = new HashSet<>(Arrays.asList(
NORTH,
SOUTH,
EAST,
WEST
));
private static final Set<LegacyLevel> SIDE_UP = new HashSet<>(Arrays.asList(
NORTH_U,
SOUTH_U,
EAST_U,
WEST_U
));
private static final Set<LegacyLevel> SIDE_DOWN = new HashSet<>(Arrays.asList(
NORTH_D,
SOUTH_D,
EAST_D,
WEST_D
));
private static final Set<LegacyLevel> SIDE_DOWN_2 = new HashSet<>(Arrays.asList(
NORTH_D_2,
SOUTH_D_2,
EAST_D_2,
WEST_D_2
));
public boolean isSide() { public boolean isSide() {
return !NON_SIDE.contains(this); 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;
}
}
} }