Add BlockMask which is able to filter by data

This commit is contained in:
aumgn 2012-08-29 11:32:14 +02:00
parent 21d603ce4e
commit c759b9062c
4 changed files with 58 additions and 20 deletions

View File

@ -642,7 +642,7 @@ public class WorldEdit {
} }
default: default:
return new BlockTypeMask(getBlockIDs(player, component, true)); return new BlockMask(getBlocks(player, component, true, true));
} }
} }

View File

@ -0,0 +1,46 @@
package com.sk89q.worldedit.masks;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.LocalPlayer;
import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseBlock;
public class BlockMask implements Mask {
protected Set<BaseBlock> blocks;
public BlockMask() {
blocks = new HashSet<BaseBlock>();
}
public BlockMask(Set<BaseBlock> types) {
this.blocks = types;
}
public BlockMask(BaseBlock block) {
this();
add(block);
}
public void add(BaseBlock block) {
blocks.add(block);
}
public void addAll(Collection<BaseBlock> blocks) {
blocks.addAll(blocks);
}
public void prepare(LocalSession session, LocalPlayer player, Vector target) {
}
public boolean matches(EditSession editSession, Vector pos) {
BaseBlock block = editSession.getBlock(pos);
return blocks.contains(block)
|| blocks.contains(new BaseBlock(block.getType(), -1));
}
}

View File

@ -19,27 +19,27 @@
package com.sk89q.worldedit.masks; package com.sk89q.worldedit.masks;
import java.util.HashSet;
import java.util.Set; import java.util.Set;
import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.LocalPlayer;
import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.Vector;
/** /**
* A filter that matches blocks based on block types. * A filter that matches blocks based on block types.
* *
* @deprecated replaced by {@link #BlockMask}
* @author sk89q * @author sk89q
*/ */
public class BlockTypeMask implements Mask { @Deprecated
protected Set<Integer> types; public class BlockTypeMask extends BlockMask {
public BlockTypeMask() { public BlockTypeMask() {
types = new HashSet<Integer>(); super();
} }
public BlockTypeMask(Set<Integer> types) { public BlockTypeMask(Set<Integer> types) {
this.types = types; super();
for (int type : types) {
add(type);
}
} }
public BlockTypeMask(int type) { public BlockTypeMask(int type) {
@ -48,14 +48,6 @@ public class BlockTypeMask implements Mask {
} }
public void add(int type) { public void add(int type) {
types.add(type); add(new BaseBlock(type));
} }
public void prepare(LocalSession session, LocalPlayer player, Vector target) {
}
public boolean matches(EditSession editSession, Vector pos) {
return types.contains(editSession.getBlockType(pos));
}
} }

View File

@ -49,7 +49,7 @@ public class InvertedBlockTypeMask extends BlockTypeMask {
@Override @Override
public boolean matches(EditSession editSession, Vector pos) { public boolean matches(EditSession editSession, Vector pos) {
return !types.contains(editSession.getBlockType(pos)); return !super.matches(editSession, pos);
} }
} }