Skip to content

Commit 65b8e25

Browse files
authored
Merge pull request #199 from AlpsBTE/bug/fawe
Fix Plot-System eating up your storage like cookies
2 parents 51ffc09 + 7f2c42a commit 65b8e25

4 files changed

Lines changed: 31 additions & 11 deletions

File tree

src/main/java/com/alpsbte/plotsystem/core/system/plot/AbstractPlot.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@
1111
import com.alpsbte.plotsystem.utils.conversion.CoordinateConversion;
1212
import com.alpsbte.plotsystem.utils.conversion.projection.OutOfProjectionBoundsException;
1313
import com.alpsbte.plotsystem.utils.enums.Status;
14-
import com.sk89q.worldedit.extent.clipboard.Clipboard;
14+
import com.fastasyncworldedit.core.extent.clipboard.CPUOptimizedClipboard;
1515
import com.sk89q.worldedit.extent.clipboard.io.BuiltInClipboardFormat;
1616
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
1717
import com.sk89q.worldedit.extent.clipboard.io.ClipboardReader;
1818
import com.sk89q.worldedit.math.BlockVector2;
1919
import com.sk89q.worldedit.math.BlockVector3;
2020
import com.sk89q.worldedit.math.Vector3;
21+
import com.sk89q.worldedit.regions.CuboidRegion;
2122
import org.jetbrains.annotations.NotNull;
2223
import org.jetbrains.annotations.Nullable;
2324

