Fix stuck issue
While boat clutching and breaking a side block
This commit is contained in:
@@ -10,10 +10,10 @@ 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();
|
||||||
|
|
||||||
Agent getAgent();
|
Agent getAgent();
|
||||||
|
|||||||
@@ -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, () -> {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user