From e1da7c41ad354007031ef769d03d03d1beea8f00 Mon Sep 17 00:00:00 2001 From: sk89q Date: Sat, 4 Jun 2011 11:57:40 -0700 Subject: [PATCH] Added a new region-based mask type and the ability to combine masks. --- .../java/com/sk89q/worldedit/WorldEdit.java | 12 ++++-- .../worldedit/commands/ToolUtilCommands.java | 4 +- .../com/sk89q/worldedit/masks/RegionMask.java | 38 +++++++++++++++++++ 3 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/sk89q/worldedit/masks/RegionMask.java diff --git a/src/main/java/com/sk89q/worldedit/WorldEdit.java b/src/main/java/com/sk89q/worldedit/WorldEdit.java index da88f289e..de65436e6 100644 --- a/src/main/java/com/sk89q/worldedit/WorldEdit.java +++ b/src/main/java/com/sk89q/worldedit/WorldEdit.java @@ -403,13 +403,13 @@ public class WorldEdit { * blocks to include when replacing. * * @param player + * @param session * @param maskString * @return - * @throws UnknownItemException - * @throws DisallowedItemException + * @throws WorldEditException */ - public Mask getBlockMask(LocalPlayer player, String maskString) - throws UnknownItemException, DisallowedItemException { + public Mask getBlockMask(LocalPlayer player, LocalSession session, + String maskString) throws WorldEditException { Mask mask = null; for (String component : maskString.split(" ")) { @@ -418,6 +418,10 @@ public class WorldEdit { if (component.charAt(0) == '#') { if (component.equalsIgnoreCase("#existing")) { current = new ExistingBlockMask(); + } else if (component.equalsIgnoreCase("#selection") + || component.equalsIgnoreCase("#region") + || component.equalsIgnoreCase("#sel")) { + current = new RegionMask(session.getSelection(player.getWorld())); } else { throw new UnknownItemException(component); } diff --git a/src/main/java/com/sk89q/worldedit/commands/ToolUtilCommands.java b/src/main/java/com/sk89q/worldedit/commands/ToolUtilCommands.java index fcd3ddbab..0b6df870a 100644 --- a/src/main/java/com/sk89q/worldedit/commands/ToolUtilCommands.java +++ b/src/main/java/com/sk89q/worldedit/commands/ToolUtilCommands.java @@ -77,7 +77,7 @@ public class ToolUtilCommands { usage = "[mask]", desc = "Set the brush mask", min = 0, - max = 1 + max = -1 ) @CommandPermissions({"worldedit.brush.options.mask"}) public static void mask(CommandContext args, WorldEdit we, @@ -87,7 +87,7 @@ public class ToolUtilCommands { session.getBrushTool(player.getItemInHand()).setMask(null); player.print("Brush mask disabled."); } else { - Mask mask = we.getBlockMask(player, args.getJoinedStrings(0)); + Mask mask = we.getBlockMask(player, session, args.getJoinedStrings(0)); session.getBrushTool(player.getItemInHand()).setMask(mask); player.print("Brush mask set."); } diff --git a/src/main/java/com/sk89q/worldedit/masks/RegionMask.java b/src/main/java/com/sk89q/worldedit/masks/RegionMask.java new file mode 100644 index 000000000..3baf919dd --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/masks/RegionMask.java @@ -0,0 +1,38 @@ +// $Id$ +/* + * WorldEdit + * Copyright (C) 2010, 2011 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.masks; + +import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.regions.Region; + +public class RegionMask implements Mask { + + private Region region; + + public RegionMask(Region region) { + this.region = region; + } + + public boolean matches(EditSession editSession, Vector pos) { + return region.contains(pos); + } + +}