diff --git a/pom.xml b/pom.xml
index 0e620a1..53666b9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,7 +42,7 @@
org.bukkit
bukkit
- 1.6.1-R0.1-SNAPSHOT
+ 1.7.2-R0.1-SNAPSHOT
${project.groupId}
diff --git a/src/main/java/de/diddiz/util/BukkitUtils.java b/src/main/java/de/diddiz/util/BukkitUtils.java
index c930cf4..7c3a717 100644
--- a/src/main/java/de/diddiz/util/BukkitUtils.java
+++ b/src/main/java/de/diddiz/util/BukkitUtils.java
@@ -60,7 +60,7 @@ public class BukkitUtils
relativeBreakable.add(Material.COCOA);
// Blocks that break when they are on top of a block
- relativeTopBreakable = new HashSet(32);
+ relativeTopBreakable = new HashSet(33);
relativeTopBreakable.add(Material.SAPLING);
relativeTopBreakable.add(Material.LONG_GRASS);
relativeTopBreakable.add(Material.DEAD_BUSH);
@@ -91,8 +91,9 @@ public class BukkitUtils
relativeTopBreakable.add(Material.REDSTONE_COMPARATOR_ON);
relativeTopBreakable.add(Material.REDSTONE_COMPARATOR_OFF);
relativeTopBreakable.add(Material.WOODEN_DOOR);
- relativeTopBreakable.add(Material.IRON_DOOR);
+ relativeTopBreakable.add(Material.IRON_DOOR_BLOCK);
relativeTopBreakable.add(Material.CARPET);
+ relativeTopBreakable.add(Material.DOUBLE_PLANT);
// Blocks that fall
relativeTopFallables = new HashSet(4);
@@ -179,6 +180,19 @@ public class BukkitUtils
return blocks;
}
+ public static boolean isTop(Material mat, byte data) {
+
+ switch (mat) {
+ case DOUBLE_PLANT:
+ return data > 5;
+ case IRON_DOOR_BLOCK:
+ case WOODEN_DOOR:
+ return data == 8 || data == 9;
+ default:
+ return false;
+ }
+ }
+
public static int getInventoryHolderType(InventoryHolder holder) {
if (holder instanceof DoubleChest) {
return ((DoubleChest)holder).getLocation().getBlock().getTypeId();
diff --git a/src/main/java/de/diddiz/util/LoggingUtil.java b/src/main/java/de/diddiz/util/LoggingUtil.java
index 5b905bb..be6c0c3 100644
--- a/src/main/java/de/diddiz/util/LoggingUtil.java
+++ b/src/main/java/de/diddiz/util/LoggingUtil.java
@@ -73,18 +73,30 @@ public class LoggingUtil {
if (BukkitUtils.getRelativeTopBreakabls().contains(checkBlock.getType())) {
if (wcfg.isLogging(Logging.SIGNTEXT) && checkBlock.getType() == Material.SIGN_POST) {
consumer.queueSignBreak(playerName, (Sign) checkBlock.getState());
- } else if (checkBlock.getType() == Material.IRON_DOOR || checkBlock.getType() == Material.WOOD_DOOR) {
+ } else if (checkBlock.getType() == Material.IRON_DOOR_BLOCK || checkBlock.getType() == Material.WOODEN_DOOR) {
Block doorBlock = checkBlock;
// If the doorBlock is the top half a door the player simply punched a door
// this will be handled later.
- if (doorBlock.getData() != 8 && doorBlock.getData() != 9) {
+ if (!BukkitUtils.isTop(doorBlock.getType(), doorBlock.getData())) {
doorBlock = doorBlock.getRelative(BlockFace.UP);
// Fall back check just in case the top half wasn't a door
- if (doorBlock.getType() == Material.IRON_DOOR || doorBlock.getType() == Material.WOOD_DOOR) {
+ if (doorBlock.getType() == Material.IRON_DOOR_BLOCK || doorBlock.getType() == Material.WOODEN_DOOR) {
consumer.queueBlockBreak(playerName, doorBlock.getState());
}
consumer.queueBlockBreak(playerName, checkBlock.getState());
}
+ } else if (checkBlock.getType() == Material.DOUBLE_PLANT) {
+ Block plantBlock = checkBlock;
+ // If the plantBlock is the top half of a double plant the player simply
+ // punched the plant this will be handled later.
+ if (!BukkitUtils.isTop(plantBlock.getType(), plantBlock.getData())) {
+ plantBlock = plantBlock.getRelative(BlockFace.UP);
+ // Fall back check just in case the top half wasn't a plant
+ if (plantBlock.getType() == Material.DOUBLE_PLANT) {
+ consumer.queueBlockBreak(playerName, plantBlock.getState());
+ }
+ consumer.queueBlockBreak(playerName, checkBlock.getState());
+ }
} else {
consumer.queueBlockBreak(playerName, checkBlock.getState());
}
@@ -156,19 +168,32 @@ public class LoggingUtil {
}
// Special door check
- if (origin.getType() == Material.IRON_DOOR || origin.getType() == Material.WOOD_DOOR) {
+ if (origin.getType() == Material.IRON_DOOR_BLOCK || origin.getType() == Material.WOODEN_DOOR) {
Block doorBlock = origin;
// Up or down?
- if (origin.getData() != 8 && origin.getData() != 9) {
+ if (!BukkitUtils.isTop(doorBlock.getType(), doorBlock.getData())) {
doorBlock = doorBlock.getRelative(BlockFace.UP);
} else {
doorBlock = doorBlock.getRelative(BlockFace.DOWN);
}
- if (doorBlock.getType() == Material.IRON_DOOR || doorBlock.getType() == Material.WOOD_DOOR) {
+ if (doorBlock.getType() == Material.IRON_DOOR_BLOCK || doorBlock.getType() == Material.WOODEN_DOOR) {
consumer.queueBlockBreak(playerName, doorBlock.getState());
}
+ } else if (origin.getType() == Material.DOUBLE_PLANT) { // Special double plant check
+ Block plantBlock = origin;
+
+ // Up or down?
+ if (!BukkitUtils.isTop(origin.getType(), origin.getData())) {
+ plantBlock = plantBlock.getRelative(BlockFace.UP);
+ } else {
+ plantBlock = plantBlock.getRelative(BlockFace.DOWN);
+ }
+
+ if (plantBlock.getType() == Material.DOUBLE_PLANT) {
+ consumer.queueBlockBreak(playerName, plantBlock.getState());
+ }
}
// Do this down here so that the block is added after blocks sitting on it