Merge pull request #4712 from ZacSharp/pr/1.19.4/misc/moreExceptionMessages
Add messages to more exceptions and improve some existing ones
This commit is contained in:
@@ -44,7 +44,7 @@ public class GoalRunAway implements Goal {
|
||||
|
||||
public GoalRunAway(double distance, Integer maintainY, BlockPos... from) {
|
||||
if (from.length == 0) {
|
||||
throw new IllegalArgumentException();
|
||||
throw new IllegalArgumentException("Positions to run away from must not be empty");
|
||||
}
|
||||
this.from = from;
|
||||
this.distanceSq = (int) (distance * distance);
|
||||
|
||||
@@ -22,6 +22,7 @@ import baritone.api.pathing.calc.IPath;
|
||||
import baritone.api.pathing.goals.Goal;
|
||||
import baritone.api.pathing.movement.ActionCosts;
|
||||
import baritone.api.utils.BetterBlockPos;
|
||||
import baritone.api.utils.SettingsUtil;
|
||||
import baritone.pathing.calc.openset.BinaryHeapOpenSet;
|
||||
import baritone.pathing.movement.CalculationContext;
|
||||
import baritone.pathing.movement.Moves;
|
||||
@@ -122,17 +123,39 @@ public final class AStarPathFinder extends AbstractNodeCostSearch {
|
||||
continue;
|
||||
}
|
||||
if (actionCost <= 0 || Double.isNaN(actionCost)) {
|
||||
throw new IllegalStateException(moves + " calculated implausible cost " + actionCost);
|
||||
throw new IllegalStateException(String.format(
|
||||
"%s from %s %s %s calculated implausible cost %s",
|
||||
moves,
|
||||
SettingsUtil.maybeCensor(currentNode.x),
|
||||
SettingsUtil.maybeCensor(currentNode.y),
|
||||
SettingsUtil.maybeCensor(currentNode.z),
|
||||
actionCost));
|
||||
}
|
||||
// check destination after verifying it's not COST_INF -- some movements return a static IMPOSSIBLE object with COST_INF and destination being 0,0,0 to avoid allocating a new result for every failed calculation
|
||||
// check destination after verifying it's not COST_INF -- some movements return COST_INF without adjusting the destination
|
||||
if (moves.dynamicXZ && !worldBorder.entirelyContains(res.x, res.z)) { // see issue #218
|
||||
continue;
|
||||
}
|
||||
if (!moves.dynamicXZ && (res.x != newX || res.z != newZ)) {
|
||||
throw new IllegalStateException(moves + " " + res.x + " " + newX + " " + res.z + " " + newZ);
|
||||
throw new IllegalStateException(String.format(
|
||||
"%s from %s %s %s ended at x z %s %s instead of %s %s",
|
||||
moves,
|
||||
SettingsUtil.maybeCensor(currentNode.x),
|
||||
SettingsUtil.maybeCensor(currentNode.y),
|
||||
SettingsUtil.maybeCensor(currentNode.z),
|
||||
SettingsUtil.maybeCensor(res.x),
|
||||
SettingsUtil.maybeCensor(res.z),
|
||||
SettingsUtil.maybeCensor(newX),
|
||||
SettingsUtil.maybeCensor(newZ)));
|
||||
}
|
||||
if (!moves.dynamicY && res.y != currentNode.y + moves.yOffset) {
|
||||
throw new IllegalStateException(moves + " " + res.y + " " + (currentNode.y + moves.yOffset));
|
||||
throw new IllegalStateException(String.format(
|
||||
"%s from %s %s %s ended at y %s instead of %s",
|
||||
moves,
|
||||
SettingsUtil.maybeCensor(currentNode.x),
|
||||
SettingsUtil.maybeCensor(currentNode.y),
|
||||
SettingsUtil.maybeCensor(currentNode.z),
|
||||
SettingsUtil.maybeCensor(res.y),
|
||||
SettingsUtil.maybeCensor(currentNode.y + moves.yOffset)));
|
||||
}
|
||||
long hashCode = BetterBlockPos.longHash(res.x, res.y, res.z);
|
||||
if (isFavoring) {
|
||||
|
||||
@@ -112,7 +112,7 @@ class Path extends PathBase {
|
||||
|
||||
private boolean assembleMovements() {
|
||||
if (path.isEmpty() || !movements.isEmpty()) {
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException("Path must not be empty");
|
||||
}
|
||||
for (int i = 0; i < path.size() - 1; i++) {
|
||||
double cost = nodes.get(i + 1).cost - nodes.get(i).cost;
|
||||
@@ -145,7 +145,7 @@ class Path extends PathBase {
|
||||
@Override
|
||||
public IPath postProcess() {
|
||||
if (verified) {
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException("Path must not be verified twice");
|
||||
}
|
||||
verified = true;
|
||||
boolean failed = assembleMovements();
|
||||
@@ -154,7 +154,7 @@ class Path extends PathBase {
|
||||
if (failed) { // at least one movement became impossible during calculation
|
||||
CutoffPath res = new CutoffPath(this, movements().size());
|
||||
if (res.movements().size() != movements.size()) {
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException("Path has wrong size after cutoff");
|
||||
}
|
||||
return res;
|
||||
}
|
||||
@@ -166,7 +166,8 @@ class Path extends PathBase {
|
||||
@Override
|
||||
public List<IMovement> movements() {
|
||||
if (!verified) {
|
||||
throw new IllegalStateException();
|
||||
// edge case note: this is called during verification
|
||||
throw new IllegalStateException("Path not yet verified");
|
||||
}
|
||||
return Collections.unmodifiableList(movements);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ package baritone.pathing.calc;
|
||||
import baritone.api.pathing.goals.Goal;
|
||||
import baritone.api.pathing.movement.ActionCosts;
|
||||
import baritone.api.utils.BetterBlockPos;
|
||||
import baritone.api.utils.SettingsUtil;
|
||||
|
||||
/**
|
||||
* A node in the path, containing the cost and steps to get to it.
|
||||
@@ -68,7 +69,12 @@ public final class PathNode {
|
||||
this.cost = ActionCosts.COST_INF;
|
||||
this.estimatedCostToGoal = goal.heuristic(x, y, z);
|
||||
if (Double.isNaN(estimatedCostToGoal)) {
|
||||
throw new IllegalStateException(goal + " calculated implausible heuristic");
|
||||
throw new IllegalStateException(String.format(
|
||||
"%s calculated implausible heuristic NaN at %s %s %s",
|
||||
goal,
|
||||
SettingsUtil.maybeCensor(x),
|
||||
SettingsUtil.maybeCensor(y),
|
||||
SettingsUtil.maybeCensor(z)));
|
||||
}
|
||||
this.heapPosition = -1;
|
||||
this.x = x;
|
||||
|
||||
@@ -92,7 +92,7 @@ public final class BinaryHeapOpenSet implements IOpenSet {
|
||||
@Override
|
||||
public final PathNode removeLowest() {
|
||||
if (size == 0) {
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException("Cannot remove from empty heap");
|
||||
}
|
||||
PathNode result = array[1];
|
||||
PathNode val = array[size];
|
||||
|
||||
@@ -347,7 +347,7 @@ public enum Moves {
|
||||
|
||||
public void apply(CalculationContext context, int x, int y, int z, MutableMoveResult result) {
|
||||
if (dynamicXZ || dynamicY) {
|
||||
throw new UnsupportedOperationException();
|
||||
throw new UnsupportedOperationException("Movements with dynamic offset must override `apply`");
|
||||
}
|
||||
result.x = x + xOffset;
|
||||
result.y = y + yOffset;
|
||||
@@ -356,6 +356,6 @@ public enum Moves {
|
||||
}
|
||||
|
||||
public double cost(CalculationContext context, int x, int y, int z) {
|
||||
throw new UnsupportedOperationException();
|
||||
throw new UnsupportedOperationException("Movements must override `cost` or `apply`");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -455,7 +455,9 @@ public class PathExecutor implements IPathExecutor, Helper {
|
||||
if (data != null) {
|
||||
BetterBlockPos fallDest = new BetterBlockPos(data.getB());
|
||||
if (!path.positions().contains(fallDest)) {
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException(String.format(
|
||||
"Fall override at %s %s %s returned illegal destination %s %s %s",
|
||||
current.getSrc(), fallDest));
|
||||
}
|
||||
if (ctx.playerFeet().equals(fallDest)) {
|
||||
pathPosition = path.positions().indexOf(fallDest);
|
||||
@@ -603,7 +605,9 @@ public class PathExecutor implements IPathExecutor, Helper {
|
||||
}
|
||||
return SplicedPath.trySplice(path, next.path, false).map(path -> {
|
||||
if (!path.getDest().equals(next.getPath().getDest())) {
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException(String.format(
|
||||
"Path has end %s instead of %s after splicing",
|
||||
path.getDest(), next.getPath().getDest()));
|
||||
}
|
||||
PathExecutor ret = new PathExecutor(behavior, path);
|
||||
ret.pathPosition = pathPosition;
|
||||
@@ -619,7 +623,9 @@ public class PathExecutor implements IPathExecutor, Helper {
|
||||
int cutoffAmt = Baritone.settings().pathHistoryCutoffAmount.value;
|
||||
CutoffPath newPath = new CutoffPath(path, cutoffAmt, path.length() - 1);
|
||||
if (!newPath.getDest().equals(path.getDest())) {
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException(String.format(
|
||||
"Path has end %s instead of %s after trimming its start",
|
||||
newPath.getDest(), path.getDest()));
|
||||
}
|
||||
logDebug("Discarding earliest segment movements, length cut from " + path.length() + " to " + newPath.length());
|
||||
PathExecutor ret = new PathExecutor(behavior, newPath);
|
||||
|
||||
@@ -92,7 +92,7 @@ public class SplicedPath extends PathBase {
|
||||
}
|
||||
int positionInSecond = second.positions().indexOf(first.positions().get(firstPositionInSecond));
|
||||
if (!allowOverlapCutoff && positionInSecond != 0) {
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException("Paths to be spliced are overlapping incorrectly");
|
||||
}
|
||||
List<BetterBlockPos> positions = new ArrayList<>();
|
||||
List<IMovement> movements = new ArrayList<>();
|
||||
|
||||
@@ -442,7 +442,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil
|
||||
double z = side.getStepZ() == 0 ? 0.5 : (1 + side.getStepZ()) / 2D;
|
||||
return new Vec3[]{new Vec3(x, 0.25, z), new Vec3(x, 0.75, z)};
|
||||
default: // null
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException("Unexpected side " + side);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ public final class CustomGoalProcess extends BaritoneProcessHelper implements IC
|
||||
}
|
||||
return new PathingCommand(this.goal, PathingCommandType.SET_GOAL_AND_PATH);
|
||||
default:
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException("Unexpected state " + this.state);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -118,7 +118,9 @@ public final class ExploreProcess extends BaritoneProcessHelper implements IExpl
|
||||
int dz = (mult * 2 - 1) * zval; // dz can be either -zval or zval
|
||||
int trueDist = Math.abs(dx) + Math.abs(dz);
|
||||
if (trueDist != dist) {
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException(String.format(
|
||||
"Offset %s %s has distance %s, expected %s",
|
||||
dx, dz, trueDist, dist));
|
||||
}
|
||||
switch (filter.isAlreadyExplored(chunkX + dx, chunkZ + dz)) {
|
||||
case UNKNOWN:
|
||||
|
||||
@@ -70,7 +70,7 @@ public class BlockStateInterface {
|
||||
}
|
||||
this.useTheRealWorld = !Baritone.settings().pathThroughCachedOnly.value;
|
||||
if (!ctx.minecraft().isSameThread()) {
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException("BlockStateInterface must be constructed on the main thread");
|
||||
}
|
||||
this.isPassableBlockPos = new BlockPos.MutableBlockPos();
|
||||
this.access = new BlockStateInterfaceAccessWrapper(this);
|
||||
|
||||
@@ -68,7 +68,7 @@ public class PathingControlManager implements IPathingControlManager {
|
||||
for (IBaritoneProcess proc : processes) {
|
||||
proc.onLostControl();
|
||||
if (proc.isActive() && !proc.isTemporary()) { // it's okay only for a temporary thing (like combat pause) to maintain control even if you say to cancel
|
||||
throw new IllegalStateException(proc.displayName());
|
||||
throw new IllegalStateException(proc.displayName() + " stayed active after being cancelled");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -121,7 +121,7 @@ public class PathingControlManager implements IPathingControlManager {
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException();
|
||||
throw new IllegalStateException("Unexpected command type " + command.commandType);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user