mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-26 07:06:44 +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>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
</properties>
|
</properties>
|
||||||
<artifactId>PlotSquared</artifactId>
|
<artifactId>PlotSquared</artifactId>
|
||||||
<version>2.7.2</version>
|
<version>2.7.3</version>
|
||||||
<name>PlotSquared</name>
|
<name>PlotSquared</name>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<build>
|
<build>
|
||||||
|
@ -1021,7 +1021,7 @@ public class PlotMain extends JavaPlugin implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
System.out.print("ERRRRRRRRRRRRRR 6");
|
PlotMain.sendConsoleSenderMessage("&d=== Oh no! Please set the generator for the " + world + " ===");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
LOADING_WORLD = false;
|
LOADING_WORLD = false;
|
||||||
removePlotWorld(world);
|
removePlotWorld(world);
|
||||||
@ -1594,7 +1594,7 @@ public class PlotMain extends JavaPlugin implements Listener {
|
|||||||
try {
|
try {
|
||||||
AbstractSetBlock.setBlockManager = new SetBlockFast_1_8();
|
AbstractSetBlock.setBlockManager = new SetBlockFast_1_8();
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
AbstractSetBlock.setBlockManager = new SetBlockSlow();
|
AbstractSetBlock.setBlockManager = new SetBlockSlow();
|
||||||
}
|
}
|
||||||
@ -1602,7 +1602,7 @@ public class PlotMain extends JavaPlugin implements Listener {
|
|||||||
else {
|
else {
|
||||||
try {
|
try {
|
||||||
AbstractSetBlock.setBlockManager = new SetBlockFast();
|
AbstractSetBlock.setBlockManager = new SetBlockFast();
|
||||||
} catch (NoSuchMethodException e) {
|
} catch (Throwable e) {
|
||||||
AbstractSetBlock.setBlockManager = new SetBlockSlow();
|
AbstractSetBlock.setBlockManager = new SetBlockSlow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1619,7 +1619,7 @@ public class PlotMain extends JavaPlugin implements Listener {
|
|||||||
}
|
}
|
||||||
// Handle UUIDS
|
// Handle UUIDS
|
||||||
{
|
{
|
||||||
boolean checkVersion = checkVersion(1, 7, 5);
|
boolean checkVersion = checkVersion(1, 7, 6);
|
||||||
if (!checkVersion) {
|
if (!checkVersion) {
|
||||||
sendConsoleSenderMessage(C.PREFIX.s()+" &c[WARN] Titles are disabled - please update your version of Bukkit to support this feature.");
|
sendConsoleSenderMessage(C.PREFIX.s()+" &c[WARN] Titles are disabled - please update your version of Bukkit to support this feature.");
|
||||||
Settings.TITLES = false;
|
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 class Move extends SubCommand {
|
||||||
|
|
||||||
public Move() {
|
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
|
@Override
|
||||||
public boolean execute(final Player plr, final String... args) {
|
public boolean execute(final Player plr, final String... args) {
|
||||||
|
if (plr == null) {
|
||||||
|
PlayerFunctions.sendMessage(plr, "MUST BE EXECUTED BY PLAYER");
|
||||||
|
}
|
||||||
World world = plr.getWorld();
|
World world = plr.getWorld();
|
||||||
PlotId plot1 = PlotHelper.parseId(args[0]);
|
PlotId plot1 = PlotHelper.parseId(args[0]);
|
||||||
PlotId plot2 = PlotHelper.parseId(args[1]);
|
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)) {
|
if (move(world, plot1, plot2, null)) {
|
||||||
PlayerFunctions.sendMessage(plr, "MOVE SUCCESS");
|
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) {
|
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 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);
|
final Plot currentPlot = PlotHelper.getPlot(world, current);
|
||||||
if (currentPlot.owner == null) {
|
if (currentPlot.owner == null) {
|
||||||
return false;
|
return false;
|
||||||
@ -79,7 +88,7 @@ public class Move extends SubCommand {
|
|||||||
|
|
||||||
int offset_x = newPlot.x - current.x;
|
int offset_x = newPlot.x - current.x;
|
||||||
int offset_y = newPlot.y - current.y;
|
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();
|
String worldname = world.getName();
|
||||||
for (PlotId id : selection) {
|
for (PlotId id : selection) {
|
||||||
DBFunc.movePlot(world.getName(), new PlotId(id.x, id.y), new PlotId(id.x + offset_x, id.y + offset_y));
|
DBFunc.movePlot(world.getName(), new PlotId(id.x, id.y), new PlotId(id.x + offset_x, id.y + offset_y));
|
||||||
@ -92,11 +101,9 @@ public class Move extends SubCommand {
|
|||||||
ChunkManager.copyRegion(bot1, top, bot2, new Runnable() {
|
ChunkManager.copyRegion(bot1, top, bot2, new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
PlotHelper.clear(null, world, PlotHelper.getPlot(world, current), true);
|
ChunkManager.regenerateRegion(bot1, top, null);
|
||||||
if (whenDone != null) {
|
|
||||||
TaskManager.runTaskLater(whenDone, 1);
|
TaskManager.runTaskLater(whenDone, 1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.intellectualcrafters.plot.generator;
|
package com.intellectualcrafters.plot.generator;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
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.PlotManager;
|
||||||
import com.intellectualcrafters.plot.object.PlotWorld;
|
import com.intellectualcrafters.plot.object.PlotWorld;
|
||||||
import com.intellectualcrafters.plot.object.RegionWrapper;
|
import com.intellectualcrafters.plot.object.RegionWrapper;
|
||||||
|
import com.intellectualcrafters.plot.util.AbstractSetBlock;
|
||||||
import com.intellectualcrafters.plot.util.ChunkManager;
|
import com.intellectualcrafters.plot.util.ChunkManager;
|
||||||
import com.intellectualcrafters.plot.util.PlotHelper;
|
import com.intellectualcrafters.plot.util.PlotHelper;
|
||||||
import com.intellectualcrafters.plot.util.TaskManager;
|
import com.intellectualcrafters.plot.util.TaskManager;
|
||||||
@ -129,8 +131,8 @@ public class AugmentedPopulator extends BlockPopulator {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
populateBiome(world, x, z);
|
populateBiome(world, x, z);
|
||||||
chunk.unload();
|
chunk.unload(true, false);
|
||||||
chunk.load();
|
AbstractSetBlock.setBlockManager.update(Arrays.asList( new Chunk[] {chunk}));
|
||||||
}
|
}
|
||||||
}, 20);
|
}, 20);
|
||||||
}
|
}
|
||||||
@ -146,8 +148,8 @@ public class AugmentedPopulator extends BlockPopulator {
|
|||||||
public void run() {
|
public void run() {
|
||||||
chunk.load(true);
|
chunk.load(true);
|
||||||
populateBlocks(world, rand, X, Z, x, z, check);
|
populateBlocks(world, rand, X, Z, x, z, check);
|
||||||
chunk.unload();
|
chunk.unload(true, false);
|
||||||
chunk.load();
|
AbstractSetBlock.setBlockManager.update(Arrays.asList( new Chunk[] {chunk}));
|
||||||
}
|
}
|
||||||
}, 40 + rand.nextInt(40));
|
}, 40 + rand.nextInt(40));
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.intellectualcrafters.plot.util;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
||||||
@ -129,6 +130,9 @@ public class ChunkManager {
|
|||||||
|
|
||||||
private static HashSet<EntityWrapper> entities;
|
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) {
|
public static boolean copyRegion(final Location pos1, final Location pos2, final Location newPos, final Runnable whenDone) {
|
||||||
int relX = newPos.getBlockX() - pos1.getBlockX();
|
int relX = newPos.getBlockX() - pos1.getBlockX();
|
||||||
int relZ = newPos.getBlockZ() - pos1.getBlockZ();
|
int relZ = newPos.getBlockZ() - pos1.getBlockZ();
|
||||||
@ -138,6 +142,9 @@ public class ChunkManager {
|
|||||||
Chunk c1 = world.getChunkAt(pos1);
|
Chunk c1 = world.getChunkAt(pos1);
|
||||||
Chunk c2 = world.getChunkAt(pos2);
|
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 sx = pos1.getBlockX();
|
||||||
final int sz = pos1.getBlockZ();
|
final int sz = pos1.getBlockZ();
|
||||||
final int ex = pos2.getBlockX();
|
final int ex = pos2.getBlockX();
|
||||||
@ -148,17 +155,33 @@ public class ChunkManager {
|
|||||||
final int c2x = c2.getX();
|
final int c2x = c2.getX();
|
||||||
final int c2z = c2.getZ();
|
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
|
// Copy entities
|
||||||
|
ArrayList<Chunk> chunks = new ArrayList<>();
|
||||||
initMaps();
|
initMaps();
|
||||||
for (int x = c1x; x <= c2x; x ++) {
|
for (int x = c3x; x <= c4x; x ++) {
|
||||||
for (int z = c1z; z <= c2z; z ++) {
|
for (int z = c3z; z <= c4z; z ++) {
|
||||||
Chunk chunk = world.getChunkAt(x, z);
|
Chunk chunk = world.getChunkAt(x, z);
|
||||||
|
chunks.add(chunk);
|
||||||
chunk.load(false);
|
chunk.load(false);
|
||||||
saveEntitiesIn(chunk, region);
|
saveEntitiesIn(chunk, region);
|
||||||
restoreEntities(world, relX, relZ);
|
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
|
// Copy blocks
|
||||||
int maxY = world.getMaxHeight();
|
int maxY = world.getMaxHeight();
|
||||||
for (int x = sx; x <= ex; x++) {
|
for (int x = sx; x <= ex; x++) {
|
||||||
@ -173,9 +196,11 @@ public class ChunkManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
restoreBlocks(world, relX, relZ);
|
restoreBlocks(world, relX, relZ);
|
||||||
|
|
||||||
TaskManager.runTaskLater(whenDone, 1);
|
TaskManager.runTaskLater(whenDone, 1);
|
||||||
|
AbstractSetBlock.setBlockManager.update(chunks);
|
||||||
|
for (Chunk chunk : chunks) {
|
||||||
|
chunk.unload(true, false);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,8 +289,8 @@ public class ChunkManager {
|
|||||||
restoreBlocks(world, 0, 0);
|
restoreBlocks(world, 0, 0);
|
||||||
restoreEntities(world, 0, 0);
|
restoreEntities(world, 0, 0);
|
||||||
}
|
}
|
||||||
chunk.unload();
|
chunk.unload(true, false);
|
||||||
chunk.load();
|
AbstractSetBlock.setBlockManager.update(Arrays.asList( new Chunk[] {chunk}));
|
||||||
}
|
}
|
||||||
CURRENT_PLOT_CLEAR = null;
|
CURRENT_PLOT_CLEAR = null;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.intellectualcrafters.plot.util;
|
package com.intellectualcrafters.plot.util;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -287,16 +288,15 @@ public class ClusterManager {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (populator == null || plotworld.TYPE == 0) {
|
if (populator == null || plotworld.TYPE == 0) {
|
||||||
|
AbstractSetBlock.setBlockManager.update(Arrays.asList( new Chunk[] {chunk}));
|
||||||
world.regenerateChunk(chunk.getX(), chunk.getZ());
|
world.regenerateChunk(chunk.getX(), chunk.getZ());
|
||||||
chunk.unload();
|
chunk.unload(true, false);
|
||||||
chunk.load();
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
populator.populate(world, rand, chunk);
|
populator.populate(world, rand, chunk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, i);
|
}, i);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user