Added /toggleplace which lets you perform actions that require one point to use position #1 rather than your feet.

This commit is contained in:
sk89q 2010-10-14 02:14:18 -07:00
parent 9739336730
commit 5f1a014bfb
2 changed files with 42 additions and 5 deletions

View File

@ -71,6 +71,7 @@ public class WorldEdit {
public WorldEdit() { public WorldEdit() {
commands.put("/editpos1", "Set editing position #1"); commands.put("/editpos1", "Set editing position #1");
commands.put("/editpos2", "Set editing position #2"); commands.put("/editpos2", "Set editing position #2");
commands.put("/toggleplace", "Toggle placing at pos #1");
commands.put("/editwand", "Gives you the \"edit wand\""); commands.put("/editwand", "Gives you the \"edit wand\"");
commands.put("/toggleeditwand", "Toggles edit wand selection"); commands.put("/toggleeditwand", "Toggles edit wand selection");
commands.put("/,", "Toggles super pick axe."); commands.put("/,", "Toggles super pick axe.");
@ -251,6 +252,16 @@ public class WorldEdit {
player.print("Right click = sel. pos 1; double right click = sel. pos 2"); player.print("Right click = sel. pos 1; double right click = sel. pos 2");
return true; return true;
// Toggle placing at pos #1
} else if (split[0].equalsIgnoreCase("/toggleplace")) {
checkArgs(split, 0, 0, split[0]);
if (session.togglePlacementPosition()) {
player.print("Now placing at pos #1.");
} else {
player.print("Now placing at the block you stand in.");
}
return true;
// Toggle edit wand // Toggle edit wand
} else if (split[0].equalsIgnoreCase("/toggleeditwand")) { } else if (split[0].equalsIgnoreCase("/toggleeditwand")) {
checkArgs(split, 0, 0, split[0]); checkArgs(split, 0, 0, split[0]);
@ -317,7 +328,7 @@ public class WorldEdit {
// Paste // Paste
} else if (split[0].equalsIgnoreCase("/editpasteair") || } else if (split[0].equalsIgnoreCase("/editpasteair") ||
split[0].equalsIgnoreCase("/editpaste")) { split[0].equalsIgnoreCase("/editpaste")) {
Vector pos = player.getBlockIn(); Vector pos = session.getPlacementPosition(player);
session.getClipboard().paste(editSession, pos, session.getClipboard().paste(editSession, pos,
split[0].equalsIgnoreCase("/editpaste")); split[0].equalsIgnoreCase("/editpaste"));
player.findFreePosition(); player.findFreePosition();
@ -332,7 +343,7 @@ public class WorldEdit {
int radius = Math.max(1, Integer.parseInt(split[2])); int radius = Math.max(1, Integer.parseInt(split[2]));
int depth = split.length > 3 ? Math.max(1, Integer.parseInt(split[3])) : 1; int depth = split.length > 3 ? Math.max(1, Integer.parseInt(split[3])) : 1;
Vector pos = player.getBlockIn(); Vector pos = session.getPlacementPosition(player);
int affected = editSession.fillXZ((int)pos.getX(), (int)pos.getZ(), int affected = editSession.fillXZ((int)pos.getX(), (int)pos.getZ(),
pos, block, radius, depth); pos, block, radius, depth);
player.print(affected + " block(s) have been created."); player.print(affected + " block(s) have been created.");
@ -344,7 +355,8 @@ public class WorldEdit {
int size = split.length > 1 ? Math.max(1, Integer.parseInt(split[1])) : 1; int size = split.length > 1 ? Math.max(1, Integer.parseInt(split[1])) : 1;
int height = split.length > 2 ? Math.min(128, Integer.parseInt(split[2]) + 2) : 128; int height = split.length > 2 ? Math.min(128, Integer.parseInt(split[2]) + 2) : 128;
int affected = editSession.removeAbove(player.getBlockIn(), size, height); int affected = editSession.removeAbove(
session.getPlacementPosition(player), size, height);
player.print(affected + " block(s) have been removed."); player.print(affected + " block(s) have been removed.");
return true; return true;
@ -354,7 +366,8 @@ public class WorldEdit {
int size = split.length > 1 ? Math.max(1, Integer.parseInt(split[1])) : 1; int size = split.length > 1 ? Math.max(1, Integer.parseInt(split[1])) : 1;
int height = split.length > 2 ? Math.max(1, Integer.parseInt(split[2])) : 128; int height = split.length > 2 ? Math.max(1, Integer.parseInt(split[2])) : 128;
int affected = editSession.removeBelow(player.getBlockIn(), size, height); int affected = editSession.removeBelow(
session.getPlacementPosition(player), size, height);
player.print(affected + " block(s) have been removed."); player.print(affected + " block(s) have been removed.");
return true; return true;
@ -451,7 +464,8 @@ public class WorldEdit {
} else if(split[0].equalsIgnoreCase("/editdrain")) { } else if(split[0].equalsIgnoreCase("/editdrain")) {
checkArgs(split, 1, 1, split[0]); checkArgs(split, 1, 1, split[0]);
int radius = Math.max(0, Integer.parseInt(split[1])); int radius = Math.max(0, Integer.parseInt(split[1]));
int affected = editSession.drainArea(player.getBlockIn(), radius); int affected = editSession.drainArea(
session.getPlacementPosition(player), radius);
player.print(affected + " block(s) have been changed."); player.print(affected + " block(s) have been changed.");
return true; return true;

View File

@ -28,6 +28,7 @@ import java.util.LinkedList;
*/ */
public class WorldEditSession { public class WorldEditSession {
public static final int MAX_HISTORY_SIZE = 15; public static final int MAX_HISTORY_SIZE = 15;
private boolean placeAtPos1 = false;
private Vector pos1, pos2; private Vector pos1, pos2;
private Region region; private Region region;
private LinkedList<EditSession> history = new LinkedList<EditSession>(); private LinkedList<EditSession> history = new LinkedList<EditSession>();
@ -282,4 +283,26 @@ public class WorldEditSession {
superPickAxe = !superPickAxe; superPickAxe = !superPickAxe;
return superPickAxe; return superPickAxe;
} }
/**
* @return position
* @throws IncompleteRegionException
*/
public Vector getPlacementPosition(WorldEditPlayer player)
throws IncompleteRegionException {
if (!placeAtPos1) {
return player.getBlockIn();
}
checkPos1();
return pos1;
}
/**
* Toggle placement position;
*/
public boolean togglePlacementPosition() {
placeAtPos1 = !placeAtPos1;
return placeAtPos1;
}
} }