@@ -140,7 +141,9 @@ public String getGeoCoordinates() throws IOException {
140141
public BlockVector3 getCoordinates() throws IOException {
141142
ByteArrayInputStream inputStream = new ByteArrayInputStream(getInitialSchematicBytes());
142143
try (ClipboardReader reader = CLIPBOARD_FORMAT.getReader(inputStream)) {
143-
Clipboard clipboard = reader.read();
144+
var clipboard = reader.read(null, dimensions -> new CPUOptimizedClipboard(
145+
new CuboidRegion(null, BlockVector3.ZERO, dimensions.subtract(BlockVector3.ONE))
146+
));
144147
if (clipboard != null) return clipboard.getOrigin();
145148
}
146149
return null;
@@ -149,7 +152,9 @@ public BlockVector3 getCoordinates() throws IOException {
149152
public BlockVector3 getCenter() {
150153
ByteArrayInputStream inputStream = new ByteArrayInputStream(getInitialSchematicBytes());
151154
try (ClipboardReader reader = CLIPBOARD_FORMAT.getReader(inputStream)){
152-
Clipboard clipboard = reader.read();
155+
var clipboard = reader.read(null, dimensions -> new CPUOptimizedClipboard(
156+
new CuboidRegion(null, BlockVector3.ZERO, dimensions.subtract(BlockVector3.ONE))
157+
));
153158
if (clipboard != null) {
154159
Vector3 clipboardCenter = clipboard.getRegion().getCenter();
155160
return BlockVector3.at(clipboardCenter.x(), this.getWorld().getPlotHeightCentered(), clipboardCenter.z());

src/main/java/com/alpsbte/plotsystem/core/system/plot/utils/PlotUtils.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
import com.alpsbte.plotsystem.utils.io.ConfigPaths;
2121
import com.alpsbte.plotsystem.utils.io.LangPaths;
2222
import com.alpsbte.plotsystem.utils.io.LangUtil;
23+
import com.fastasyncworldedit.core.extent.clipboard.CPUOptimizedClipboard;
2324
import com.github.fierioziy.particlenativeapi.api.ParticleNativeAPI;
2425
import com.github.fierioziy.particlenativeapi.api.Particles_1_13;
2526
import com.github.fierioziy.particlenativeapi.plugin.ParticleNativePlugin;
2627
import com.sk89q.worldedit.WorldEditException;
2728
import com.sk89q.worldedit.bukkit.BukkitAdapter;
2829
import com.sk89q.worldedit.bukkit.BukkitWorld;
29-
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
3030
import com.sk89q.worldedit.extent.clipboard.Clipboard;
3131
import com.sk89q.worldedit.extent.clipboard.io.ClipboardReader;
3232
import com.sk89q.worldedit.extent.clipboard.io.ClipboardWriter;
@@ -182,7 +182,9 @@ public static boolean isPlayerOnPlot(@NotNull AbstractPlot plot, Player player)
182182
public static @Nullable CuboidRegion getPlotAsRegion(@NotNull AbstractPlot plot) throws IOException {
183183
Clipboard clipboard;
184184
try (ClipboardReader reader = AbstractPlot.CLIPBOARD_FORMAT.getReader(new ByteArrayInputStream(plot.getInitialSchematicBytes()))) {
185-
clipboard = reader.read();
185+
clipboard = reader.read(null, dimensions -> new CPUOptimizedClipboard(
186+
new CuboidRegion(null, BlockVector3.ZERO, dimensions.subtract(BlockVector3.ONE))
187+
));
186188
}
187189
if (clipboard == null) return null;
188190

@@ -202,7 +204,9 @@ public static boolean isPlotWorld(@NotNull World world) {
202204
Clipboard clipboard;
203205
ByteArrayInputStream inputStream = new ByteArrayInputStream(plot.getInitialSchematicBytes());
204206
try (ClipboardReader reader = AbstractPlot.CLIPBOARD_FORMAT.getReader(inputStream)) {
205-
clipboard = reader.read();
207+
clipboard = reader.read(null, dimensions -> new CPUOptimizedClipboard(
208+
new CuboidRegion(null, BlockVector3.ZERO, dimensions.subtract(BlockVector3.ONE))
209+
));
206210
}
207211

208212
Polygonal2DRegion region = new Polygonal2DRegion(
@@ -212,7 +216,7 @@ public static boolean isPlotWorld(@NotNull World world) {
212216
clipboard.getMaximumPoint().y()
213217
);
214218

215-
BlockArrayClipboard newClipboard = new BlockArrayClipboard(region);
219+
Clipboard newClipboard = new CPUOptimizedClipboard(region);
216220
newClipboard.setOrigin(BlockVector3.at(region.getCenter().x(), region.getMinimumPoint().y(), region.getCenter().z()));
217221
ForwardExtentCopy copy = new ForwardExtentCopy(
218222
clipboard,
@@ -262,7 +266,7 @@ public static boolean savePlotAsSchematic(@NotNull Plot plot) throws IOException
262266

263267
// Copy and write finished plot clipboard to schematic
264268
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
265-
try (Clipboard cb = new BlockArrayClipboard(region)) {
269+
try (Clipboard cb = new CPUOptimizedClipboard(region)) {
266270
cb.setOrigin(BlockVector3.at(plotCenter.x(), cuboidRegion.getMinimumY(), (double) plotCenter.z()));
267271

268272
ForwardExtentCopy forwardExtentCopy = new ForwardExtentCopy(Objects.requireNonNull(region.getWorld()), region, cb, region.getMinimumPoint());
@@ -293,7 +297,9 @@ public static boolean savePlotAsSchematic(@NotNull Plot plot) throws IOException
293297
Clipboard clipboard;
294298
ByteArrayInputStream inputStream = new ByteArrayInputStream(plot.getInitialSchematicBytes());
295299
try (ClipboardReader reader = AbstractPlot.CLIPBOARD_FORMAT.getReader(inputStream)) {
296-
clipboard = reader.read();
300+
clipboard = reader.read(null, dimensions -> new CPUOptimizedClipboard(
301+
new CuboidRegion(null, BlockVector3.ZERO, dimensions.subtract(BlockVector3.ONE))
302+
));
297303
}
298304
if (clipboard == null) return null;
299305

src/main/java/com/alpsbte/plotsystem/core/system/plot/world/CityPlotWorld.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
import com.alpsbte.plotsystem.utils.Utils;
77
import com.alpsbte.plotsystem.utils.io.LangPaths;
88
import com.alpsbte.plotsystem.utils.io.LangUtil;
9+
import com.fastasyncworldedit.core.extent.clipboard.CPUOptimizedClipboard;
910
import com.google.common.annotations.Beta;
1011
import com.sk89q.worldedit.extent.clipboard.Clipboard;
1112
import com.sk89q.worldedit.extent.clipboard.io.ClipboardReader;
13+
import com.sk89q.worldedit.math.BlockVector3;
14+
import com.sk89q.worldedit.regions.CuboidRegion;
1215
import org.bukkit.entity.Player;
1316
import org.jetbrains.annotations.NotNull;
1417

@@ -74,7 +77,9 @@ public int getWorldHeight() throws IOException {
7477
Clipboard clipboard;
7578
ByteArrayInputStream inputStream = new ByteArrayInputStream(getPlot().getInitialSchematicBytes());
7679
try (ClipboardReader reader = AbstractPlot.CLIPBOARD_FORMAT.getReader(inputStream)) {
77-
clipboard = reader.read();
80+
clipboard = reader.read(null, dimensions -> new CPUOptimizedClipboard(
81+
new CuboidRegion(null, BlockVector3.ZERO, dimensions.subtract(BlockVector3.ONE))
82+
));
7883
}
7984
if (clipboard != null) {
8085
int plotHeight = clipboard.getMinimumPoint().y();

src/main/java/com/alpsbte/plotsystem/core/system/plot/world/PlotWorld.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
import com.alpsbte.plotsystem.core.system.plot.generator.AbstractPlotGenerator;
99
import com.alpsbte.plotsystem.utils.DependencyManager;
1010
import com.alpsbte.plotsystem.utils.Utils;
11+
import com.fastasyncworldedit.core.extent.clipboard.CPUOptimizedClipboard;
1112
import com.sk89q.worldedit.bukkit.BukkitAdapter;
1213
import com.sk89q.worldedit.extent.clipboard.Clipboard;
1314
import com.sk89q.worldedit.extent.clipboard.io.ClipboardReader;
1415
import com.sk89q.worldedit.math.BlockVector3;
16+
import com.sk89q.worldedit.regions.CuboidRegion;
1517
import com.sk89q.worldguard.WorldGuard;
1618
import com.sk89q.worldguard.protection.managers.RegionManager;
1719
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
@@ -142,7 +144,9 @@ public int getPlotHeightCentered() throws IOException {
142144
Clipboard clipboard;
143145
ByteArrayInputStream inputStream = new ByteArrayInputStream(plot.getInitialSchematicBytes());
144146
try (ClipboardReader reader = AbstractPlot.CLIPBOARD_FORMAT.getReader(inputStream)) {
145-
clipboard = reader.read();
147+
clipboard = reader.read(null, dimensions -> new CPUOptimizedClipboard(
148+
new CuboidRegion(null, BlockVector3.ZERO, dimensions.subtract(BlockVector3.ONE))
149+
));
146150
}
147151
if (clipboard != null) {
148152
return (int) clipboard.getRegion().getCenter().y() - clipboard.getMinimumPoint().y();

0 commit comments

Comments
 (0)