diff --git a/src/com/sk89q/worldedit/WorldEditController.java b/src/com/sk89q/worldedit/WorldEditController.java
index 306d2ce5c..1633fd4c1 100644
--- a/src/com/sk89q/worldedit/WorldEditController.java
+++ b/src/com/sk89q/worldedit/WorldEditController.java
@@ -139,6 +139,7 @@ public class WorldEditController {
commands.put("/none", "Switch to no tool");
commands.put("/info", "Switch to the info tool");
commands.put("/tree", "Switch to the tree tool");
+ commands.put("/repl", "[ID] - Switch to the block replacer tool");
commands.put("//expand", "[Num]
- Expands the selection");
commands.put("//contract", "[Num] - Contracts the selection");
commands.put("//shift", "[Num] - Shift the selection");
@@ -692,7 +693,15 @@ public class WorldEditController {
player.print("Info tool equipped. Right click with a pickaxe.");
return true;
- // Info tool
+ // Replace block tool
+ } else if (split[0].equalsIgnoreCase("/repl")) {
+ checkArgs(split, 1, 1, split[0]);
+ BaseBlock targetBlock = getBlock(player, split[1]);
+ session.setTool(new BlockReplacer(targetBlock));
+ player.print("Block replacer tool equipped. Right click with a pickaxe.");
+ return true;
+
+ // No tool
} else if (split[0].equalsIgnoreCase("/none")) {
checkArgs(split, 0, 0, split[0]);
session.setTool(null);
diff --git a/src/com/sk89q/worldedit/superpickaxe/BlockReplacer.java b/src/com/sk89q/worldedit/superpickaxe/BlockReplacer.java
new file mode 100644
index 000000000..d803ffac7
--- /dev/null
+++ b/src/com/sk89q/worldedit/superpickaxe/BlockReplacer.java
@@ -0,0 +1,54 @@
+// $Id$
+/*
+ * WorldEdit
+ * Copyright (C) 2010 sk89q
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+*/
+
+package com.sk89q.worldedit.superpickaxe;
+
+import com.sk89q.worldedit.*;
+import com.sk89q.worldedit.blocks.BaseBlock;
+
+/**
+ * A smode that replaces one block.
+ *
+ * @author sk89q
+ */
+public class BlockReplacer implements SuperPickaxeMode {
+ private BaseBlock targetBlock;
+
+ public BlockReplacer(BaseBlock targetBlock) {
+ this.targetBlock = targetBlock;
+ }
+
+ @Override
+ public boolean act(ServerInterface server, LocalConfiguration config,
+ LocalPlayer player, LocalSession session, LocalWorld world,
+ Vector clicked) {
+
+ EditSession editSession = new EditSession(server, world, -1);
+
+ try {
+ editSession.setBlock(clicked, targetBlock);
+ } catch (MaxChangedBlocksException e) {
+ } finally {
+ session.remember(editSession);
+ }
+
+ return true;
+ }
+
+}