mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2025-04-02 22:53:14 +00:00
115 lines
3.6 KiB
Java
115 lines
3.6 KiB
Java
package com.thevoxelbox.voxelsniper.brush;
|
|
|
|
import com.boydti.fawe.bukkit.wrapper.AsyncBlock;
|
|
import com.boydti.fawe.bukkit.wrapper.AsyncChunk;
|
|
import com.sk89q.worldedit.world.block.BlockTypes;
|
|
import com.thevoxelbox.voxelsniper.Message;
|
|
import com.thevoxelbox.voxelsniper.SnipeData;
|
|
import com.thevoxelbox.voxelsniper.Undo;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.Chunk;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.block.Block;
|
|
|
|
|
|
public class CanyonBrush extends Brush {
|
|
private static final int SHIFT_LEVEL_MIN = 10;
|
|
private static final int SHIFT_LEVEL_MAX = 60;
|
|
private int yLevel = 10;
|
|
|
|
public CanyonBrush() {
|
|
this.setName("Canyon");
|
|
}
|
|
|
|
@SuppressWarnings("deprecation")
|
|
protected final void canyon(final AsyncChunk chunk, final Undo undo) {
|
|
for (int x = 0; x < CHUNK_SIZE; x++) {
|
|
for (int z = 0; z < CHUNK_SIZE; z++) {
|
|
int currentYLevel = this.yLevel;
|
|
|
|
for (int y = 63; y < this.getWorld().getMaxHeight(); y++) {
|
|
final AsyncBlock block = chunk.getBlock(x, y, z);
|
|
final AsyncBlock currentYLevelBlock = chunk.getBlock(x, currentYLevel, z);
|
|
|
|
undo.put(block);
|
|
undo.put(currentYLevelBlock);
|
|
|
|
currentYLevelBlock.setTypeId(block.getTypeId());
|
|
block.setType(Material.AIR);
|
|
|
|
currentYLevel++;
|
|
}
|
|
|
|
final AsyncBlock block = chunk.getBlock(x, 0, z);
|
|
undo.put(block);
|
|
block.setTypeId(BlockTypes.BEDROCK.getInternalId());
|
|
|
|
for (int y = 1; y < SHIFT_LEVEL_MIN; y++) {
|
|
final Block currentBlock = chunk.getBlock(x, y, z);
|
|
undo.put(currentBlock);
|
|
currentBlock.setType(Material.STONE);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void arrow(final SnipeData v) {
|
|
final Undo undo = new Undo();
|
|
|
|
canyon(getTargetBlock().getChunk(), undo);
|
|
|
|
v.owner().storeUndo(undo);
|
|
}
|
|
|
|
@Override
|
|
protected void powder(final SnipeData v) {
|
|
final Undo undo = new Undo();
|
|
|
|
Chunk targetChunk = getTargetBlock().getChunk();
|
|
for (int x = targetChunk.getX() - 1; x <= targetChunk.getX() + 1; x++) {
|
|
for (int z = targetChunk.getX() - 1; z <= targetChunk.getX() + 1; z++) {
|
|
canyon(getWorld().getChunkAt(x, z), undo);
|
|
}
|
|
}
|
|
|
|
v.owner().storeUndo(undo);
|
|
}
|
|
|
|
@Override
|
|
public void info(final Message vm) {
|
|
vm.brushName(this.getName());
|
|
vm.custom(ChatColor.GREEN + "Shift Level set to " + this.yLevel);
|
|
}
|
|
|
|
@Override
|
|
public final void parameters(final String[] par, final SnipeData v) {
|
|
if (par[1].equalsIgnoreCase("info")) {
|
|
v.sendMessage(ChatColor.GREEN + "y[number] to set the Level to which the land will be shifted down");
|
|
}
|
|
if (par[1].startsWith("y")) {
|
|
int _i = Integer.parseInt(par[1].replace("y", ""));
|
|
if (_i < SHIFT_LEVEL_MIN) {
|
|
_i = SHIFT_LEVEL_MIN;
|
|
} else if (_i > SHIFT_LEVEL_MAX) {
|
|
_i = SHIFT_LEVEL_MAX;
|
|
}
|
|
this.yLevel = _i;
|
|
v.sendMessage(ChatColor.GREEN + "Shift Level set to " + this.yLevel);
|
|
}
|
|
}
|
|
|
|
protected final int getYLevel() {
|
|
return yLevel;
|
|
}
|
|
|
|
protected final void setYLevel(int yLevel) {
|
|
this.yLevel = yLevel;
|
|
}
|
|
|
|
@Override
|
|
public String getPermissionNode() {
|
|
return "voxelsniper.brush.canyon";
|
|
}
|
|
}
|