Added tool mode (and tree playing tool).

This commit is contained in:
sk89q 2010-11-06 23:17:32 -07:00
parent 3908a2d0eb
commit e534a7a50e
2 changed files with 106 additions and 40 deletions

View File

@ -156,6 +156,7 @@ public class WorldEditListener extends PluginListener {
commands.put("//drain", "[Radius] - Drain nearby water/lava pools"); commands.put("//drain", "[Radius] - Drain nearby water/lava pools");
commands.put("//limit", "[Num] - See documentation"); commands.put("//limit", "[Num] - See documentation");
commands.put("//mode", "[Mode] <Size> - Set super pickaxe mode (single/recursive/area)"); commands.put("//mode", "[Mode] <Size> - Set super pickaxe mode (single/recursive/area)");
commands.put("//tool", "[Tool] - Set pickaxe tool (none/tree)");
commands.put("//expand", "<Dir> [Num] - Expands the selection"); commands.put("//expand", "<Dir> [Num] - Expands the selection");
commands.put("//contract", "<Dir> [Num] - Contracts the selection"); commands.put("//contract", "<Dir> [Num] - Contracts the selection");
commands.put("//rotate", "[Angle] - Rotate the clipboard"); commands.put("//rotate", "[Angle] - Rotate the clipboard");
@ -206,6 +207,16 @@ public class WorldEditListener extends PluginListener {
} }
} }
/**
* Returns true if the player has a session.
*
* @param player
* @return
*/
public boolean hasSession(WorldEditPlayer player) {
return sessions.containsKey(player);
}
/** /**
* Get an item ID from an item name or an item ID number. * Get an item ID from an item name or an item ID number.
* *
@ -572,17 +583,17 @@ public class WorldEditListener extends PluginListener {
checkArgs(split, 1, 2, split[0]); checkArgs(split, 1, 2, split[0]);
if (split[1].equalsIgnoreCase("single")) { if (split[1].equalsIgnoreCase("single")) {
session.setSuperPickaxeMode(WorldEditSession.SuperPickaxeModes.SINGLE); session.setSuperPickaxeMode(WorldEditSession.SuperPickaxeMode.SINGLE);
player.print("Mode set to single block."); player.print("Mode set to single block.");
} else if (split[1].equalsIgnoreCase("recursive") } else if (split[1].equalsIgnoreCase("recursive")
|| split[1].equalsIgnoreCase("area")) { || split[1].equalsIgnoreCase("area")) {
if (split.length == 3) { if (split.length == 3) {
int size = Math.max(1, Integer.parseInt(split[2])); int size = Math.max(1, Integer.parseInt(split[2]));
if (size <= maxSuperPickaxeSize) { if (size <= maxSuperPickaxeSize) {
WorldEditSession.SuperPickaxeModes mode = WorldEditSession.SuperPickaxeMode mode =
split[1].equalsIgnoreCase("recursive") ? split[1].equalsIgnoreCase("recursive") ?
WorldEditSession.SuperPickaxeModes.SAME_TYPE_RECURSIVE : WorldEditSession.SuperPickaxeMode.SAME_TYPE_RECURSIVE :
WorldEditSession.SuperPickaxeModes.SAME_TYPE_AREA; WorldEditSession.SuperPickaxeMode.SAME_TYPE_AREA;
session.setSuperPickaxeMode(mode); session.setSuperPickaxeMode(mode);
session.setSuperPickaxeRange(size); session.setSuperPickaxeRange(size);
player.print("Mode set to " + split[1].toLowerCase() + "."); player.print("Mode set to " + split[1].toLowerCase() + ".");
@ -598,6 +609,21 @@ public class WorldEditListener extends PluginListener {
} }
return true; return true;
// Set tool
} else if (split[0].equalsIgnoreCase("//tool")) {
checkArgs(split, 1, 1, split[0]);
if (split[1].equalsIgnoreCase("none")) {
session.setTool(WorldEditSession.Tool.NONE);
player.print("No tool equipped. -3 XP, +10 Manliness");
} else if (split[1].equalsIgnoreCase("tree")) {
session.setTool(WorldEditSession.Tool.TREE);
player.print("Tree planting tool equipped. +5 XP");
} else {
player.printError("Unknown tool.");
}
return true;
// Undo // Undo
} else if (split[0].equalsIgnoreCase("//undo")) { } else if (split[0].equalsIgnoreCase("//undo")) {
checkArgs(split, 0, 0, split[0]); checkArgs(split, 0, 0, split[0]);
@ -1454,12 +1480,12 @@ public class WorldEditListener extends PluginListener {
Block blockClicked, int itemInHand) { Block blockClicked, int itemInHand) {
WorldEditPlayer player = new WorldEditPlayer(modPlayer); WorldEditPlayer player = new WorldEditPlayer(modPlayer);
if (itemInHand != 271) { return false; } // This prevents needless sessions from being created
if (!canUseCommand(modPlayer, "//pos2")) { return false; } if (!hasSession(player)) { return false; }
WorldEditSession session = getSession(player); WorldEditSession session = getSession(player);
if (session.isToolControlEnabled()) { if (itemInHand == 271 && session.isToolControlEnabled()) {
Vector cur = Vector.toBlockPoint(blockClicked.getX(), Vector cur = Vector.toBlockPoint(blockClicked.getX(),
blockClicked.getY(), blockClicked.getY(),
blockClicked.getZ()); blockClicked.getZ());
@ -1467,6 +1493,24 @@ public class WorldEditListener extends PluginListener {
session.setPos2(cur); session.setPos2(cur);
player.print("Second position set to " + cur + "."); player.print("Second position set to " + cur + ".");
return true;
} else if (player.isHoldingPickAxe()
&& session.getTool() == WorldEditSession.Tool.TREE) {
Vector pos = Vector.toBlockPoint(blockClicked.getX(),
blockClicked.getY() + 1,
blockClicked.getZ());
EditSession editSession =
new EditSession(session.getBlockChangeLimit());
try {
if (!ServerInterface.generateTree(editSession, pos)) {
player.printError("Notch won't let you put a tree there.");
}
} finally {
session.remember(editSession);
}
return true; return true;
} }
@ -1519,7 +1563,7 @@ public class WorldEditListener extends PluginListener {
// Single block super pickaxe // Single block super pickaxe
if (session.getSuperPickaxeMode() == if (session.getSuperPickaxeMode() ==
WorldEditSession.SuperPickaxeModes.SINGLE) { WorldEditSession.SuperPickaxeMode.SINGLE) {
Vector pos = new Vector(blockClicked.getX(), Vector pos = new Vector(blockClicked.getX(),
blockClicked.getY(), blockClicked.getZ()); blockClicked.getY(), blockClicked.getZ());
if (ServerInterface.getBlockType(pos) == 7 && canBedrock) { if (ServerInterface.getBlockType(pos) == 7 && canBedrock) {
@ -1532,7 +1576,7 @@ public class WorldEditListener extends PluginListener {
// Area super pickaxe // Area super pickaxe
} else if (session.getSuperPickaxeMode() == } else if (session.getSuperPickaxeMode() ==
WorldEditSession.SuperPickaxeModes.SAME_TYPE_AREA) { WorldEditSession.SuperPickaxeMode.SAME_TYPE_AREA) {
Vector origin = new Vector(blockClicked.getX(), Vector origin = new Vector(blockClicked.getX(),
blockClicked.getY(), blockClicked.getZ()); blockClicked.getY(), blockClicked.getZ());
int ox = blockClicked.getX(); int ox = blockClicked.getX();
@ -1560,7 +1604,7 @@ public class WorldEditListener extends PluginListener {
// Area super pickaxe // Area super pickaxe
} else if (session.getSuperPickaxeMode() == } else if (session.getSuperPickaxeMode() ==
WorldEditSession.SuperPickaxeModes.SAME_TYPE_RECURSIVE) { WorldEditSession.SuperPickaxeMode.SAME_TYPE_RECURSIVE) {
Vector origin = new Vector(blockClicked.getX(), Vector origin = new Vector(blockClicked.getX(),
blockClicked.getY(), blockClicked.getZ()); blockClicked.getY(), blockClicked.getZ());
int ox = blockClicked.getX(); int ox = blockClicked.getX();

View File

@ -28,42 +28,21 @@ import java.util.LinkedList;
* @author sk89q * @author sk89q
*/ */
public class WorldEditSession { public class WorldEditSession {
/**
* @return the superPickaxeMode
*/
public SuperPickaxeModes getSuperPickaxeMode() {
return superPickaxeMode;
}
/**
* @param superPickaxeMode the superPickaxeMode to set
*/
public void setSuperPickaxeMode(SuperPickaxeModes superPickaxeMode) {
this.superPickaxeMode = superPickaxeMode;
}
/**
* @return the superPickaxeRange
*/
public int getSuperPickaxeRange() {
return superPickaxeRange;
}
/**
* @param superPickaxeRange the superPickaxeRange to set
*/
public void setSuperPickaxeRange(int superPickaxeRange) {
this.superPickaxeRange = superPickaxeRange;
}
/** /**
* List of super pick axe modes. * List of super pick axe modes.
*/ */
public static enum SuperPickaxeModes { public static enum SuperPickaxeMode {
SINGLE, SINGLE,
SAME_TYPE_RECURSIVE, SAME_TYPE_RECURSIVE,
SAME_TYPE_AREA SAME_TYPE_AREA
}; };
/**
* List of
*/
public static enum Tool {
NONE,
TREE,
}
public static final int MAX_HISTORY_SIZE = 15; public static final int MAX_HISTORY_SIZE = 15;
private boolean placeAtPos1 = false; private boolean placeAtPos1 = false;
@ -74,7 +53,8 @@ public class WorldEditSession {
private CuboidClipboard clipboard; private CuboidClipboard clipboard;
private boolean toolControl = true; private boolean toolControl = true;
private boolean superPickAxe = false; private boolean superPickAxe = false;
private SuperPickaxeModes superPickaxeMode = SuperPickaxeModes.SINGLE; private SuperPickaxeMode superPickaxeMode = SuperPickaxeMode.SINGLE;
private Tool tool = Tool.NONE;
private int superPickaxeRange = 3; private int superPickaxeRange = 3;
private int maxBlocksChanged = -1; private int maxBlocksChanged = -1;
private Snapshot snapshot; private Snapshot snapshot;
@ -360,4 +340,46 @@ public class WorldEditSession {
public void setSnapshot(Snapshot snapshot) { public void setSnapshot(Snapshot snapshot) {
this.snapshot = snapshot; this.snapshot = snapshot;
} }
/**
* @return the superPickaxeMode
*/
public SuperPickaxeMode getSuperPickaxeMode() {
return superPickaxeMode;
}
/**
* @param superPickaxeMode the superPickaxeMode to set
*/
public void setSuperPickaxeMode(SuperPickaxeMode superPickaxeMode) {
this.superPickaxeMode = superPickaxeMode;
}
/**
* @return the superPickaxeRange
*/
public int getSuperPickaxeRange() {
return superPickaxeRange;
}
/**
* @param superPickaxeRange the superPickaxeRange to set
*/
public void setSuperPickaxeRange(int superPickaxeRange) {
this.superPickaxeRange = superPickaxeRange;
}
/**
* @return the tool
*/
public Tool getTool() {
return tool;
}
/**
* @param tool the tool to set
*/
public void setTool(Tool tool) {
this.tool = tool;
}
} }