From 030a07b1d69ad170369a9bdad286486a0f585f2c Mon Sep 17 00:00:00 2001 From: Cebtenzzre Date: Mon, 9 Jul 2018 05:38:22 -0400 Subject: [PATCH] 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. --- .../worldedit/command/NavigationCommands.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/NavigationCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/NavigationCommands.java index 4cb581e3d..ba891026c 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/NavigationCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/NavigationCommands.java @@ -75,9 +75,12 @@ public class NavigationCommands { ) @CommandPermissions("worldedit.navigation.ascend") public void ascend(Player player, @Optional("1") int levelsToAscend) throws WorldEditException { - int ascentLevels = 1; - while (player.ascendLevel() && levelsToAscend != ascentLevels) { + int ascentLevels = 0; + while (player.ascendLevel()) { ++ascentLevels; + if (levelsToAscend == ascentLevels) { + break; + } } if (ascentLevels == 0) { player.printError("No free spot above you found."); @@ -95,12 +98,15 @@ public class NavigationCommands { ) @CommandPermissions("worldedit.navigation.descend") public void descend(Player player, @Optional("1") int levelsToDescend) throws WorldEditException { - int descentLevels = 1; - while (player.descendLevel() && levelsToDescend != descentLevels) { + int descentLevels = 0; + while (player.descendLevel()) { ++descentLevels; + if (levelsToDescend == descentLevels) { + break; + } } if (descentLevels == 0) { - player.printError("No free spot above you found."); + player.printError("No free spot below you found."); } else { player.print((descentLevels != 1) ? "Descended " + Integer.toString(descentLevels) + " levels." : "Descended a level."); }