mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-23 09:47:38 +00:00
Added //flip to flip clipboards.
This commit is contained in:
parent
76d7a14016
commit
3e2a1f5c33
@ -33,6 +33,15 @@ import java.util.List;
|
|||||||
* @author sk89q
|
* @author sk89q
|
||||||
*/
|
*/
|
||||||
public class CuboidClipboard {
|
public class CuboidClipboard {
|
||||||
|
/**
|
||||||
|
* Flip direction.
|
||||||
|
*/
|
||||||
|
public enum FlipDirection {
|
||||||
|
NORTH_SOUTH,
|
||||||
|
WEST_EAST,
|
||||||
|
UP_DOWN
|
||||||
|
}
|
||||||
|
|
||||||
private BaseBlock[][][] data;
|
private BaseBlock[][][] data;
|
||||||
private Vector offset;
|
private Vector offset;
|
||||||
private Vector origin;
|
private Vector origin;
|
||||||
@ -145,6 +154,52 @@ public class CuboidClipboard {
|
|||||||
.subtract(shiftX, 0, shiftZ);;
|
.subtract(shiftX, 0, shiftZ);;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flip the clipboard.
|
||||||
|
*
|
||||||
|
* @param dir
|
||||||
|
*/
|
||||||
|
public void flip(FlipDirection dir) {
|
||||||
|
int width = getWidth();
|
||||||
|
int length = getLength();
|
||||||
|
int height = getHeight();
|
||||||
|
|
||||||
|
if (dir == FlipDirection.NORTH_SOUTH) {
|
||||||
|
int len = (int)Math.floor(width / 2);
|
||||||
|
for (int xs = 0; xs < len; xs++) {
|
||||||
|
for (int z = 0; z < length; z++) {
|
||||||
|
for (int y = 0; y < height; y++) {
|
||||||
|
BaseBlock old = data[xs][y][z];
|
||||||
|
data[xs][y][z] = data[width - xs - 1][y][z];
|
||||||
|
data[width - xs - 1][y][z] = old;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (dir == FlipDirection.WEST_EAST) {
|
||||||
|
int len = (int)Math.floor(length / 2);
|
||||||
|
for (int zs = 0; zs < len; zs++) {
|
||||||
|
for (int x = 0; x < width; x++) {
|
||||||
|
for (int y = 0; y < height; y++) {
|
||||||
|
BaseBlock old = data[x][y][zs];
|
||||||
|
data[x][y][zs] = data[x][y][length - zs - 1];
|
||||||
|
data[x][y][length - zs - 1] = old;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (dir == FlipDirection.UP_DOWN) {
|
||||||
|
int len = (int)Math.floor(height / 2);
|
||||||
|
for (int ys = 0; ys < len; ys++) {
|
||||||
|
for (int x = 0; x < width; x++) {
|
||||||
|
for (int z = 0; z < length; z++) {
|
||||||
|
BaseBlock old = data[x][ys][z];
|
||||||
|
data[x][ys][z] = data[x][height - ys - 1][z];
|
||||||
|
data[x][height - ys - 1][z] = old;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy to the clipboard.
|
* Copy to the clipboard.
|
||||||
*
|
*
|
||||||
|
@ -143,6 +143,7 @@ public class WorldEditListener extends PluginListener {
|
|||||||
commands.put("//expand", "[Num] <Dir> - Expands the selection");
|
commands.put("//expand", "[Num] <Dir> - Expands the selection");
|
||||||
commands.put("//contract", "[Num] <Dir> - Contracts the selection");
|
commands.put("//contract", "[Num] <Dir> - Contracts the selection");
|
||||||
commands.put("//rotate", "[Angle] - Rotate the clipboard");
|
commands.put("//rotate", "[Angle] - Rotate the clipboard");
|
||||||
|
commands.put("//flip", "<Dir> - Flip the clipboard");
|
||||||
commands.put("//hcyl", "[ID] [Radius] <Height> - Create a vertical hollow cylinder");
|
commands.put("//hcyl", "[ID] [Radius] <Height> - Create a vertical hollow cylinder");
|
||||||
commands.put("//cyl", "[ID] [Radius] <Height> - Create a vertical cylinder");
|
commands.put("//cyl", "[ID] [Radius] <Height> - Create a vertical cylinder");
|
||||||
commands.put("//sphere", "[ID] [Radius] <Raised?> - Create a sphere");
|
commands.put("//sphere", "[ID] [Radius] <Raised?> - Create a sphere");
|
||||||
@ -1260,6 +1261,18 @@ public class WorldEditListener extends PluginListener {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
// Flip
|
||||||
|
} else if (split[0].equalsIgnoreCase("//flip")) {
|
||||||
|
checkArgs(split, 0, 1, split[0]);
|
||||||
|
CuboidClipboard.FlipDirection dir = getFlipDirection(player,
|
||||||
|
split.length > 1 ? split[1].toLowerCase() : "me");
|
||||||
|
|
||||||
|
CuboidClipboard clipboard = session.getClipboard();
|
||||||
|
clipboard.flip(dir);
|
||||||
|
player.print("Clipboard flipped.");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
// Kill mobs
|
// Kill mobs
|
||||||
} else if (split[0].equalsIgnoreCase("/butcher")) {
|
} else if (split[0].equalsIgnoreCase("/butcher")) {
|
||||||
checkArgs(split, 0, 1, split[0]);
|
checkArgs(split, 0, 1, split[0]);
|
||||||
@ -1573,6 +1586,42 @@ public class WorldEditListener extends PluginListener {
|
|||||||
return new Vector(xm, ym, zm);
|
return new Vector(xm, ym, zm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the flip direction for a player's direction. May return
|
||||||
|
* null if a direction could not be found.
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
* @param dir
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public CuboidClipboard.FlipDirection getFlipDirection(
|
||||||
|
WorldEditPlayer player, String dir)
|
||||||
|
throws UnknownDirectionException {
|
||||||
|
int xm = 0;
|
||||||
|
int ym = 0;
|
||||||
|
int zm = 0;
|
||||||
|
|
||||||
|
if (dir.equals("me")) {
|
||||||
|
dir = player.getCardinalDirection();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dir.charAt(0) == 'w') {
|
||||||
|
return CuboidClipboard.FlipDirection.WEST_EAST;
|
||||||
|
} else if (dir.charAt(0) == 'e') {
|
||||||
|
return CuboidClipboard.FlipDirection.WEST_EAST;
|
||||||
|
} else if (dir.charAt(0) == 's') {
|
||||||
|
return CuboidClipboard.FlipDirection.NORTH_SOUTH;
|
||||||
|
} else if (dir.charAt(0) == 'n') {
|
||||||
|
return CuboidClipboard.FlipDirection.NORTH_SOUTH;
|
||||||
|
} else if (dir.charAt(0) == 'u') {
|
||||||
|
return CuboidClipboard.FlipDirection.UP_DOWN;
|
||||||
|
} else if (dir.charAt(0) == 'd') {
|
||||||
|
return CuboidClipboard.FlipDirection.UP_DOWN;
|
||||||
|
} else {
|
||||||
|
throw new UnknownDirectionException(dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove a session.
|
* Remove a session.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user