From e48765bafb1e67b56347762475203250c59b51c8 Mon Sep 17 00:00:00 2001 From: feildmaster Date: Sat, 15 Dec 2012 23:25:19 -0600 Subject: Fix MaterialData directions being incorrect. Fixes BUKKIT-3160 Prior to 49690f9, BlockFaces were mostly correct in their respective MaterialData classes. However, a lot of things were not updated since implementation and broke without being addressed. This fixes any discrepancies with Block data. --- src/main/java/org/bukkit/material/CocoaPlant.java | 9 ++-- src/main/java/org/bukkit/material/Command.java | 1 - src/main/java/org/bukkit/material/Door.java | 23 +++++++++- src/main/java/org/bukkit/material/Rails.java | 16 +++---- src/main/java/org/bukkit/material/Sign.java | 48 +++++++++---------- src/main/java/org/bukkit/material/Skull.java | 25 ++++++---- src/main/java/org/bukkit/material/Stairs.java | 18 ++++---- src/main/java/org/bukkit/material/Torch.java | 3 +- src/main/java/org/bukkit/material/Vine.java | 56 +++++++++++------------ 9 files changed, 113 insertions(+), 86 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/bukkit/material/CocoaPlant.java b/src/main/java/org/bukkit/material/CocoaPlant.java index 9a5413ea..47fc071f 100644 --- a/src/main/java/org/bukkit/material/CocoaPlant.java +++ b/src/main/java/org/bukkit/material/CocoaPlant.java @@ -6,7 +6,7 @@ import org.bukkit.block.BlockFace; /** * Represents the cocoa plant */ -public class CocoaPlant extends MaterialData implements Directional { +public class CocoaPlant extends MaterialData implements Directional, Attachable { public enum CocoaPlantSize { SMALL, @@ -71,9 +71,14 @@ public class CocoaPlant extends MaterialData implements Directional { setData((byte) dat); } + public BlockFace getAttachedFace() { + return getFacing().getOppositeFace(); + } + public void setFacingDirection(BlockFace face) { int dat = getData() & 0xC; switch (face) { + default: case SOUTH: break; case WEST: @@ -85,8 +90,6 @@ public class CocoaPlant extends MaterialData implements Directional { case EAST: dat |= 0x3; break; - default: - break; } setData((byte) dat); } diff --git a/src/main/java/org/bukkit/material/Command.java b/src/main/java/org/bukkit/material/Command.java index 01d0ac7f..1537ded4 100644 --- a/src/main/java/org/bukkit/material/Command.java +++ b/src/main/java/org/bukkit/material/Command.java @@ -1,6 +1,5 @@ package org.bukkit.material; -import org.bukkit.block.BlockFace; import org.bukkit.Material; /** diff --git a/src/main/java/org/bukkit/material/Door.java b/src/main/java/org/bukkit/material/Door.java index 732f1bd3..dcf2feac 100644 --- a/src/main/java/org/bukkit/material/Door.java +++ b/src/main/java/org/bukkit/material/Door.java @@ -5,7 +5,10 @@ import org.bukkit.block.BlockFace; /** * Represents a door. + * + * @deprecated No longer functions. Do not use. */ +@Deprecated public class Door extends MaterialData implements Directional, Openable { public Door() { super(Material.WOODEN_DOOR); @@ -27,10 +30,18 @@ public class Door extends MaterialData implements Directional, Openable { super(type, data); } + /** + * @deprecated Does not work (correctly) anymore + */ + @Deprecated public boolean isOpen() { return ((getData() & 0x4) == 0x4); } + /** + * @deprecated Does not work (correctly) anymore + */ + @Deprecated public void setOpen(boolean isOpen) { setData((byte) (isOpen ? (getData() | 0x4) : (getData() & ~0x4))); } @@ -46,14 +57,18 @@ public class Door extends MaterialData implements Directional, Openable { * Configure this part of the door to be either the top or the bottom half; * * @param isTopHalf True to make it the top half. + * @deprecated Shouldn't be used anymore */ + @Deprecated public void setTopHalf(boolean isTopHalf) { setData((byte) (isTopHalf ? (getData() | 0x8) : (getData() & ~0x8))); } /** - * @return the location of the hinges + * @return BlockFace.SELF + * @deprecated Does not work (correctly) anymore */ + @Deprecated public BlockFace getHingeCorner() { byte d = getData(); @@ -70,14 +85,16 @@ public class Door extends MaterialData implements Directional, Openable { @Override public String toString() { - return (isTopHalf() ? "TOP" : "BOTTOM") + " half of " + (isOpen() ? "an OPEN " : "a CLOSED ") + super.toString() + " with hinges " + getHingeCorner(); + return (isTopHalf() ? "TOP" : "BOTTOM") + " half of " + super.toString(); } /** * Set the direction that this door should is facing. * * @param face the direction + * @deprecated Does not work (correctly) anymore */ + @Deprecated public void setFacingDirection(BlockFace face) { byte data = (byte) (getData() & 0x12); switch (face) { @@ -100,7 +117,9 @@ public class Door extends MaterialData implements Directional, Openable { * Get the direction that this door is facing. * * @return the direction + * @deprecated Does not work (correctly) anymore */ + @Deprecated public BlockFace getFacing() { byte data = (byte) (getData() & 0x3); switch (data) { diff --git a/src/main/java/org/bukkit/material/Rails.java b/src/main/java/org/bukkit/material/Rails.java index 84d2f1f1..ab18888e 100644 --- a/src/main/java/org/bukkit/material/Rails.java +++ b/src/main/java/org/bukkit/material/Rails.java @@ -77,16 +77,16 @@ public class Rails extends MaterialData { return BlockFace.SOUTH; case 0x6: - return BlockFace.NORTH_EAST; + return BlockFace.NORTH_WEST; case 0x7: - return BlockFace.SOUTH_EAST; + return BlockFace.NORTH_EAST; case 0x8: - return BlockFace.SOUTH_WEST; + return BlockFace.SOUTH_EAST; case 0x9: - return BlockFace.NORTH_WEST; + return BlockFace.SOUTH_WEST; } } @@ -132,19 +132,19 @@ public class Rails extends MaterialData { setData((byte) (isOnSlope ? 0x5 : 0x0)); break; - case NORTH_EAST: + case NORTH_WEST: setData((byte) 0x6); break; - case SOUTH_EAST: + case NORTH_EAST: setData((byte) 0x7); break; - case SOUTH_WEST: + case SOUTH_EAST: setData((byte) 0x8); break; - case NORTH_WEST: + case SOUTH_WEST: setData((byte) 0x9); break; } diff --git a/src/main/java/org/bukkit/material/Sign.java b/src/main/java/org/bukkit/material/Sign.java index a83b7cb0..e2333723 100644 --- a/src/main/java/org/bukkit/material/Sign.java +++ b/src/main/java/org/bukkit/material/Sign.java @@ -80,49 +80,49 @@ public class Sign extends MaterialData implements Attachable { return BlockFace.SOUTH; case 0x1: - return BlockFace.WEST_NORTH_WEST; + return BlockFace.SOUTH_SOUTH_WEST; case 0x2: - return BlockFace.NORTH_WEST; + return BlockFace.SOUTH_WEST; case 0x3: - return BlockFace.NORTH_NORTH_WEST; + return BlockFace.WEST_SOUTH_WEST; case 0x4: return BlockFace.WEST; case 0x5: - return BlockFace.NORTH_NORTH_EAST; + return BlockFace.WEST_NORTH_WEST; case 0x6: - return BlockFace.NORTH_EAST; + return BlockFace.NORTH_WEST; case 0x7: - return BlockFace.EAST_NORTH_EAST; + return BlockFace.NORTH_NORTH_WEST; case 0x8: return BlockFace.NORTH; case 0x9: - return BlockFace.EAST_SOUTH_EAST; + return BlockFace.NORTH_NORTH_EAST; case 0xA: - return BlockFace.SOUTH_EAST; + return BlockFace.NORTH_EAST; case 0xB: - return BlockFace.SOUTH_SOUTH_EAST; + return BlockFace.EAST_NORTH_EAST; case 0xC: return BlockFace.EAST; case 0xD: - return BlockFace.SOUTH_SOUTH_WEST; + return BlockFace.EAST_SOUTH_EAST; case 0xE: - return BlockFace.SOUTH_WEST; + return BlockFace.SOUTH_EAST; case 0xF: - return BlockFace.WEST_SOUTH_WEST; + return BlockFace.SOUTH_SOUTH_EAST; } return null; @@ -158,15 +158,15 @@ public class Sign extends MaterialData implements Attachable { data = 0x0; break; - case WEST_NORTH_WEST: + case SOUTH_SOUTH_WEST: data = 0x1; break; - case NORTH_WEST: + case SOUTH_WEST: data = 0x2; break; - case NORTH_NORTH_WEST: + case WEST_SOUTH_WEST: data = 0x3; break; @@ -174,15 +174,15 @@ public class Sign extends MaterialData implements Attachable { data = 0x4; break; - case NORTH_NORTH_EAST: + case WEST_NORTH_WEST: data = 0x5; break; - case NORTH_EAST: + case NORTH_WEST: data = 0x6; break; - case EAST_NORTH_EAST: + case NORTH_NORTH_WEST: data = 0x7; break; @@ -190,15 +190,15 @@ public class Sign extends MaterialData implements Attachable { data = 0x8; break; - case EAST_SOUTH_EAST: + case NORTH_NORTH_EAST: data = 0x9; break; - case SOUTH_EAST: + case NORTH_EAST: data = 0xA; break; - case SOUTH_SOUTH_EAST: + case EAST_NORTH_EAST: data = 0xB; break; @@ -206,15 +206,15 @@ public class Sign extends MaterialData implements Attachable { data = 0xC; break; - case SOUTH_SOUTH_WEST: + case EAST_SOUTH_EAST: data = 0xD; break; - case WEST_SOUTH_WEST: + case SOUTH_SOUTH_EAST: data = 0xF; break; - case SOUTH_WEST: + case SOUTH_EAST: default: data = 0xE; } diff --git a/src/main/java/org/bukkit/material/Skull.java b/src/main/java/org/bukkit/material/Skull.java index bd2bbf31..e93baaf9 100644 --- a/src/main/java/org/bukkit/material/Skull.java +++ b/src/main/java/org/bukkit/material/Skull.java @@ -41,42 +41,49 @@ public class Skull extends MaterialData implements Directional { int data; switch (face) { - case NORTH: + case SELF: + default: data = 0x1; break; - case EAST: + case NORTH: data = 0x2; break; + case EAST: + data = 0x4; + break; + case SOUTH: data = 0x3; break; case WEST: - default: - data = 0x4; + data = 0x5; } - setData((byte) (data & 3)); + setData((byte) data); } public BlockFace getFacing() { - int data = getData() & 7; + int data = getData(); switch (data) { case 0x1: - return BlockFace.NORTH; + default: + return BlockFace.SELF; case 0x2: - return BlockFace.EAST; + return BlockFace.NORTH; case 0x3: return BlockFace.SOUTH; case 0x4: - default: return BlockFace.EAST; + + case 0x5: + return BlockFace.WEST; } } diff --git a/src/main/java/org/bukkit/material/Stairs.java b/src/main/java/org/bukkit/material/Stairs.java index 3eb1418c..56a6da85 100644 --- a/src/main/java/org/bukkit/material/Stairs.java +++ b/src/main/java/org/bukkit/material/Stairs.java @@ -60,21 +60,21 @@ public class Stairs extends MaterialData implements Directional { byte data; switch (face) { - case WEST: - default: - data = 0x0; + case NORTH: + data = 0x3; break; - case EAST: - data = 0x1; + case SOUTH: + data = 0x2; break; - case NORTH: - data = 0x2; + case EAST: + default: + data = 0x0; break; - case SOUTH: - data = 0x3; + case WEST: + data = 0x1; break; } diff --git a/src/main/java/org/bukkit/material/Torch.java b/src/main/java/org/bukkit/material/Torch.java index 90c18747..e18feae6 100644 --- a/src/main/java/org/bukkit/material/Torch.java +++ b/src/main/java/org/bukkit/material/Torch.java @@ -49,10 +49,9 @@ public class Torch extends SimpleAttachableMaterialData { return BlockFace.SOUTH; case 0x5: + default: return BlockFace.DOWN; } - - return null; } public void setFacingDirection(BlockFace face) { diff --git a/src/main/java/org/bukkit/material/Vine.java b/src/main/java/org/bukkit/material/Vine.java index 722cbc98..e00ea3c9 100644 --- a/src/main/java/org/bukkit/material/Vine.java +++ b/src/main/java/org/bukkit/material/Vine.java @@ -39,19 +39,19 @@ public class Vine extends MaterialData { byte data = 0; if (faces.contains(BlockFace.WEST)) { - data |= VINE_NORTH; + data |= VINE_WEST; } if (faces.contains(BlockFace.NORTH)) { - data |= VINE_EAST; + data |= VINE_NORTH; } if (faces.contains(BlockFace.SOUTH)) { - data |= VINE_WEST; + data |= VINE_SOUTH; } if (faces.contains(BlockFace.EAST)) { - data |= VINE_SOUTH; + data |= VINE_EAST; } setData(data); @@ -67,21 +67,21 @@ public class Vine extends MaterialData { public boolean isOnFace(BlockFace face) { switch (face) { case WEST: - return (getData() & VINE_NORTH) > 0; + return (getData() & VINE_WEST) == VINE_WEST; case NORTH: - return (getData() & VINE_EAST) > 0; + return (getData() & VINE_NORTH) == VINE_NORTH; case SOUTH: - return (getData() & VINE_WEST) > 0; + return (getData() & VINE_SOUTH) == VINE_SOUTH; case EAST: - return (getData() & VINE_SOUTH) > 0; + return (getData() & VINE_EAST) == VINE_EAST; case NORTH_EAST: - return isOnFace(BlockFace.WEST) && isOnFace(BlockFace.NORTH); + return isOnFace(BlockFace.EAST) && isOnFace(BlockFace.NORTH); case NORTH_WEST: - return isOnFace(BlockFace.WEST) && isOnFace(BlockFace.SOUTH); + return isOnFace(BlockFace.WEST) && isOnFace(BlockFace.NORTH); case SOUTH_EAST: - return isOnFace(BlockFace.EAST) && isOnFace(BlockFace.NORTH); - case SOUTH_WEST: return isOnFace(BlockFace.EAST) && isOnFace(BlockFace.SOUTH); + case SOUTH_WEST: + return isOnFace(BlockFace.WEST) && isOnFace(BlockFace.SOUTH); case UP: // It's impossible to be accurate with this since it's contextual return true; default: @@ -97,30 +97,30 @@ public class Vine extends MaterialData { public void putOnFace(BlockFace face) { switch(face) { case WEST: - setData((byte) (getData() | VINE_NORTH)); + setData((byte) (getData() | VINE_WEST)); break; case NORTH: - setData((byte) (getData() | VINE_EAST)); + setData((byte) (getData() | VINE_NORTH)); break; case SOUTH: - setData((byte) (getData() | VINE_WEST)); + setData((byte) (getData() | VINE_SOUTH)); break; case EAST: - setData((byte) (getData() | VINE_SOUTH)); + setData((byte) (getData() | VINE_EAST)); break; - case NORTH_EAST: + case NORTH_WEST: putOnFace(BlockFace.WEST); putOnFace(BlockFace.NORTH); break; - case NORTH_WEST: + case SOUTH_WEST: putOnFace(BlockFace.WEST); putOnFace(BlockFace.SOUTH); break; - case SOUTH_EAST: + case NORTH_EAST: putOnFace(BlockFace.EAST); putOnFace(BlockFace.NORTH); break; - case SOUTH_WEST: + case SOUTH_EAST: putOnFace(BlockFace.EAST); putOnFace(BlockFace.SOUTH); break; @@ -139,30 +139,30 @@ public class Vine extends MaterialData { public void removeFromFace(BlockFace face) { switch(face) { case WEST: - setData((byte) (getData() &~ VINE_NORTH)); + setData((byte) (getData() & ~VINE_WEST)); break; case NORTH: - setData((byte) (getData() &~ VINE_EAST)); + setData((byte) (getData() & ~VINE_NORTH)); break; case SOUTH: - setData((byte) (getData() &~ VINE_WEST)); + setData((byte) (getData() & ~VINE_SOUTH)); break; case EAST: - setData((byte) (getData() &~ VINE_SOUTH)); + setData((byte) (getData() & ~VINE_EAST)); break; - case NORTH_EAST: + case NORTH_WEST: removeFromFace(BlockFace.WEST); removeFromFace(BlockFace.NORTH); break; - case NORTH_WEST: + case SOUTH_WEST: removeFromFace(BlockFace.WEST); removeFromFace(BlockFace.SOUTH); break; - case SOUTH_EAST: + case NORTH_EAST: removeFromFace(BlockFace.EAST); removeFromFace(BlockFace.NORTH); break; - case SOUTH_WEST: + case SOUTH_EAST: removeFromFace(BlockFace.EAST); removeFromFace(BlockFace.SOUTH); break; -- cgit v1.2.3