diff --git a/src/main/java/de/diddiz/LogBlock/WorldEditor.java b/src/main/java/de/diddiz/LogBlock/WorldEditor.java index 4530bc2..d562479 100644 --- a/src/main/java/de/diddiz/LogBlock/WorldEditor.java +++ b/src/main/java/de/diddiz/LogBlock/WorldEditor.java @@ -380,7 +380,7 @@ public class WorldEditor implements Runnable { return PerformResult.NO_ACTION; } } - if (!forceReplace && block.getType() != setBlock.getMaterial() && !block.isEmpty() && !replaceAnyway.contains(block.getType())) { + if (!forceReplace && !BukkitUtils.isSimilarForRollback(setBlock.getMaterial(), block.getType()) && !block.isEmpty() && !replaceAnyway.contains(block.getType())) { return PerformResult.NO_ACTION; } if (state instanceof Container && replacedBlock.getMaterial() != block.getType()) { diff --git a/src/main/java/de/diddiz/util/BukkitUtils.java b/src/main/java/de/diddiz/util/BukkitUtils.java index 90c3eab..7bb8b51 100644 --- a/src/main/java/de/diddiz/util/BukkitUtils.java +++ b/src/main/java/de/diddiz/util/BukkitUtils.java @@ -964,4 +964,32 @@ public class BukkitUtils { } return true; } + + public static boolean isSimilarForRollback(Material expected, Material found) { + if (expected == found) { + return true; + } + switch (expected) { + case DIRT: + case MYCELIUM: + case FARMLAND: + case GRASS_BLOCK: + case PODZOL: + case GRASS_PATH: + return found == Material.DIRT || found == Material.MYCELIUM || found == Material.FARMLAND || found == Material.GRASS_BLOCK || found == Material.PODZOL || found == Material.GRASS_PATH; + case BAMBOO: + case BAMBOO_SAPLING: + return found == Material.BAMBOO || found == Material.BAMBOO_SAPLING; + case SPONGE: + case WET_SPONGE: + return found == Material.SPONGE || found == Material.WET_SPONGE; + case MELON_STEM: + case ATTACHED_MELON_STEM: + return found == Material.MELON_STEM || found == Material.ATTACHED_MELON_STEM; + case PUMPKIN_STEM: + case ATTACHED_PUMPKIN_STEM: + return found == Material.PUMPKIN_STEM || found == Material.ATTACHED_PUMPKIN_STEM; + } + return false; + } }