From f7fe72311b91ea2a347763142ba4df692ed60900 Mon Sep 17 00:00:00 2001 From: sk89q Date: Sun, 30 Jan 2011 01:01:11 -0800 Subject: [PATCH] Added a clipboard pattern. --- src/com/sk89q/worldedit/CuboidClipboard.java | 12 ++++ src/com/sk89q/worldedit/WorldEdit.java | 14 +++++ .../worldedit/patterns/ClipboardPattern.java | 63 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 src/com/sk89q/worldedit/patterns/ClipboardPattern.java diff --git a/src/com/sk89q/worldedit/CuboidClipboard.java b/src/com/sk89q/worldedit/CuboidClipboard.java index 552881865..9ce37422f 100644 --- a/src/com/sk89q/worldedit/CuboidClipboard.java +++ b/src/com/sk89q/worldedit/CuboidClipboard.java @@ -268,6 +268,18 @@ public class CuboidClipboard { } } + /** + * Get one point in the copy. The point is relative to the origin + * of the copy (0, 0, 0) and not to the actual copy origin. + * + * @param pos + * @return null + * @throws ArrayIndexOutOfBoundsException + */ + public BaseBlock getPoint(Vector pos) throws ArrayIndexOutOfBoundsException { + return data[pos.getBlockX()][pos.getBlockY()][pos.getBlockZ()]; + } + /** * Get the size of the copy. * diff --git a/src/com/sk89q/worldedit/WorldEdit.java b/src/com/sk89q/worldedit/WorldEdit.java index cf149c3a5..20fd2094a 100644 --- a/src/com/sk89q/worldedit/WorldEdit.java +++ b/src/com/sk89q/worldedit/WorldEdit.java @@ -286,6 +286,20 @@ public class WorldEdit { throws UnknownItemException, DisallowedItemException { String[] items = list.split(","); + + if (list.equals("#clipboard") || list.equals("#copy")) { + LocalSession session = getSession(player); + CuboidClipboard clipboard; + + try { + clipboard = session.getClipboard(); + } catch (EmptyClipboardException e) { + player.printError("Copy a selection first with //copy."); + throw new UnknownItemException("#clipboard"); + } + + return new ClipboardPattern(clipboard); + } if (items.length == 1) { return new SingleBlockPattern(getBlock(player, items[0])); diff --git a/src/com/sk89q/worldedit/patterns/ClipboardPattern.java b/src/com/sk89q/worldedit/patterns/ClipboardPattern.java new file mode 100644 index 000000000..8ec181c39 --- /dev/null +++ b/src/com/sk89q/worldedit/patterns/ClipboardPattern.java @@ -0,0 +1,63 @@ +// $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.patterns; + +import com.sk89q.worldedit.*; +import com.sk89q.worldedit.blocks.BaseBlock; + +/** + * Pattern that repeats the clipboard. + * + * @author sk89q + */ +public class ClipboardPattern implements Pattern { + /** + * Clipboard. + */ + private CuboidClipboard clipboard; + /** + * Size of the clipboard. + */ + private Vector size; + + /** + * Construct the object. + * + * @param blockType + */ + public ClipboardPattern(CuboidClipboard clipboard) { + this.clipboard = clipboard; + this.size = clipboard.getSize(); + } + + /** + * Get next block. + * + * @param pos + * @return + */ + public BaseBlock next(Vector pos) { + int x = Math.abs(pos.getBlockX()) % size.getBlockX(); + int y = Math.abs(pos.getBlockY()) % size.getBlockY(); + int z = Math.abs(pos.getBlockZ()) % size.getBlockZ(); + + return clipboard.getPoint(new Vector(x, y, z)); + } +}