diff --git a/src/com/sk89q/worldedit/LocalPlayer.java b/src/com/sk89q/worldedit/LocalPlayer.java index b5a0b878a..ca31eb8cb 100644 --- a/src/com/sk89q/worldedit/LocalPlayer.java +++ b/src/com/sk89q/worldedit/LocalPlayer.java @@ -28,20 +28,6 @@ import com.sk89q.worldedit.util.TargetBlock; * @author sk89q */ public abstract class LocalPlayer { - /** - * Directions. - */ - public enum DIRECTION { - NORTH, - NORTH_EAST, - EAST, - SOUTH_EAST, - SOUTH, - SOUTH_WEST, - WEST, - NORTH_WEST - }; - /** * Server. */ @@ -320,7 +306,7 @@ public abstract class LocalPlayer { * * @return */ - public LocalPlayer.DIRECTION getCardinalDirection() { + public PlayerDirection getCardinalDirection() { // From hey0's code double rot = (getYaw() - 90) % 360; if (rot < 0) { @@ -335,25 +321,25 @@ public abstract class LocalPlayer { * @param rot * @return */ - private static LocalPlayer.DIRECTION getDirection(double rot) { + private static PlayerDirection getDirection(double rot) { if (0 <= rot && rot < 22.5) { - return LocalPlayer.DIRECTION.NORTH; + return PlayerDirection.NORTH; } else if (22.5 <= rot && rot < 67.5) { - return LocalPlayer.DIRECTION.NORTH_EAST; + return PlayerDirection.NORTH_EAST; } else if (67.5 <= rot && rot < 112.5) { - return LocalPlayer.DIRECTION.EAST; + return PlayerDirection.EAST; } else if (112.5 <= rot && rot < 157.5) { - return LocalPlayer.DIRECTION.SOUTH_EAST; + return PlayerDirection.SOUTH_EAST; } else if (157.5 <= rot && rot < 202.5) { - return LocalPlayer.DIRECTION.SOUTH; + return PlayerDirection.SOUTH; } else if (202.5 <= rot && rot < 247.5) { - return LocalPlayer.DIRECTION.SOUTH_WEST; + return PlayerDirection.SOUTH_WEST; } else if (247.5 <= rot && rot < 292.5) { - return LocalPlayer.DIRECTION.WEST; + return PlayerDirection.WEST; } else if (292.5 <= rot && rot < 337.5) { - return LocalPlayer.DIRECTION.NORTH_WEST; + return PlayerDirection.NORTH_WEST; } else if (337.5 <= rot && rot < 360.0) { - return LocalPlayer.DIRECTION.NORTH; + return PlayerDirection.NORTH; } else { return null; } diff --git a/src/com/sk89q/worldedit/PlayerDirection.java b/src/com/sk89q/worldedit/PlayerDirection.java new file mode 100644 index 000000000..a44e27246 --- /dev/null +++ b/src/com/sk89q/worldedit/PlayerDirection.java @@ -0,0 +1,56 @@ +// $Id$ +/* + * WorldEdit + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +package com.sk89q.worldedit; + +/** + * Direction. + */ +public enum PlayerDirection { + NORTH(new Vector(-1, 0, 0), new Vector(0, 0, 1), true), + NORTH_EAST((new Vector(-1, 0, -1)).normalize(), (new Vector(-1, 0, 1)).normalize(), false), + EAST(new Vector(0, 0, -1), new Vector(-1, 0, 0), true), + SOUTH_EAST((new Vector(1, 0, -1)).normalize(), (new Vector(-1, 0, -1)).normalize(), false), + 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); + + private Vector dir; + private Vector leftDir; + private boolean isOrthogonal; + + PlayerDirection(Vector vec, Vector leftDir, boolean isOrthogonal) { + this.dir = vec; + this.leftDir = leftDir; + this.isOrthogonal = isOrthogonal; + } + + public Vector vector() { + return dir; + } + + public Vector leftVector() { + return leftDir; + } + + public boolean isOrthogonal() { + return isOrthogonal; + } +} \ No newline at end of file diff --git a/src/com/sk89q/worldedit/Vector.java b/src/com/sk89q/worldedit/Vector.java index 018ca498a..ab8bdee5e 100644 --- a/src/com/sk89q/worldedit/Vector.java +++ b/src/com/sk89q/worldedit/Vector.java @@ -434,6 +434,18 @@ public class Vector { return new Vector(x / n, y / n, z / n); } + /** + * Get the length of the vector. + * + * @param pt + * @return distance + */ + public double length() { + return Math.sqrt(Math.pow(x, 2) + + Math.pow(y, 2) + + Math.pow(z, 2)); + } + /** * Get the distance away from a point. * @@ -458,6 +470,16 @@ public class Vector { Math.pow(pt.z - z, 2); } + /** + * Get the normalized vector. + * + * @param pt + * @return vector + */ + public Vector normalize() { + return divide(length()); + } + /** * Checks to see if a vector is contained with another. * diff --git a/src/com/sk89q/worldedit/WorldEditController.java b/src/com/sk89q/worldedit/WorldEditController.java index daed36d1d..60bf5880a 100644 --- a/src/com/sk89q/worldedit/WorldEditController.java +++ b/src/com/sk89q/worldedit/WorldEditController.java @@ -1747,7 +1747,7 @@ public class WorldEditController { int ym = 0; int zm = 0; - LocalPlayer.DIRECTION dir = null; + PlayerDirection dir = null; dirStr = dirStr.toLowerCase(); boolean wasDetected = false; @@ -1757,13 +1757,13 @@ public class WorldEditController { wasDetected = true; } - if (dirStr.charAt(0) == 'w' || dir == LocalPlayer.DIRECTION.WEST) { + if (dirStr.charAt(0) == 'w' || dir == PlayerDirection.WEST) { zm += 1; - } else if (dirStr.charAt(0) == 'e' || dir == LocalPlayer.DIRECTION.EAST) { + } else if (dirStr.charAt(0) == 'e' || dir == PlayerDirection.EAST) { zm -= 1; - } else if (dirStr.charAt(0) == 's' || dir == LocalPlayer.DIRECTION.SOUTH) { + } else if (dirStr.charAt(0) == 's' || dir == PlayerDirection.SOUTH) { xm += 1; - } else if (dirStr.charAt(0) == 'n' || dir == LocalPlayer.DIRECTION.NORTH) { + } else if (dirStr.charAt(0) == 'n' || dir == PlayerDirection.NORTH) { xm -= 1; } else if (dirStr.charAt(0) == 'u') { ym += 1; @@ -1791,19 +1791,19 @@ public class WorldEditController { public CuboidClipboard.FlipDirection getFlipDirection( LocalPlayer player, String dirStr) throws UnknownDirectionException { - LocalPlayer.DIRECTION dir = null; + PlayerDirection dir = null; if (dirStr.equals("me")) { dir = player.getCardinalDirection(); } - if (dirStr.charAt(0) == 'w' || dir == LocalPlayer.DIRECTION.EAST) { + if (dirStr.charAt(0) == 'w' || dir == PlayerDirection.EAST) { return CuboidClipboard.FlipDirection.WEST_EAST; - } else if (dirStr.charAt(0) == 'e' || dir == LocalPlayer.DIRECTION.EAST) { + } else if (dirStr.charAt(0) == 'e' || dir == PlayerDirection.EAST) { return CuboidClipboard.FlipDirection.WEST_EAST; - } else if (dirStr.charAt(0) == 's' || dir == LocalPlayer.DIRECTION.SOUTH) { + } else if (dirStr.charAt(0) == 's' || dir == PlayerDirection.SOUTH) { return CuboidClipboard.FlipDirection.NORTH_SOUTH; - } else if (dirStr.charAt(0) == 'n' || dir == LocalPlayer.DIRECTION.SOUTH) { + } else if (dirStr.charAt(0) == 'n' || dir == PlayerDirection.SOUTH) { return CuboidClipboard.FlipDirection.NORTH_SOUTH; } else if (dirStr.charAt(0) == 'u') { return CuboidClipboard.FlipDirection.UP_DOWN; diff --git a/src/com/sk89q/worldedit/blocks/NoteBlock.java b/src/com/sk89q/worldedit/blocks/NoteBlock.java index 978917b53..48cf7a101 100644 --- a/src/com/sk89q/worldedit/blocks/NoteBlock.java +++ b/src/com/sk89q/worldedit/blocks/NoteBlock.java @@ -35,7 +35,17 @@ public class NoteBlock extends BaseBlock implements TileEntityBlock { private byte note; /** - * Construct the sign without text. + * Construct the note block. + * + * @param data + */ + public NoteBlock() { + super(25); + this.note = 0; + } + + /** + * Construct the note block. * * @param data */ @@ -45,7 +55,7 @@ public class NoteBlock extends BaseBlock implements TileEntityBlock { } /** - * Construct the sign with text. + * Construct the note block. * * @param note */