From f5f13ddbe36e3d88ff3ff3caa5696b3ab0a9b2d5 Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Wed, 25 Jul 2018 18:26:05 +1000 Subject: [PATCH] Add anvil command to delete all chunks matching a specified biome --- .../boydti/fawe/command/AnvilCommands.java | 26 ++++++++++++++++++- .../filters/DeleteBiomeFilterSimple.java | 23 ++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 core/src/main/java/com/boydti/fawe/jnbt/anvil/filters/DeleteBiomeFilterSimple.java diff --git a/core/src/main/java/com/boydti/fawe/command/AnvilCommands.java b/core/src/main/java/com/boydti/fawe/command/AnvilCommands.java index f1437efb..ff5ce0ee 100644 --- a/core/src/main/java/com/boydti/fawe/command/AnvilCommands.java +++ b/core/src/main/java/com/boydti/fawe/command/AnvilCommands.java @@ -33,6 +33,8 @@ import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.util.command.binding.Switch; import com.sk89q.worldedit.util.command.parametric.Optional; import com.sk89q.worldedit.world.World; +import com.sk89q.worldedit.world.biome.BaseBiome; + import java.io.IOException; import java.io.RandomAccessFile; import java.util.*; @@ -285,6 +287,17 @@ public class AnvilCommands { if (result != null) player.print(BBC.getPrefix() + BBC.VISITOR_BLOCK.format(result.getTotal())); } + @Command( + aliases = {"deletebiomechunks", }, + desc = "Delete chunks matching a specific biome" + ) + @CommandPermissions("worldedit.anvil.trimallair") + public void deleteBiome(Player player, String folder, BaseBiome biome, @Switch('u') boolean unsafe) { + DeleteBiomeFilterSimple filter = new DeleteBiomeFilterSimple(biome); + DeleteBiomeFilterSimple result = runWithWorld(player, folder, filter, true, unsafe); + if (result != null) player.print(BBC.getPrefix() + BBC.VISITOR_BLOCK.format(result.getTotal())); + } + @Command( aliases = {"trimallair", }, desc = "Trim all air in the world" @@ -299,7 +312,7 @@ public class AnvilCommands { @Command( aliases = {"debugfixair", }, - desc = "debug" + desc = "debug - do not use" ) @CommandPermissions("worldedit.anvil.debugfixair") public void debugfixair(Player player, String folder) throws WorldEditException { @@ -308,6 +321,17 @@ public class AnvilCommands { if (result != null) player.print(BBC.getPrefix() + BBC.VISITOR_BLOCK.format(result.getTotal())); } + @Command( + aliases = {"debugfixroads", }, + desc = "debug - do not use" + ) + @CommandPermissions("worldedit.anvil.debugfixroads") + public void debugfixroads(Player player, String folder) throws WorldEditException { + DebugFixP2Roads filter = new DebugFixP2Roads(); + DebugFixP2Roads result = runWithWorld(player, folder, filter, true, true); + if (result != null) player.print(BBC.getPrefix() + BBC.VISITOR_BLOCK.format(result.getTotal())); + } + @Command( aliases = {"replaceallpattern", "reap", "repallpat"}, usage = " [from-block] ", diff --git a/core/src/main/java/com/boydti/fawe/jnbt/anvil/filters/DeleteBiomeFilterSimple.java b/core/src/main/java/com/boydti/fawe/jnbt/anvil/filters/DeleteBiomeFilterSimple.java new file mode 100644 index 00000000..3cb7fb2d --- /dev/null +++ b/core/src/main/java/com/boydti/fawe/jnbt/anvil/filters/DeleteBiomeFilterSimple.java @@ -0,0 +1,23 @@ +package com.boydti.fawe.jnbt.anvil.filters; + +import com.boydti.fawe.jnbt.anvil.MCAChunk; +import com.boydti.fawe.jnbt.anvil.MCAFilterCounter; +import com.boydti.fawe.object.number.MutableLong; +import com.sk89q.worldedit.world.biome.BaseBiome; + +public class DeleteBiomeFilterSimple extends MCAFilterCounter { + private final int id; + + public DeleteBiomeFilterSimple(BaseBiome biome) { + this.id = biome.getId(); + } + + @Override + public MCAChunk applyChunk(MCAChunk chunk, MutableLong cache) { + if ((chunk.biomes[0] & 0xFF) == id) { + chunk.setDeleted(true); + cache.add(Character.MAX_VALUE); + } + return null; + } +}