/* * WorldEdit, a Minecraft world manipulation toolkit * Copyright (C) sk89q * Copyright (C) WorldEdit team and contributors * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser 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 Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ package com.sk89q.worldedit.session; import static com.google.common.base.Preconditions.checkNotNull; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.transform.BlockTransformExtent; import com.sk89q.worldedit.function.mask.ExistingBlockMask; import com.sk89q.worldedit.function.operation.ForwardExtentCopy; import com.sk89q.worldedit.function.operation.Operation; import com.sk89q.worldedit.math.transform.Transform; /** * Builds an operation to paste the contents of a clipboard. */ public class PasteBuilder { private final Clipboard clipboard; private final Transform transform; private final Extent targetExtent; private Vector to = new Vector(); private boolean ignoreAirBlocks; /** * Create a new instance. * * @param holder the clipboard holder * @param targetExtent an extent */ PasteBuilder(ClipboardHolder holder, Extent targetExtent) { checkNotNull(holder); checkNotNull(targetExtent); this.clipboard = holder.getClipboard(); this.transform = holder.getTransform(); this.targetExtent = targetExtent; } /** * Set the target location. * * @param to the target location * @return this builder instance */ public PasteBuilder to(Vector to) { this.to = to; return this; } /** * Set whether air blocks in the source are skipped over when pasting. * * @return this builder instance */ public PasteBuilder ignoreAirBlocks(boolean ignoreAirBlocks) { this.ignoreAirBlocks = ignoreAirBlocks; return this; } /** * Build the operation. * * @return the operation */ public Operation build() { BlockTransformExtent extent = new BlockTransformExtent(clipboard, transform); ForwardExtentCopy copy = new ForwardExtentCopy(extent, clipboard.getRegion(), clipboard.getOrigin(), targetExtent, to); copy.setTransform(transform); if (ignoreAirBlocks) { copy.setSourceMask(new ExistingBlockMask(clipboard)); } return copy; } }