mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-29 13:05:41 +01:00
Actually save the schematic
This commit is contained in:
parent
4dd2613f2f
commit
113da81f29
@ -52,12 +52,15 @@ import com.plotsquared.core.util.StringMan;
|
|||||||
import com.plotsquared.core.util.WorldUtil;
|
import com.plotsquared.core.util.WorldUtil;
|
||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
|
import com.sk89q.worldedit.EditSession;
|
||||||
import com.sk89q.worldedit.LocalSession;
|
import com.sk89q.worldedit.LocalSession;
|
||||||
import com.sk89q.worldedit.WorldEdit;
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
import com.sk89q.worldedit.entity.Player;
|
import com.sk89q.worldedit.entity.Player;
|
||||||
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
|
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
|
||||||
import com.sk89q.worldedit.extent.clipboard.io.BuiltInClipboardFormat;
|
import com.sk89q.worldedit.extent.clipboard.io.BuiltInClipboardFormat;
|
||||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardWriter;
|
import com.sk89q.worldedit.extent.clipboard.io.ClipboardWriter;
|
||||||
|
import com.sk89q.worldedit.function.operation.ForwardExtentCopy;
|
||||||
|
import com.sk89q.worldedit.function.operation.Operations;
|
||||||
import com.sk89q.worldedit.math.BlockVector2;
|
import com.sk89q.worldedit.math.BlockVector2;
|
||||||
import com.sk89q.worldedit.math.BlockVector3;
|
import com.sk89q.worldedit.math.BlockVector3;
|
||||||
import com.sk89q.worldedit.regions.CuboidRegion;
|
import com.sk89q.worldedit.regions.CuboidRegion;
|
||||||
@ -109,22 +112,29 @@ public class Area extends SubCommand {
|
|||||||
MainUtil.sendMessage(player, Captions.SINGLE_AREA_MISSING_SELECTION);
|
MainUtil.sendMessage(player, Captions.SINGLE_AREA_MISSING_SELECTION);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Region selectedRegion = null;
|
Region playerSelectedRegion = null;
|
||||||
try {
|
try {
|
||||||
selectedRegion = localSession.getSelection(((Player) player.toActor()).getWorld());
|
playerSelectedRegion = localSession.getSelection(((Player) player.toActor()).getWorld());
|
||||||
} catch (final Exception ignored) {}
|
} catch (final Exception ignored) {}
|
||||||
if (selectedRegion == null) {
|
if (playerSelectedRegion == null) {
|
||||||
MainUtil.sendMessage(player, Captions.SINGLE_AREA_MISSING_SELECTION);
|
MainUtil.sendMessage(player, Captions.SINGLE_AREA_MISSING_SELECTION);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (selectedRegion.getWidth() != selectedRegion.getLength()) {
|
if (playerSelectedRegion.getWidth() != playerSelectedRegion.getLength()) {
|
||||||
MainUtil.sendMessage(player, Captions.SINGLE_AREA_NOT_SQUARE);
|
MainUtil.sendMessage(player, Captions.SINGLE_AREA_NOT_SQUARE);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (PlotSquared.get().getPlotAreaManager().getPlotAreas(
|
if (PlotSquared.get().getPlotAreaManager().getPlotAreas(
|
||||||
Objects.requireNonNull(selectedRegion.getWorld()).getName(), CuboidRegion.makeCuboid(selectedRegion)).length != 0) {
|
Objects.requireNonNull(playerSelectedRegion.getWorld()).getName(), CuboidRegion.makeCuboid(playerSelectedRegion)).length != 0) {
|
||||||
MainUtil.sendMessage(player, Captions.SINGLE_AREA_OVERLAPPING);
|
MainUtil.sendMessage(player, Captions.SINGLE_AREA_OVERLAPPING);
|
||||||
}
|
}
|
||||||
|
// Alter the region
|
||||||
|
final BlockVector3 playerSelectionMin = playerSelectedRegion.getMinimumPoint();
|
||||||
|
final BlockVector3 playerSelectionMax = playerSelectedRegion.getMaximumPoint();
|
||||||
|
// Create a new selection that spans the entire vertical range of the world
|
||||||
|
final CuboidRegion selectedRegion = new CuboidRegion(playerSelectedRegion.getWorld(),
|
||||||
|
BlockVector3.at(playerSelectionMin.getX(), 0, playerSelectionMin.getZ()),
|
||||||
|
BlockVector3.at(playerSelectionMax.getX(), 255, playerSelectionMax.getZ()));
|
||||||
// There's only one plot in the area...
|
// There's only one plot in the area...
|
||||||
final PlotId plotId = new PlotId(1, 1);
|
final PlotId plotId = new PlotId(1, 1);
|
||||||
final HybridPlotWorld hybridPlotWorld = new HybridPlotWorld(player.getLocation().getWorld(), args[1],
|
final HybridPlotWorld hybridPlotWorld = new HybridPlotWorld(player.getLocation().getWorld(), args[1],
|
||||||
@ -140,7 +150,7 @@ public class Area extends SubCommand {
|
|||||||
// Set the road width to 0
|
// Set the road width to 0
|
||||||
hybridPlotWorld.ROAD_WIDTH = hybridPlotWorld.ROAD_OFFSET_X = hybridPlotWorld.ROAD_OFFSET_Z = 0;
|
hybridPlotWorld.ROAD_WIDTH = hybridPlotWorld.ROAD_OFFSET_X = hybridPlotWorld.ROAD_OFFSET_Z = 0;
|
||||||
// Set the plot height to the selection height
|
// Set the plot height to the selection height
|
||||||
hybridPlotWorld.PLOT_HEIGHT = hybridPlotWorld.ROAD_HEIGHT = hybridPlotWorld.WALL_HEIGHT = selectedRegion.getMaximumPoint().getBlockY();
|
hybridPlotWorld.PLOT_HEIGHT = hybridPlotWorld.ROAD_HEIGHT = hybridPlotWorld.WALL_HEIGHT = playerSelectionMin.getBlockY();
|
||||||
// No sign plz
|
// No sign plz
|
||||||
hybridPlotWorld.setAllowSigns(false);
|
hybridPlotWorld.setAllowSigns(false);
|
||||||
final File parentFile = MainUtil.getFile(PlotSquared.imp().getDirectory(), "schematics" + File.separator +
|
final File parentFile = MainUtil.getFile(PlotSquared.imp().getDirectory(), "schematics" + File.separator +
|
||||||
@ -153,6 +163,11 @@ public class Area extends SubCommand {
|
|||||||
final File file = new File(parentFile, "plot.schem");
|
final File file = new File(parentFile, "plot.schem");
|
||||||
try (final ClipboardWriter clipboardWriter = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(file))) {
|
try (final ClipboardWriter clipboardWriter = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(file))) {
|
||||||
final BlockArrayClipboard clipboard = new BlockArrayClipboard(selectedRegion);
|
final BlockArrayClipboard clipboard = new BlockArrayClipboard(selectedRegion);
|
||||||
|
final EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(selectedRegion.getWorld(), -1);
|
||||||
|
final ForwardExtentCopy forwardExtentCopy = new ForwardExtentCopy(editSession, selectedRegion, clipboard, selectedRegion.getMinimumPoint());
|
||||||
|
forwardExtentCopy.setCopyingBiomes(true);
|
||||||
|
forwardExtentCopy.setCopyingEntities(true);
|
||||||
|
Operations.complete(forwardExtentCopy);
|
||||||
clipboardWriter.write(clipboard);
|
clipboardWriter.write(clipboard);
|
||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
MainUtil.sendMessage(player, Captions.SINGLE_AREA_FAILED_TO_SAVE);
|
MainUtil.sendMessage(player, Captions.SINGLE_AREA_FAILED_TO_SAVE);
|
||||||
|
@ -281,7 +281,7 @@ public class HybridPlotWorld extends ClassicPlotWorld {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PlotSquared.debug(Captions.PREFIX + "&3 - plot schematic: &7true");
|
PlotSquared.debug(Captions.PREFIX + "&3 - plot schematic: &7" + schematic3File.getPath());
|
||||||
}
|
}
|
||||||
if (schematic1 == null || schematic2 == null || this.ROAD_WIDTH == 0) {
|
if (schematic1 == null || schematic2 == null || this.ROAD_WIDTH == 0) {
|
||||||
PlotSquared.debug(Captions.PREFIX + "&3 - schematic: &7false");
|
PlotSquared.debug(Captions.PREFIX + "&3 - schematic: &7false");
|
||||||
|
Loading…
Reference in New Issue
Block a user