Improve rollback ability by accepting similar blocks to the expected one

For example grass_block instead of dirt
This commit is contained in:
Brokkonaut
2020-01-24 05:06:48 +01:00
parent b9513df20e
commit 6dec1b6c37
2 changed files with 29 additions and 1 deletions

View File

@ -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()) {

View File

@ -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;
}
}