Fix ascent and descent commands.

For seven years and two days, the algorithm for ascent and descent has had an off-by-one error, and started at the wrong level.
Also, the message for failed descent has apparently never been right.
I figured I'd follow Java's conventions (as I see them) and have a body for the loop, so instead of incrementing the counter within the loop condition, I refactored the loop and put in a break statement.  I prefer the shorter version, but POLA wins in a foreign code base.
This commit is contained in:
Cebtenzzre 2018-07-09 05:38:22 -04:00
parent a820665dc4
commit 030a07b1d6

View File

@ -75,9 +75,12 @@ public class NavigationCommands {
) )
@CommandPermissions("worldedit.navigation.ascend") @CommandPermissions("worldedit.navigation.ascend")
public void ascend(Player player, @Optional("1") int levelsToAscend) throws WorldEditException { public void ascend(Player player, @Optional("1") int levelsToAscend) throws WorldEditException {
int ascentLevels = 1; int ascentLevels = 0;
while (player.ascendLevel() && levelsToAscend != ascentLevels) { while (player.ascendLevel()) {
++ascentLevels; ++ascentLevels;
if (levelsToAscend == ascentLevels) {
break;
}
} }
if (ascentLevels == 0) { if (ascentLevels == 0) {
player.printError("No free spot above you found."); player.printError("No free spot above you found.");
@ -95,12 +98,15 @@ public class NavigationCommands {
) )
@CommandPermissions("worldedit.navigation.descend") @CommandPermissions("worldedit.navigation.descend")
public void descend(Player player, @Optional("1") int levelsToDescend) throws WorldEditException { public void descend(Player player, @Optional("1") int levelsToDescend) throws WorldEditException {
int descentLevels = 1; int descentLevels = 0;
while (player.descendLevel() && levelsToDescend != descentLevels) { while (player.descendLevel()) {
++descentLevels; ++descentLevels;
if (levelsToDescend == descentLevels) {
break;
}
} }
if (descentLevels == 0) { if (descentLevels == 0) {
player.printError("No free spot above you found."); player.printError("No free spot below you found.");
} else { } else {
player.print((descentLevels != 1) ? "Descended " + Integer.toString(descentLevels) + " levels." : "Descended a level."); player.print((descentLevels != 1) ? "Descended " + Integer.toString(descentLevels) + " levels." : "Descended a level.");
} }