From e67ea1e769c9e41794bd06c2c3154ece9f925588 Mon Sep 17 00:00:00 2001 From: TomyLobo Date: Mon, 15 Aug 2011 14:05:21 +0200 Subject: [PATCH] Commands that consider the player's look direction now also use up/down when the player's pitch is outside the [-67.5;67.5] interval. --- src/main/java/com/sk89q/worldedit/LocalPlayer.java | 5 +++++ .../java/com/sk89q/worldedit/PlayerDirection.java | 5 ++++- src/main/java/com/sk89q/worldedit/WorldEdit.java | 12 ++++++------ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/sk89q/worldedit/LocalPlayer.java b/src/main/java/com/sk89q/worldedit/LocalPlayer.java index b8d58557c..900f2b21a 100644 --- a/src/main/java/com/sk89q/worldedit/LocalPlayer.java +++ b/src/main/java/com/sk89q/worldedit/LocalPlayer.java @@ -342,6 +342,11 @@ public abstract class LocalPlayer { * @return */ public PlayerDirection getCardinalDirection() { + if (getPitch() > 67.5) + return PlayerDirection.DOWN; + if (getPitch() < -67.5) + return PlayerDirection.UP; + // From hey0's code double rot = (getYaw() - 90) % 360; if (rot < 0) { diff --git a/src/main/java/com/sk89q/worldedit/PlayerDirection.java b/src/main/java/com/sk89q/worldedit/PlayerDirection.java index a44e27246..7d8205642 100644 --- a/src/main/java/com/sk89q/worldedit/PlayerDirection.java +++ b/src/main/java/com/sk89q/worldedit/PlayerDirection.java @@ -30,7 +30,9 @@ public enum PlayerDirection { SOUTH(new Vector(1, 0, 0), new Vector(0, 0, -1), true), SOUTH_WEST((new Vector(1, 0, 1)).normalize(), (new Vector(1, 0, -1)).normalize(), false), WEST(new Vector(0, 0, 1), new Vector(1, 0, 0), true), - NORTH_WEST((new Vector(-1, 0, 1)).normalize(), (new Vector(1, 0, 1)).normalize(), false); + NORTH_WEST((new Vector(-1, 0, 1)).normalize(), (new Vector(1, 0, 1)).normalize(), false), + UP(new Vector(0, 1, 0), new Vector(0, 0, 1), true), + DOWN(new Vector(0, -1, 0), new Vector(0, 0, 1), true); private Vector dir; private Vector leftDir; @@ -46,6 +48,7 @@ public enum PlayerDirection { return dir; } + @Deprecated public Vector leftVector() { return leftDir; } diff --git a/src/main/java/com/sk89q/worldedit/WorldEdit.java b/src/main/java/com/sk89q/worldedit/WorldEdit.java index c99b826db..c9ebb93fd 100644 --- a/src/main/java/com/sk89q/worldedit/WorldEdit.java +++ b/src/main/java/com/sk89q/worldedit/WorldEdit.java @@ -727,9 +727,9 @@ public class WorldEdit { xm += 1; } else if (dirStr.charAt(0) == 'n' || dir == PlayerDirection.NORTH) { xm -= 1; - } else if (dirStr.charAt(0) == 'u') { + } else if (dirStr.charAt(0) == 'u' || dir == PlayerDirection.UP) { ym += 1; - } else if (dirStr.charAt(0) == 'd') { + } else if (dirStr.charAt(0) == 'd' || dir == PlayerDirection.DOWN) { ym -= 1; } else { if (wasDetected) { @@ -787,9 +787,9 @@ public class WorldEdit { xm += 1; } else if (dirStr.charAt(0) == 'n' || dir == PlayerDirection.NORTH) { xm -= 1; - } else if (dirStr.charAt(0) == 'u') { + } else if (dirStr.charAt(0) == 'u' || dir == PlayerDirection.UP) { ym += 1; - } else if (dirStr.charAt(0) == 'd') { + } else if (dirStr.charAt(0) == 'd' || dir == PlayerDirection.DOWN) { ym -= 1; } else { if (wasDetected) { @@ -828,9 +828,9 @@ public class WorldEdit { return CuboidClipboard.FlipDirection.NORTH_SOUTH; } else if (dirStr.charAt(0) == 'n' || dir == PlayerDirection.NORTH) { return CuboidClipboard.FlipDirection.NORTH_SOUTH; - } else if (dirStr.charAt(0) == 'u') { + } else if (dirStr.charAt(0) == 'u' || dir == PlayerDirection.UP) { return CuboidClipboard.FlipDirection.UP_DOWN; - } else if (dirStr.charAt(0) == 'd') { + } else if (dirStr.charAt(0) == 'd' || dir == PlayerDirection.DOWN) { return CuboidClipboard.FlipDirection.UP_DOWN; } else { throw new UnknownDirectionException(dir.name());