diff --git a/src/main/java/net/knarcraft/stargate/container/BlockLocation.java b/src/main/java/net/knarcraft/stargate/container/BlockLocation.java index 0d7fcf3..1f552fb 100644 --- a/src/main/java/net/knarcraft/stargate/container/BlockLocation.java +++ b/src/main/java/net/knarcraft/stargate/container/BlockLocation.java @@ -7,8 +7,8 @@ import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Directional; import org.bukkit.block.data.type.Sign; -import org.bukkit.block.data.type.WallSign; import org.bukkit.util.Vector; /** @@ -16,7 +16,7 @@ import org.bukkit.util.Vector; * *

The BlockLocation class is basically a Location with some extra functionality. * Warning: Because of differences in the equals methods between Location and BlockLocation, a BlockLocation which - * equals another BlockLocation does not necessarily equal the name BlockLocation if treated as a Location.

+ * equals another BlockLocation does not necessarily equal the same BlockLocation if treated as a Location.

*/ public class BlockLocation extends Location { @@ -35,19 +35,19 @@ public class BlockLocation extends Location { } /** - * Copies a craftbukkit block + * Creates a block location from a block * - * @param block

The block to

+ * @param block

The block to get the location of

*/ public BlockLocation(Block block) { super(block.getWorld(), block.getX(), block.getY(), block.getZ()); } /** - * Gets a block from a string + * Gets a block location from a string * * @param world

The world the block exists in

- * @param string

A comma separated list of z, y and z coordinates as integers

+ * @param string

A comma separated list of x, y and z coordinates as integers

*/ public BlockLocation(World world, String string) { super(world, Integer.parseInt(string.split(",")[0]), Integer.parseInt(string.split(",")[1]), @@ -55,11 +55,11 @@ public class BlockLocation extends Location { } /** - * Makes a new block in a relative position to this block + * Creates a new block location in a relative position to this block location * - * @param x

The x position relative to this block's position

- * @param y

The y position relative to this block's position

- * @param z

The z position relative to this block's position

+ * @param x

The number of blocks to move in the x-direction

+ * @param y

The number of blocks to move in the y-direction

+ * @param z

The number of blocks to move in the z-direction

* @return

A new block location

*/ public BlockLocation makeRelativeBlockLocation(int x, int y, int z) { @@ -67,12 +67,12 @@ public class BlockLocation extends Location { } /** - * Makes a location relative to the block location + * Creates a location in a relative position to this block location * - * @param x

The x position relative to this block's position

- * @param y

The y position relative to this block's position

+ * @param x

The number of blocks to move in the x-direction

+ * @param y

The number of blocks to move in the y-direction

* @param z

The z position relative to this block's position

- * @param yaw

The yaw of the location

+ * @param yaw

The number of blocks to move in the z-direction

* @return

A new location

*/ public Location makeRelativeLocation(double x, double y, double z, float yaw) { @@ -86,7 +86,7 @@ public class BlockLocation extends Location { * Gets a location relative to this block location * * @param relativeVector

The relative block vector describing the relative location

- * @param yaw

The yaw pointing in the distance direction

+ * @param yaw

The yaw pointing outwards from a portal (in the relative vector's distance direction)

* @return

A location relative to this location

*/ public BlockLocation getRelativeLocation(RelativeBlockVector relativeVector, double yaw) { @@ -98,9 +98,12 @@ public class BlockLocation extends Location { /** * Makes a location relative to the current location according to given parameters * - * @param right

The amount of blocks to go right when looking the opposite direction from the yaw

- * @param depth

The amount of blocks to go downwards when looking the opposite direction from the yaw

- * @param distance

The amount of blocks to go outwards when looking the opposite direction from the yaw

+ *

The distance goes in the direction of the yaw. Right goes in the direction of (yaw - 90) degrees. + * Depth goes downwards following the -y direction.

+ * + * @param right

The amount of blocks to go right when looking towards a portal

+ * @param depth

The amount of blocks to go downwards when looking towards a portal

+ * @param distance

The amount of blocks to go outwards when looking towards a portal

* @param portalYaw

The yaw when looking out from the portal

* @return A new location relative to this block location */ @@ -111,18 +114,18 @@ public class BlockLocation extends Location { } /** - * Gets the type for the block at this location + * Gets the type of block at this block location * - * @return

The block material type

+ * @return

The block's material type

*/ public Material getType() { return this.getBlock().getType(); } /** - * Sets the type for the block at this location + * Sets the type of block at this location * - * @param type

The new block material type

+ * @param type

The block's new material type

*/ public void setType(Material type) { this.getBlock().setType(type); @@ -140,6 +143,9 @@ public class BlockLocation extends Location { /** * Gets this block location's parent block * + *

The parent block is the block the item at this block location is attached to. Usually this is the block a + * sign or wall sign is attached to.

+ * * @return

This block location's parent block

*/ public Block getParent() { @@ -163,11 +169,13 @@ public class BlockLocation extends Location { int offsetZ = 0; BlockData blockData = getBlock().getBlockData(); - if (blockData instanceof WallSign) { - BlockFace facing = ((WallSign) blockData).getFacing().getOppositeFace(); + if (blockData instanceof Directional) { + //Get the offset of the block "behind" this block + BlockFace facing = ((Directional) blockData).getFacing().getOppositeFace(); offsetX = facing.getModX(); offsetZ = facing.getModZ(); } else if (blockData instanceof Sign) { + //Get offset the block beneath the sign offsetY = -1; } else { return; @@ -195,21 +203,23 @@ public class BlockLocation extends Location { } @Override - public boolean equals(Object obj) { - if (this == obj) { + public boolean equals(Object object) { + if (this == object) { return true; } - if (obj == null || getClass() != obj.getClass()) { + if (object == null || getClass() != object.getClass()) { return false; } - BlockLocation blockLocation = (BlockLocation) obj; + BlockLocation blockLocation = (BlockLocation) object; World thisWorld = this.getWorld(); World otherWorld = blockLocation.getWorld(); + //Check if the worlds of the two locations match boolean worldsEqual = (thisWorld == null && otherWorld == null) || ((thisWorld != null && otherWorld != null) && thisWorld == otherWorld); + //As this is a block location, only the block coordinates are compared return blockLocation.getBlockX() == this.getBlockX() && blockLocation.getBlockY() == this.getBlockY() && blockLocation.getBlockZ() == this.getBlockZ() && worldsEqual; }