mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-23 12:06:15 +01:00
reduce memory usage
This commit is contained in:
parent
eba445cd23
commit
1e8ce84769
@ -8,7 +8,7 @@
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
<artifactId>PlotSquared</artifactId>
|
||||
<version>2.7.2</version>
|
||||
<version>2.7.3</version>
|
||||
<name>PlotSquared</name>
|
||||
<packaging>jar</packaging>
|
||||
<build>
|
||||
|
@ -1021,7 +1021,7 @@ public class PlotMain extends JavaPlugin implements Listener {
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.print("ERRRRRRRRRRRRRR 6");
|
||||
PlotMain.sendConsoleSenderMessage("&d=== Oh no! Please set the generator for the " + world + " ===");
|
||||
e.printStackTrace();
|
||||
LOADING_WORLD = false;
|
||||
removePlotWorld(world);
|
||||
@ -1594,7 +1594,7 @@ public class PlotMain extends JavaPlugin implements Listener {
|
||||
try {
|
||||
AbstractSetBlock.setBlockManager = new SetBlockFast_1_8();
|
||||
}
|
||||
catch (Exception e) {
|
||||
catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
AbstractSetBlock.setBlockManager = new SetBlockSlow();
|
||||
}
|
||||
@ -1602,7 +1602,7 @@ public class PlotMain extends JavaPlugin implements Listener {
|
||||
else {
|
||||
try {
|
||||
AbstractSetBlock.setBlockManager = new SetBlockFast();
|
||||
} catch (NoSuchMethodException e) {
|
||||
} catch (Throwable e) {
|
||||
AbstractSetBlock.setBlockManager = new SetBlockSlow();
|
||||
}
|
||||
}
|
||||
@ -1619,7 +1619,7 @@ public class PlotMain extends JavaPlugin implements Listener {
|
||||
}
|
||||
// Handle UUIDS
|
||||
{
|
||||
boolean checkVersion = checkVersion(1, 7, 5);
|
||||
boolean checkVersion = checkVersion(1, 7, 6);
|
||||
if (!checkVersion) {
|
||||
sendConsoleSenderMessage(C.PREFIX.s()+" &c[WARN] Titles are disabled - please update your version of Bukkit to support this feature.");
|
||||
Settings.TITLES = false;
|
||||
|
@ -0,0 +1,79 @@
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// PlotSquared - A plot manager and world generator for the Bukkit API /
|
||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters /
|
||||
// /
|
||||
// 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, write to the Free Software Foundation, /
|
||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA /
|
||||
// /
|
||||
// You can contact us via: support@intellectualsites.com /
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
package com.intellectualcrafters.plot.commands;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.intellectualcrafters.plot.PlotMain;
|
||||
import com.intellectualcrafters.plot.config.C;
|
||||
import com.intellectualcrafters.plot.generator.HybridPlotManager;
|
||||
import com.intellectualcrafters.plot.generator.HybridPlotWorld;
|
||||
import com.intellectualcrafters.plot.object.ChunkLoc;
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
import com.intellectualcrafters.plot.object.PlotId;
|
||||
import com.intellectualcrafters.plot.util.ChunkManager;
|
||||
import com.intellectualcrafters.plot.util.ExpireManager;
|
||||
import com.intellectualcrafters.plot.util.PlayerFunctions;
|
||||
import com.intellectualcrafters.plot.util.PlotHelper;
|
||||
import com.intellectualcrafters.plot.util.TaskManager;
|
||||
|
||||
public class Condense extends SubCommand {
|
||||
|
||||
public static boolean TASK = false;
|
||||
private static int TASK_ID = 0;
|
||||
|
||||
public Condense() {
|
||||
super("condense", "plots.admin", "Condense a plotworld", "condense", "", CommandCategory.DEBUG, false);
|
||||
}
|
||||
|
||||
public PlotId getId(String id) {
|
||||
try {
|
||||
String[] split = id.split(";");
|
||||
return new PlotId(Integer.parseInt(split[0]), Integer.parseInt(split[1]));
|
||||
}
|
||||
catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(final Player plr, final String... args) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void sendMessage(final String message) {
|
||||
PlotMain.sendConsoleSenderMessage("&3PlotSquared -> Plot condense&8: &7" + message);
|
||||
}
|
||||
|
||||
}
|
@ -45,14 +45,23 @@ import com.intellectualcrafters.plot.util.TaskManager;
|
||||
public class Move extends SubCommand {
|
||||
|
||||
public Move() {
|
||||
super("move", "plots.admin", "plot moving debug test", "move", "condense", CommandCategory.DEBUG, false);
|
||||
super("move", "plots.admin", "plot moving debug test", "move", "condense", CommandCategory.DEBUG, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(final Player plr, final String... args) {
|
||||
if (plr == null) {
|
||||
PlayerFunctions.sendMessage(plr, "MUST BE EXECUTED BY PLAYER");
|
||||
}
|
||||
World world = plr.getWorld();
|
||||
PlotId plot1 = PlotHelper.parseId(args[0]);
|
||||
PlotId plot2 = PlotHelper.parseId(args[1]);
|
||||
if (plot1 == null || plot2 == null) {
|
||||
PlayerFunctions.sendMessage(plr, "INVALID PLOT ID\n/plot move <pos1> <pos2>");
|
||||
}
|
||||
if (plot1 == plot2) {
|
||||
PlayerFunctions.sendMessage(plr, "DUPLICATE ID");
|
||||
}
|
||||
if (move(world, plot1, plot2, null)) {
|
||||
PlayerFunctions.sendMessage(plr, "MOVE SUCCESS");
|
||||
}
|
||||
@ -63,9 +72,9 @@ public class Move extends SubCommand {
|
||||
}
|
||||
|
||||
public boolean move(final World world, final PlotId current, PlotId newPlot, final Runnable whenDone) {
|
||||
Location bot1 = PlotHelper.getPlotBottomLoc(world, current);
|
||||
final Location bot1 = PlotHelper.getPlotBottomLoc(world, current);
|
||||
Location bot2 = PlotHelper.getPlotBottomLoc(world, newPlot);
|
||||
Location top = PlotHelper.getPlotTopLoc(world, current);
|
||||
final Location top = PlotHelper.getPlotTopLoc(world, current);
|
||||
final Plot currentPlot = PlotHelper.getPlot(world, current);
|
||||
if (currentPlot.owner == null) {
|
||||
return false;
|
||||
@ -79,7 +88,7 @@ public class Move extends SubCommand {
|
||||
|
||||
int offset_x = newPlot.x - current.x;
|
||||
int offset_y = newPlot.y - current.y;
|
||||
ArrayList<PlotId> selection = PlayerFunctions.getPlotSelectionIds(pos1.id, pos2.id);
|
||||
final ArrayList<PlotId> selection = PlayerFunctions.getPlotSelectionIds(pos1.id, pos2.id);
|
||||
String worldname = world.getName();
|
||||
for (PlotId id : selection) {
|
||||
DBFunc.movePlot(world.getName(), new PlotId(id.x, id.y), new PlotId(id.x + offset_x, id.y + offset_y));
|
||||
@ -92,10 +101,8 @@ public class Move extends SubCommand {
|
||||
ChunkManager.copyRegion(bot1, top, bot2, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
PlotHelper.clear(null, world, PlotHelper.getPlot(world, current), true);
|
||||
if (whenDone != null) {
|
||||
TaskManager.runTaskLater(whenDone, 1);
|
||||
}
|
||||
ChunkManager.regenerateRegion(bot1, top, null);
|
||||
TaskManager.runTaskLater(whenDone, 1);
|
||||
}
|
||||
});
|
||||
return true;
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.intellectualcrafters.plot.generator;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Random;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
@ -16,6 +17,7 @@ import com.intellectualcrafters.plot.object.PlotId;
|
||||
import com.intellectualcrafters.plot.object.PlotManager;
|
||||
import com.intellectualcrafters.plot.object.PlotWorld;
|
||||
import com.intellectualcrafters.plot.object.RegionWrapper;
|
||||
import com.intellectualcrafters.plot.util.AbstractSetBlock;
|
||||
import com.intellectualcrafters.plot.util.ChunkManager;
|
||||
import com.intellectualcrafters.plot.util.PlotHelper;
|
||||
import com.intellectualcrafters.plot.util.TaskManager;
|
||||
@ -129,8 +131,8 @@ public class AugmentedPopulator extends BlockPopulator {
|
||||
@Override
|
||||
public void run() {
|
||||
populateBiome(world, x, z);
|
||||
chunk.unload();
|
||||
chunk.load();
|
||||
chunk.unload(true, false);
|
||||
AbstractSetBlock.setBlockManager.update(Arrays.asList( new Chunk[] {chunk}));
|
||||
}
|
||||
}, 20);
|
||||
}
|
||||
@ -146,8 +148,8 @@ public class AugmentedPopulator extends BlockPopulator {
|
||||
public void run() {
|
||||
chunk.load(true);
|
||||
populateBlocks(world, rand, X, Z, x, z, check);
|
||||
chunk.unload();
|
||||
chunk.load();
|
||||
chunk.unload(true, false);
|
||||
AbstractSetBlock.setBlockManager.update(Arrays.asList( new Chunk[] {chunk}));
|
||||
}
|
||||
}, 40 + rand.nextInt(40));
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package com.intellectualcrafters.plot.util;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
||||
@ -129,6 +130,9 @@ public class ChunkManager {
|
||||
|
||||
private static HashSet<EntityWrapper> entities;
|
||||
|
||||
/**
|
||||
* Copy a region to a new location (in the same world)
|
||||
*/
|
||||
public static boolean copyRegion(final Location pos1, final Location pos2, final Location newPos, final Runnable whenDone) {
|
||||
int relX = newPos.getBlockX() - pos1.getBlockX();
|
||||
int relZ = newPos.getBlockZ() - pos1.getBlockZ();
|
||||
@ -138,6 +142,9 @@ public class ChunkManager {
|
||||
Chunk c1 = world.getChunkAt(pos1);
|
||||
Chunk c2 = world.getChunkAt(pos2);
|
||||
|
||||
Chunk c3 = world.getChunkAt(pos1.getBlockX() + relX, pos1.getBlockZ() + relZ);
|
||||
Chunk c4 = world.getChunkAt(pos2.getBlockX() + relX, pos2.getBlockZ() + relZ);
|
||||
|
||||
final int sx = pos1.getBlockX();
|
||||
final int sz = pos1.getBlockZ();
|
||||
final int ex = pos2.getBlockX();
|
||||
@ -148,17 +155,33 @@ public class ChunkManager {
|
||||
final int c2x = c2.getX();
|
||||
final int c2z = c2.getZ();
|
||||
|
||||
final int c3x = c3.getX();
|
||||
final int c3z = c3.getZ();
|
||||
final int c4x = c4.getX();
|
||||
final int c4z = c4.getZ();
|
||||
|
||||
// Copy entities
|
||||
ArrayList<Chunk> chunks = new ArrayList<>();
|
||||
initMaps();
|
||||
for (int x = c1x; x <= c2x; x ++) {
|
||||
for (int z = c1z; z <= c2z; z ++) {
|
||||
for (int x = c3x; x <= c4x; x ++) {
|
||||
for (int z = c3z; z <= c4z; z ++) {
|
||||
Chunk chunk = world.getChunkAt(x, z);
|
||||
chunks.add(chunk);
|
||||
chunk.load(false);
|
||||
saveEntitiesIn(chunk, region);
|
||||
restoreEntities(world, relX, relZ);
|
||||
}
|
||||
}
|
||||
|
||||
// Load chunks
|
||||
for (int x = c1x; x <= c2x; x ++) {
|
||||
for (int z = c1z; z <= c2z; z ++) {
|
||||
Chunk chunk = world.getChunkAt(x, z);
|
||||
chunk.load(true);
|
||||
chunks.add(chunk);
|
||||
}
|
||||
}
|
||||
|
||||
// Copy blocks
|
||||
int maxY = world.getMaxHeight();
|
||||
for (int x = sx; x <= ex; x++) {
|
||||
@ -173,9 +196,11 @@ public class ChunkManager {
|
||||
}
|
||||
}
|
||||
restoreBlocks(world, relX, relZ);
|
||||
|
||||
TaskManager.runTaskLater(whenDone, 1);
|
||||
|
||||
AbstractSetBlock.setBlockManager.update(chunks);
|
||||
for (Chunk chunk : chunks) {
|
||||
chunk.unload(true, false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -264,8 +289,8 @@ public class ChunkManager {
|
||||
restoreBlocks(world, 0, 0);
|
||||
restoreEntities(world, 0, 0);
|
||||
}
|
||||
chunk.unload();
|
||||
chunk.load();
|
||||
chunk.unload(true, false);
|
||||
AbstractSetBlock.setBlockManager.update(Arrays.asList( new Chunk[] {chunk}));
|
||||
}
|
||||
CURRENT_PLOT_CLEAR = null;
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.intellectualcrafters.plot.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
@ -287,16 +288,15 @@ public class ClusterManager {
|
||||
@Override
|
||||
public void run() {
|
||||
if (populator == null || plotworld.TYPE == 0) {
|
||||
AbstractSetBlock.setBlockManager.update(Arrays.asList( new Chunk[] {chunk}));
|
||||
world.regenerateChunk(chunk.getX(), chunk.getZ());
|
||||
chunk.unload();
|
||||
chunk.load();
|
||||
chunk.unload(true, false);
|
||||
}
|
||||
else {
|
||||
populator.populate(world, rand, chunk);
|
||||
}
|
||||
}
|
||||
}, i);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user