From b491457fb8cfda5cd5bc0bab445a5580ddd73c50 Mon Sep 17 00:00:00 2001 From: sk89q Date: Sat, 1 Jan 2011 22:02:26 -0800 Subject: [PATCH] Implemented /repl tool that will replace a right clicked block with a block of your choice. --- .../sk89q/worldedit/WorldEditController.java | 11 +++- .../worldedit/superpickaxe/BlockReplacer.java | 54 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/com/sk89q/worldedit/superpickaxe/BlockReplacer.java 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; + } + +}