/* * CraftBook Copyright (C) 2010-2017 sk89q <http://www.sk89q.com> * CraftBook Copyright (C) 2011-2017 me4502 <http://www.me4502.com> * CraftBook Copyright (C) Contributors * * 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 <http://www.gnu.org/licenses/>. */ package com.sk89q.craftbook.sponge.mechanics.area.complex; import com.sk89q.worldedit.CuboidClipboard; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.MaxChangedBlocksException; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.blocks.BaseBlock; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.schematic.SchematicFormat; import com.sk89q.worldedit.sponge.SpongeWorldEdit; import com.sk89q.worldedit.world.DataException; import org.spongepowered.api.world.World; import java.io.File; import java.io.IOException; public class MCEditCuboidCopy extends CuboidCopy { private CuboidClipboard clipboard; public MCEditCuboidCopy(Vector origin, Vector size, World world) { super(origin, size, world); clipboard = new CuboidClipboard(size, origin); } MCEditCuboidCopy(World world) { // for loading from file this.world = world; } @Override public void save(File file) throws IOException, DataException { SchematicFormat.MCEDIT.save(clipboard, file); } @Override protected void loadFromFile(File file) throws IOException, CuboidCopyException, DataException { clipboard = SchematicFormat.MCEDIT.load(file); origin = clipboard.getOrigin(); size = clipboard.getSize(); width = size.getBlockX(); height = size.getBlockY(); length = size.getBlockZ(); } @Override public void paste() { try { EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(SpongeWorldEdit.inst().getWorld(world), -1); editSession.enableQueue(); clipboard.place(editSession, origin, false); editSession.flushQueue(); } catch (MaxChangedBlocksException e) { // is never thrown because we are on infinite mode } } @Override public void clear() { try { CuboidRegion region = new CuboidRegion(origin, origin.add(size.getX() - 1, size.getY() - 1, size.getZ() - 1)); EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(SpongeWorldEdit.inst().getWorld(world), -1); editSession.enableQueue(); editSession.setBlocks(region, new BaseBlock(0)); editSession.flushQueue(); } catch (MaxChangedBlocksException e) { // is never thrown } } @Override public void copy() { EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(SpongeWorldEdit.inst().getWorld(world), -1); editSession.enableQueue(); clipboard.copy(editSession); editSession.flushQueue(); } }