mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2025-07-06 04:46:40 +00:00
Added polygonal regions.
This commit is contained in:
@ -70,7 +70,7 @@ public class ChunkCommands {
|
||||
LocalSession session, LocalPlayer player, EditSession editSession)
|
||||
throws WorldEditException {
|
||||
|
||||
Set<Vector2D> chunks = session.getRegion().getChunks();
|
||||
Set<Vector2D> chunks = session.getSelection(player.getWorld()).getChunks();
|
||||
|
||||
for (Vector2D chunk : chunks) {
|
||||
player.print(NestedFileChunkStore.getFilename(chunk));
|
||||
@ -91,7 +91,7 @@ public class ChunkCommands {
|
||||
|
||||
LocalConfiguration config = we.getConfiguration();
|
||||
|
||||
Set<Vector2D> chunks = session.getRegion().getChunks();
|
||||
Set<Vector2D> chunks = session.getSelection(player.getWorld()).getChunks();
|
||||
FileOutputStream out = null;
|
||||
|
||||
if (config.shellSaveType == null) {
|
||||
|
@ -47,7 +47,7 @@ public class ClipboardCommands {
|
||||
LocalSession session, LocalPlayer player, EditSession editSession)
|
||||
throws WorldEditException {
|
||||
|
||||
Region region = session.getRegion();
|
||||
Region region = session.getSelection(player.getWorld());
|
||||
Vector min = region.getMinimumPoint();
|
||||
Vector max = region.getMaximumPoint();
|
||||
Vector pos = player.getBlockIn();
|
||||
@ -79,7 +79,7 @@ public class ClipboardCommands {
|
||||
block = we.getBlock(player, args.getString(0));
|
||||
}
|
||||
|
||||
Region region = session.getRegion();
|
||||
Region region = session.getSelection(player.getWorld());
|
||||
Vector min = region.getMinimumPoint();
|
||||
Vector max = region.getMaximumPoint();
|
||||
Vector pos = player.getBlockIn();
|
||||
@ -90,7 +90,7 @@ public class ClipboardCommands {
|
||||
clipboard.copy(editSession);
|
||||
session.setClipboard(clipboard);
|
||||
|
||||
editSession.setBlocks(session.getRegion(), block);
|
||||
editSession.setBlocks(session.getSelection(player.getWorld()), block);
|
||||
player.print("Block(s) cut.");
|
||||
}
|
||||
|
||||
|
@ -53,10 +53,10 @@ public class RegionCommands {
|
||||
int affected;
|
||||
|
||||
if (pattern instanceof SingleBlockPattern) {
|
||||
affected = editSession.setBlocks(session.getRegion(),
|
||||
affected = editSession.setBlocks(session.getSelection(player.getWorld()),
|
||||
((SingleBlockPattern)pattern).getBlock());
|
||||
} else {
|
||||
affected = editSession.setBlocks(session.getRegion(), pattern);
|
||||
affected = editSession.setBlocks(session.getSelection(player.getWorld()), pattern);
|
||||
}
|
||||
|
||||
player.print(affected + " block(s) have been changed.");
|
||||
@ -86,10 +86,10 @@ public class RegionCommands {
|
||||
|
||||
int affected = 0;
|
||||
if (to instanceof SingleBlockPattern) {
|
||||
affected = editSession.replaceBlocks(session.getRegion(), from,
|
||||
affected = editSession.replaceBlocks(session.getSelection(player.getWorld()), from,
|
||||
((SingleBlockPattern)to).getBlock());
|
||||
} else {
|
||||
affected = editSession.replaceBlocks(session.getRegion(), from, to);
|
||||
affected = editSession.replaceBlocks(session.getSelection(player.getWorld()), from, to);
|
||||
}
|
||||
|
||||
player.print(affected + " block(s) have been replaced.");
|
||||
@ -109,7 +109,7 @@ public class RegionCommands {
|
||||
|
||||
Pattern pat = we.getBlockPattern(player, args.getString(0));
|
||||
|
||||
Region region = session.getRegion();
|
||||
Region region = session.getSelection(player.getWorld());
|
||||
int affected = 0;
|
||||
if (pat instanceof SingleBlockPattern) {
|
||||
affected = editSession.overlayCuboidBlocks(region,
|
||||
@ -133,7 +133,7 @@ public class RegionCommands {
|
||||
throws WorldEditException {
|
||||
|
||||
BaseBlock block = we.getBlock(player, args.getString(0));
|
||||
int affected = editSession.makeCuboidWalls(session.getRegion(), block);
|
||||
int affected = editSession.makeCuboidWalls(session.getSelection(player.getWorld()), block);
|
||||
|
||||
player.print(affected + " block(s) have been changed.");
|
||||
}
|
||||
@ -151,7 +151,7 @@ public class RegionCommands {
|
||||
throws WorldEditException {
|
||||
|
||||
BaseBlock block = we.getBlock(player, args.getString(0));
|
||||
int affected = editSession.makeCuboidFaces(session.getRegion(), block);
|
||||
int affected = editSession.makeCuboidFaces(session.getSelection(player.getWorld()), block);
|
||||
player.print(affected + " block(s) have been changed.");
|
||||
}
|
||||
|
||||
@ -172,7 +172,7 @@ public class RegionCommands {
|
||||
iterations = args.getInteger(0);
|
||||
}
|
||||
|
||||
HeightMap heightMap = new HeightMap(editSession, session.getRegion());
|
||||
HeightMap heightMap = new HeightMap(editSession, session.getSelection(player.getWorld()));
|
||||
HeightMapFilter filter = new HeightMapFilter(new GaussianKernel(5, 1.0));
|
||||
int affected = heightMap.applyFilter(filter, iterations);
|
||||
player.print("Terrain's height map smoothed. " + affected + " block(s) changed.");
|
||||
@ -203,7 +203,7 @@ public class RegionCommands {
|
||||
replace = new BaseBlock(0);
|
||||
}
|
||||
|
||||
int affected = editSession.moveCuboidRegion(session.getRegion(),
|
||||
int affected = editSession.moveCuboidRegion(session.getSelection(player.getWorld()),
|
||||
dir, count, true, replace);
|
||||
player.print(affected + " blocks moved.");
|
||||
}
|
||||
@ -226,7 +226,7 @@ public class RegionCommands {
|
||||
Vector dir = we.getDirection(player,
|
||||
args.argsLength() > 1 ? args.getString(1).toLowerCase() : "me");
|
||||
|
||||
int affected = editSession.stackCuboidRegion(session.getRegion(),
|
||||
int affected = editSession.stackCuboidRegion(session.getSelection(player.getWorld()),
|
||||
dir, count, !args.hasFlag('a'));
|
||||
player.print(affected + " blocks changed. Undo with //undo");
|
||||
}
|
||||
|
@ -27,7 +27,10 @@ import com.sk89q.minecraft.util.commands.CommandContext;
|
||||
import com.sk89q.minecraft.util.commands.CommandPermissions;
|
||||
import com.sk89q.worldedit.*;
|
||||
import com.sk89q.worldedit.data.ChunkStore;
|
||||
import com.sk89q.worldedit.regions.CuboidRegionSelector;
|
||||
import com.sk89q.worldedit.regions.Polygonal2DRegionSelector;
|
||||
import com.sk89q.worldedit.regions.Region;
|
||||
import com.sk89q.worldedit.regions.RegionOperationException;
|
||||
import com.sk89q.worldedit.blocks.*;
|
||||
|
||||
/**
|
||||
@ -48,14 +51,14 @@ public class SelectionCommands {
|
||||
LocalSession session, LocalPlayer player, EditSession editSession)
|
||||
throws WorldEditException {
|
||||
|
||||
session.setPos1(player.getBlockIn());
|
||||
|
||||
if (session.isRegionDefined()) {
|
||||
player.print("First position set to " + player.getBlockIn()
|
||||
+ " (" + session.getRegion().getSize() + ").");
|
||||
} else {
|
||||
player.print("First position set to " + player.getBlockIn() + ".");
|
||||
if (!session.getRegionSelector(player.getWorld())
|
||||
.selectPrimary(player.getBlockIn())) {
|
||||
player.printError("Position already set.");
|
||||
return;
|
||||
}
|
||||
|
||||
session.getRegionSelector(player.getWorld())
|
||||
.explainPrimarySelection(player, player.getBlockIn());
|
||||
}
|
||||
|
||||
@Command(
|
||||
@ -69,15 +72,16 @@ public class SelectionCommands {
|
||||
public static void pos2(CommandContext args, WorldEdit we,
|
||||
LocalSession session, LocalPlayer player, EditSession editSession)
|
||||
throws WorldEditException {
|
||||
|
||||
session.setPos2(player.getBlockIn());
|
||||
|
||||
if (session.isRegionDefined()) {
|
||||
player.print("Second position set to " + player.getBlockIn()
|
||||
+ " (" + session.getRegion().getSize() + ").");
|
||||
} else {
|
||||
player.print("Second position set to " + player.getBlockIn() + ".");
|
||||
|
||||
if (!session.getRegionSelector(player.getWorld())
|
||||
.selectSecondary(player.getBlockIn())) {
|
||||
player.printError("Position already set.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
session.getRegionSelector(player.getWorld())
|
||||
.explainSecondarySelection(player, player.getBlockIn());
|
||||
}
|
||||
|
||||
@Command(
|
||||
@ -95,13 +99,14 @@ public class SelectionCommands {
|
||||
Vector pos = player.getBlockTrace(300);
|
||||
|
||||
if (pos != null) {
|
||||
session.setPos1(pos);
|
||||
if (session.isRegionDefined()) {
|
||||
player.print("First position set to " + pos
|
||||
+ " (" + session.getRegion().getSize() + ").");
|
||||
} else {
|
||||
player.print("First position set to " + pos.toString() + " .");
|
||||
if (!session.getRegionSelector(player.getWorld())
|
||||
.selectPrimary(pos)) {
|
||||
player.printError("Position already set.");
|
||||
return;
|
||||
}
|
||||
|
||||
session.getRegionSelector(player.getWorld())
|
||||
.explainPrimarySelection(player, pos);
|
||||
} else {
|
||||
player.printError("No block in sight!");
|
||||
}
|
||||
@ -122,14 +127,14 @@ public class SelectionCommands {
|
||||
Vector pos = player.getBlockTrace(300);
|
||||
|
||||
if (pos != null) {
|
||||
session.setPos2(pos);
|
||||
|
||||
if (session.isRegionDefined()) {
|
||||
player.print("Second position set to " + pos
|
||||
+ " (" + session.getRegion().getSize() + ").");
|
||||
} else {
|
||||
player.print("Second position set to " + pos.toString() + " .");
|
||||
if (!session.getRegionSelector(player.getWorld())
|
||||
.selectSecondary(pos)) {
|
||||
player.printError("Position already set.");
|
||||
return;
|
||||
}
|
||||
|
||||
session.getRegionSelector(player.getWorld())
|
||||
.explainSecondarySelection(player, pos);
|
||||
} else {
|
||||
player.printError("No block in sight!");
|
||||
}
|
||||
@ -151,8 +156,10 @@ public class SelectionCommands {
|
||||
Vector min = new Vector(min2D.getBlockX() * 16, 0, min2D.getBlockZ() * 16);
|
||||
Vector max = min.add(15, 127, 15);
|
||||
|
||||
session.setPos1(min);
|
||||
session.setPos2(max);
|
||||
CuboidRegionSelector selector = new CuboidRegionSelector();
|
||||
selector.selectPrimary(min);
|
||||
selector.selectSecondary(max);
|
||||
session.setRegionSelector(player.getWorld(), selector);
|
||||
|
||||
player.print("Chunk selected: "
|
||||
+ min2D.getBlockX() + ", " + min2D.getBlockZ());
|
||||
@ -213,14 +220,18 @@ public class SelectionCommands {
|
||||
// sky and bedrock.
|
||||
if (args.getString(0).equalsIgnoreCase("vert")
|
||||
|| args.getString(0).equalsIgnoreCase("vertical")) {
|
||||
Region region = session.getRegion();
|
||||
int oldSize = region.getSize();
|
||||
region.expand(new Vector(0, 128, 0));
|
||||
region.expand(new Vector(0, -128, 0));
|
||||
session.learnRegionChanges();
|
||||
int newSize = region.getSize();
|
||||
player.print("Region expanded " + (newSize - oldSize)
|
||||
+ " blocks [top-to-bottom].");
|
||||
Region region = session.getSelection(player.getWorld());
|
||||
try {
|
||||
int oldSize = region.getArea();
|
||||
region.expand(new Vector(0, 128, 0));
|
||||
region.expand(new Vector(0, -128, 0));
|
||||
session.getRegionSelector().learnChanges();
|
||||
int newSize = region.getArea();
|
||||
player.print("Region expanded " + (newSize - oldSize)
|
||||
+ " blocks [top-to-bottom].");
|
||||
} catch (RegionOperationException e) {
|
||||
player.printError(e.getMessage());
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
@ -246,16 +257,16 @@ public class SelectionCommands {
|
||||
dir = we.getDirection(player, "me");
|
||||
}
|
||||
|
||||
Region region = session.getRegion();
|
||||
int oldSize = region.getSize();
|
||||
Region region = session.getSelection(player.getWorld());
|
||||
int oldSize = region.getArea();
|
||||
region.expand(dir.multiply(change));
|
||||
|
||||
if (reverseChange != 0) {
|
||||
region.expand(dir.multiply(reverseChange));
|
||||
}
|
||||
|
||||
session.learnRegionChanges();
|
||||
int newSize = region.getSize();
|
||||
|
||||
session.getRegionSelector().learnChanges();
|
||||
int newSize = region.getArea();
|
||||
|
||||
player.print("Region expanded " + (newSize - oldSize) + " blocks.");
|
||||
}
|
||||
@ -294,16 +305,20 @@ public class SelectionCommands {
|
||||
dir = we.getDirection(player, "me");
|
||||
}
|
||||
|
||||
Region region = session.getRegion();
|
||||
int oldSize = region.getSize();
|
||||
region.contract(dir.multiply(change));
|
||||
if (reverseChange != 0) {
|
||||
region.contract(dir.multiply(reverseChange));
|
||||
try {
|
||||
Region region = session.getSelection(player.getWorld());
|
||||
int oldSize = region.getArea();
|
||||
region.contract(dir.multiply(change));
|
||||
if (reverseChange != 0) {
|
||||
region.contract(dir.multiply(reverseChange));
|
||||
}
|
||||
session.getRegionSelector().learnChanges();
|
||||
int newSize = region.getArea();
|
||||
|
||||
player.print("Region contracted " + (oldSize - newSize) + " blocks.");
|
||||
} catch (RegionOperationException e) {
|
||||
player.printError(e.getMessage());
|
||||
}
|
||||
session.learnRegionChanges();
|
||||
int newSize = region.getSize();
|
||||
|
||||
player.print("Region contracted " + (oldSize - newSize) + " blocks.");
|
||||
}
|
||||
|
||||
@Command(
|
||||
@ -327,12 +342,16 @@ public class SelectionCommands {
|
||||
dir = we.getDirection(player, "me");
|
||||
}
|
||||
|
||||
Region region = session.getRegion();
|
||||
region.expand(dir.multiply(change));
|
||||
region.contract(dir.multiply(change));
|
||||
session.learnRegionChanges();
|
||||
|
||||
player.print("Region shifted.");
|
||||
try {
|
||||
Region region = session.getSelection(player.getWorld());
|
||||
region.expand(dir.multiply(change));
|
||||
region.contract(dir.multiply(change));
|
||||
session.getRegionSelector().learnChanges();
|
||||
|
||||
player.print("Region shifted.");
|
||||
} catch (RegionOperationException e) {
|
||||
player.printError(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
@ -349,23 +368,27 @@ public class SelectionCommands {
|
||||
throws WorldEditException {
|
||||
int change = args.getInteger(0);
|
||||
|
||||
Region region = session.getRegion();
|
||||
Region region = session.getSelection(player.getWorld());
|
||||
|
||||
if (!args.hasFlag('h')) {
|
||||
region.expand((new Vector(0, 1, 0)).multiply(change));
|
||||
region.expand((new Vector(0, -1, 0)).multiply(change));
|
||||
try {
|
||||
if (!args.hasFlag('h')) {
|
||||
region.expand((new Vector(0, 1, 0)).multiply(change));
|
||||
region.expand((new Vector(0, -1, 0)).multiply(change));
|
||||
}
|
||||
|
||||
if (!args.hasFlag('v')) {
|
||||
region.expand((new Vector(1, 0, 0)).multiply(change));
|
||||
region.expand((new Vector(-1, 0, 0)).multiply(change));
|
||||
region.expand((new Vector(0, 0, 1)).multiply(change));
|
||||
region.expand((new Vector(0, 0, -1)).multiply(change));
|
||||
}
|
||||
|
||||
session.getRegionSelector().learnChanges();
|
||||
|
||||
player.print("Region outset.");
|
||||
} catch (RegionOperationException e) {
|
||||
player.printError(e.getMessage());
|
||||
}
|
||||
|
||||
if (!args.hasFlag('v')) {
|
||||
region.expand((new Vector(1, 0, 0)).multiply(change));
|
||||
region.expand((new Vector(-1, 0, 0)).multiply(change));
|
||||
region.expand((new Vector(0, 0, 1)).multiply(change));
|
||||
region.expand((new Vector(0, 0, -1)).multiply(change));
|
||||
}
|
||||
|
||||
session.learnRegionChanges();
|
||||
|
||||
player.print("Region outset.");
|
||||
}
|
||||
|
||||
@Command(
|
||||
@ -382,7 +405,7 @@ public class SelectionCommands {
|
||||
throws WorldEditException {
|
||||
int change = args.getInteger(0);
|
||||
|
||||
Region region = session.getRegion();
|
||||
Region region = session.getSelection(player.getWorld());
|
||||
|
||||
if (!args.hasFlag('h')) {
|
||||
region.contract((new Vector(0, 1, 0)).multiply(change));
|
||||
@ -395,14 +418,14 @@ public class SelectionCommands {
|
||||
region.contract((new Vector(0, 0, 1)).multiply(change));
|
||||
region.contract((new Vector(0, 0, -1)).multiply(change));
|
||||
}
|
||||
|
||||
session.learnRegionChanges();
|
||||
|
||||
session.getRegionSelector().learnChanges();
|
||||
|
||||
player.print("Region inset.");
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = {"/size"},
|
||||
aliases = {"/m", "//size"},
|
||||
usage = "",
|
||||
desc = "Get information about the selection",
|
||||
min = 0,
|
||||
@ -412,17 +435,21 @@ public class SelectionCommands {
|
||||
public static void size(CommandContext args, WorldEdit we,
|
||||
LocalSession session, LocalPlayer player, EditSession editSession)
|
||||
throws WorldEditException {
|
||||
|
||||
Region region = session.getRegion();
|
||||
|
||||
Region region = session.getSelection(player.getWorld());
|
||||
Vector size = region.getMaximumPoint()
|
||||
.subtract(region.getMinimumPoint())
|
||||
.add(1, 1, 1);
|
||||
|
||||
player.print("Type: " + session.getRegionSelector().getTypeName());
|
||||
|
||||
for (String line : session.getRegionSelector().getInformationLines()) {
|
||||
player.print(line);
|
||||
}
|
||||
|
||||
player.print("First position: " + session.getPos1());
|
||||
player.print("Second position: " + session.getPos2());
|
||||
player.print("Size: " + size);
|
||||
player.print("Distance: " + region.getMaximumPoint().distance(region.getMinimumPoint()));
|
||||
player.print("# of blocks: " + region.getSize());
|
||||
player.print("Cuboid distance: " + region.getMaximumPoint().distance(region.getMinimumPoint()));
|
||||
player.print("# of blocks: " + region.getArea());
|
||||
}
|
||||
|
||||
@Command(
|
||||
@ -440,7 +467,7 @@ public class SelectionCommands {
|
||||
Set<Integer> searchIDs = we.getBlockIDs(player,
|
||||
args.getString(0), true);
|
||||
player.print("Counted: " +
|
||||
editSession.countBlocks(session.getRegion(), searchIDs));
|
||||
editSession.countBlocks(session.getSelection(player.getWorld()), searchIDs));
|
||||
}
|
||||
|
||||
@Command(
|
||||
@ -457,12 +484,12 @@ public class SelectionCommands {
|
||||
throws WorldEditException {
|
||||
|
||||
List<Countable<Integer>> distribution =
|
||||
editSession.getBlockDistribution(session.getRegion());
|
||||
editSession.getBlockDistribution(session.getSelection(player.getWorld()));
|
||||
|
||||
Logger logger = Logger.getLogger("Minecraft.WorldEdit");
|
||||
|
||||
if (distribution.size() > 0) { // *Should* always be true
|
||||
int size = session.getRegion().getSize();
|
||||
int size = session.getSelection(player.getWorld()).getArea();
|
||||
|
||||
player.print("# total blocks: " + size);
|
||||
|
||||
@ -486,4 +513,27 @@ public class SelectionCommands {
|
||||
player.printError("No blocks counted.");
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = {"/sel", ","},
|
||||
usage = "[type]",
|
||||
desc = "Choose a region selector",
|
||||
min = 1,
|
||||
max = 1
|
||||
)
|
||||
public static void select(CommandContext args, WorldEdit we,
|
||||
LocalSession session, LocalPlayer player, EditSession editSession)
|
||||
throws WorldEditException {
|
||||
|
||||
String typeName = args.getString(0);
|
||||
if (typeName.equalsIgnoreCase("cuboid")) {
|
||||
session.setRegionSelector(player.getWorld(), new CuboidRegionSelector());
|
||||
player.print("Cuboid: left click for point 1, right click for point 2");
|
||||
} else if (typeName.equalsIgnoreCase("poly")) {
|
||||
session.setRegionSelector(player.getWorld(), new Polygonal2DRegionSelector());
|
||||
player.print("2D polygon selector: Left/right click to add a point.");
|
||||
} else {
|
||||
player.printError("Only 'cuboid' and 'poly' are accepted.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ public class SnapshotUtilCommands {
|
||||
return;
|
||||
}
|
||||
|
||||
Region region = session.getRegion();
|
||||
Region region = session.getSelection(player.getWorld());
|
||||
Snapshot snapshot;
|
||||
|
||||
if (args.argsLength() > 0) {
|
||||
|
Reference in New Issue
Block a user