[BREAKING] Update BlockFace directions. Fixes BUKKIT-1567, BUKKIT-3069

If you use BlockFace in any way, to compensate the directionals being incorrect, you can still have backwards compatibility if you add in the handling in your plugin:
boolean legacyBlockFace = BlockFace.NORTH().getModX() == -1; (and then handle it accordingly)

If you didn't special case your directions to fix what's being fixed here... Hurray! Your plugin should now work.

By: feildmaster <admin@feildmaster.com>
This commit is contained in:
Bukkit/Spigot
2012-12-01 00:21:22 -06:00
parent 9e0336d03c
commit 711f3f1007
25 changed files with 272 additions and 272 deletions

View File

@@ -14,7 +14,7 @@ public class Vine extends MaterialData {
private static final int VINE_EAST = 0x8;
private static final int VINE_WEST = 0x2;
private static final int VINE_SOUTH = 0x1;
EnumSet<BlockFace> possibleFaces = EnumSet.of(BlockFace.NORTH, BlockFace.EAST, BlockFace.WEST, BlockFace.SOUTH);
EnumSet<BlockFace> possibleFaces = EnumSet.of(BlockFace.WEST, BlockFace.NORTH, BlockFace.SOUTH, BlockFace.EAST);
public Vine() {
super(Material.VINE);
@@ -38,19 +38,19 @@ public class Vine extends MaterialData {
byte data = 0;
if (faces.contains(BlockFace.NORTH)) {
if (faces.contains(BlockFace.WEST)) {
data |= VINE_NORTH;
}
if (faces.contains(BlockFace.EAST)) {
if (faces.contains(BlockFace.NORTH)) {
data |= VINE_EAST;
}
if (faces.contains(BlockFace.WEST)) {
if (faces.contains(BlockFace.SOUTH)) {
data |= VINE_WEST;
}
if (faces.contains(BlockFace.SOUTH)) {
if (faces.contains(BlockFace.EAST)) {
data |= VINE_SOUTH;
}
@@ -66,22 +66,22 @@ public class Vine extends MaterialData {
*/
public boolean isOnFace(BlockFace face) {
switch (face) {
case NORTH:
return (getData() & VINE_NORTH) > 0;
case EAST:
return (getData() & VINE_EAST) > 0;
case WEST:
return (getData() & VINE_WEST) > 0;
return (getData() & VINE_NORTH) > 0;
case NORTH:
return (getData() & VINE_EAST) > 0;
case SOUTH:
return (getData() & VINE_WEST) > 0;
case EAST:
return (getData() & VINE_SOUTH) > 0;
case NORTH_EAST:
return isOnFace(BlockFace.NORTH) && isOnFace(BlockFace.EAST);
return isOnFace(BlockFace.WEST) && isOnFace(BlockFace.NORTH);
case NORTH_WEST:
return isOnFace(BlockFace.NORTH) && isOnFace(BlockFace.WEST);
return isOnFace(BlockFace.WEST) && isOnFace(BlockFace.SOUTH);
case SOUTH_EAST:
return isOnFace(BlockFace.SOUTH) && isOnFace(BlockFace.EAST);
return isOnFace(BlockFace.EAST) && isOnFace(BlockFace.NORTH);
case SOUTH_WEST:
return isOnFace(BlockFace.SOUTH) && isOnFace(BlockFace.WEST);
return isOnFace(BlockFace.EAST) && isOnFace(BlockFace.SOUTH);
case UP: // It's impossible to be accurate with this since it's contextual
return true;
default:
@@ -96,33 +96,33 @@ public class Vine extends MaterialData {
*/
public void putOnFace(BlockFace face) {
switch(face) {
case NORTH:
case WEST:
setData((byte) (getData() | VINE_NORTH));
break;
case EAST:
case NORTH:
setData((byte) (getData() | VINE_EAST));
break;
case WEST:
case SOUTH:
setData((byte) (getData() | VINE_WEST));
break;
case SOUTH:
case EAST:
setData((byte) (getData() | VINE_SOUTH));
break;
case NORTH_EAST:
putOnFace(BlockFace.WEST);
putOnFace(BlockFace.NORTH);
putOnFace(BlockFace.EAST);
break;
case NORTH_WEST:
putOnFace(BlockFace.NORTH);
putOnFace(BlockFace.WEST);
putOnFace(BlockFace.SOUTH);
break;
case SOUTH_EAST:
putOnFace(BlockFace.SOUTH);
putOnFace(BlockFace.EAST);
putOnFace(BlockFace.NORTH);
break;
case SOUTH_WEST:
putOnFace(BlockFace.EAST);
putOnFace(BlockFace.SOUTH);
putOnFace(BlockFace.WEST);
break;
case UP:
break;
@@ -138,33 +138,33 @@ public class Vine extends MaterialData {
*/
public void removeFromFace(BlockFace face) {
switch(face) {
case NORTH:
case WEST:
setData((byte) (getData() &~ VINE_NORTH));
break;
case EAST:
case NORTH:
setData((byte) (getData() &~ VINE_EAST));
break;
case WEST:
case SOUTH:
setData((byte) (getData() &~ VINE_WEST));
break;
case SOUTH:
case EAST:
setData((byte) (getData() &~ VINE_SOUTH));
break;
case NORTH_EAST:
removeFromFace(BlockFace.WEST);
removeFromFace(BlockFace.NORTH);
removeFromFace(BlockFace.EAST);
break;
case NORTH_WEST:
removeFromFace(BlockFace.NORTH);
removeFromFace(BlockFace.WEST);
removeFromFace(BlockFace.SOUTH);
break;
case SOUTH_EAST:
removeFromFace(BlockFace.SOUTH);
removeFromFace(BlockFace.EAST);
removeFromFace(BlockFace.NORTH);
break;
case SOUTH_WEST:
removeFromFace(BlockFace.EAST);
removeFromFace(BlockFace.SOUTH);
removeFromFace(BlockFace.WEST);
break;
case UP:
break;