Anvil removelayer debug cmd
This commit is contained in:
parent
c7d959d6dc
commit
d913fe0f00
@ -17,6 +17,7 @@ import com.sk89q.minecraft.util.commands.Command;
|
|||||||
import com.sk89q.minecraft.util.commands.CommandPermissions;
|
import com.sk89q.minecraft.util.commands.CommandPermissions;
|
||||||
import com.sk89q.worldedit.EditSession;
|
import com.sk89q.worldedit.EditSession;
|
||||||
import com.sk89q.worldedit.MutableBlockVector;
|
import com.sk89q.worldedit.MutableBlockVector;
|
||||||
|
import com.sk89q.worldedit.Vector;
|
||||||
import com.sk89q.worldedit.WorldEdit;
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
import com.sk89q.worldedit.WorldEditException;
|
import com.sk89q.worldedit.WorldEditException;
|
||||||
import com.sk89q.worldedit.blocks.BaseBlock;
|
import com.sk89q.worldedit.blocks.BaseBlock;
|
||||||
@ -31,6 +32,7 @@ import com.sk89q.worldedit.util.command.binding.Switch;
|
|||||||
import com.sk89q.worldedit.util.command.parametric.Optional;
|
import com.sk89q.worldedit.util.command.parametric.Optional;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -384,6 +386,55 @@ public class AnvilCommands {
|
|||||||
player.print(BBC.getPrefix() + BBC.VISITOR_BLOCK.format(filter.getTotal()));
|
player.print(BBC.getPrefix() + BBC.VISITOR_BLOCK.format(filter.getTotal()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Command(
|
||||||
|
aliases = {"removelayer"},
|
||||||
|
usage = "<id>",
|
||||||
|
desc = "Replace all blocks in the selection with another"
|
||||||
|
)
|
||||||
|
@CommandPermissions("worldedit.anvil.removelayer")
|
||||||
|
public void removeLayer(Player player, EditSession editSession, @Selection Region selection, int id) throws WorldEditException {
|
||||||
|
Vector min = selection.getMinimumPoint();
|
||||||
|
Vector max = selection.getMaximumPoint();
|
||||||
|
int minY = min.getBlockY();
|
||||||
|
int maxY = max.getBlockY();
|
||||||
|
final int startLayer = minY >> 4;
|
||||||
|
final int endLayer = maxY >> 4;
|
||||||
|
MCAFilterCounter filter = runWithSelection(player, editSession, selection, new MCAFilterCounter() {
|
||||||
|
@Override
|
||||||
|
public MCAChunk applyChunk(MCAChunk chunk, MutableLong cache) {
|
||||||
|
for (int layer = startLayer; layer <= endLayer; layer++) {
|
||||||
|
byte[] ids = chunk.ids[layer];
|
||||||
|
if (ids == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
int startY = Math.max(minY, layer << 4) & 15;
|
||||||
|
int endY = Math.min(maxY, 15 + (layer << 4)) & 15;
|
||||||
|
System.out.println(startY + " | " + endY);
|
||||||
|
for (int y = startY; y <= endY; y++) {
|
||||||
|
int indexStart = y << 8;
|
||||||
|
int indexEnd = indexStart + 255;
|
||||||
|
for (int index = indexStart; index <= indexEnd; index++) {
|
||||||
|
if (ids[index] != id) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int y = startY; y <= endY; y++) {
|
||||||
|
int indexStart = y << 8;
|
||||||
|
int indexEnd = indexStart + 255;
|
||||||
|
Arrays.fill(ids, indexStart, indexEnd + 1, (byte) 0);
|
||||||
|
}
|
||||||
|
chunk.setModified();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (filter != null) {
|
||||||
|
player.print(BBC.getPrefix() + BBC.VISITOR_BLOCK.format(filter.getTotal()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// @Command(
|
// @Command(
|
||||||
// aliases = {"copychunks"},
|
// aliases = {"copychunks"},
|
||||||
|
Loading…
Reference in New Issue
Block a user