mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-25 22:56:45 +01:00
Fix /plot auto
performance and remove sign-guessing
This commit is contained in:
parent
0d4af3023d
commit
283ff945f3
@ -285,111 +285,112 @@ public class BukkitChunkManager extends ChunkManager {
|
|||||||
int zzb = z << 4;
|
int zzb = z << 4;
|
||||||
int xxt = xxb + 15;
|
int xxt = xxb + 15;
|
||||||
int zzt = zzb + 15;
|
int zzt = zzb + 15;
|
||||||
Chunk chunkObj = worldObj.getChunkAt(x, z);
|
PaperLib.getChunkAtAsync(worldObj, x, z, false).thenAccept(chunkObj -> {
|
||||||
if (!chunkObj.load(false)) {
|
if (chunkObj == null) {
|
||||||
continue;
|
return;
|
||||||
}
|
}
|
||||||
final LocalBlockQueue queue = GlobalBlockQueue.IMP.getNewQueue(world, false);
|
final LocalBlockQueue queue = GlobalBlockQueue.IMP.getNewQueue(world, false);
|
||||||
if (xxb >= p1x && xxt <= p2x && zzb >= p1z && zzt <= p2z) {
|
if (xxb >= p1x && xxt <= p2x && zzb >= p1z && zzt <= p2z) {
|
||||||
|
AugmentedUtils.bypass(ignoreAugment,
|
||||||
|
() -> queue.regenChunkSafe(chunk.getX(), chunk.getZ()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean checkX1 = false;
|
||||||
|
|
||||||
|
int xxb2;
|
||||||
|
|
||||||
|
if (x == bcx) {
|
||||||
|
xxb2 = p1x - 1;
|
||||||
|
checkX1 = true;
|
||||||
|
} else {
|
||||||
|
xxb2 = xxb;
|
||||||
|
}
|
||||||
|
boolean checkX2 = false;
|
||||||
|
int xxt2;
|
||||||
|
if (x == tcx) {
|
||||||
|
xxt2 = p2x + 1;
|
||||||
|
checkX2 = true;
|
||||||
|
} else {
|
||||||
|
xxt2 = xxt;
|
||||||
|
}
|
||||||
|
boolean checkZ1 = false;
|
||||||
|
int zzb2;
|
||||||
|
if (z == bcz) {
|
||||||
|
zzb2 = p1z - 1;
|
||||||
|
checkZ1 = true;
|
||||||
|
} else {
|
||||||
|
zzb2 = zzb;
|
||||||
|
}
|
||||||
|
boolean checkZ2 = false;
|
||||||
|
int zzt2;
|
||||||
|
if (z == tcz) {
|
||||||
|
zzt2 = p2z + 1;
|
||||||
|
checkZ2 = true;
|
||||||
|
} else {
|
||||||
|
zzt2 = zzt;
|
||||||
|
}
|
||||||
|
final ContentMap map = new ContentMap();
|
||||||
|
if (checkX1) {
|
||||||
|
map.saveRegion(bukkitWorldObj, xxb, xxb2, zzb2, zzt2); //
|
||||||
|
}
|
||||||
|
if (checkX2) {
|
||||||
|
map.saveRegion(bukkitWorldObj, xxt2, xxt, zzb2, zzt2); //
|
||||||
|
}
|
||||||
|
if (checkZ1) {
|
||||||
|
map.saveRegion(bukkitWorldObj, xxb2, xxt2, zzb, zzb2); //
|
||||||
|
}
|
||||||
|
if (checkZ2) {
|
||||||
|
map.saveRegion(bukkitWorldObj, xxb2, xxt2, zzt2, zzt); //
|
||||||
|
}
|
||||||
|
if (checkX1 && checkZ1) {
|
||||||
|
map.saveRegion(bukkitWorldObj, xxb, xxb2, zzb, zzb2); //
|
||||||
|
}
|
||||||
|
if (checkX2 && checkZ1) {
|
||||||
|
map.saveRegion(bukkitWorldObj, xxt2, xxt, zzb, zzb2); // ?
|
||||||
|
}
|
||||||
|
if (checkX1 && checkZ2) {
|
||||||
|
map.saveRegion(bukkitWorldObj, xxb, xxb2, zzt2, zzt); // ?
|
||||||
|
}
|
||||||
|
if (checkX2 && checkZ2) {
|
||||||
|
map.saveRegion(bukkitWorldObj, xxt2, xxt, zzt2, zzt); //
|
||||||
|
}
|
||||||
|
CuboidRegion currentPlotClear =
|
||||||
|
RegionUtil.createRegion(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ());
|
||||||
|
map.saveEntitiesOut(chunkObj, currentPlotClear);
|
||||||
AugmentedUtils.bypass(ignoreAugment,
|
AugmentedUtils.bypass(ignoreAugment,
|
||||||
() -> queue.regenChunkSafe(chunk.getX(), chunk.getZ()));
|
() -> setChunkInPlotArea(null, new RunnableVal<ScopedLocalBlockQueue>() {
|
||||||
continue;
|
@Override public void run(ScopedLocalBlockQueue value) {
|
||||||
}
|
Location min = value.getMin();
|
||||||
boolean checkX1 = false;
|
int bx = min.getX();
|
||||||
|
int bz = min.getZ();
|
||||||
int xxb2;
|
for (int x1 = 0; x1 < 16; x1++) {
|
||||||
|
for (int z1 = 0; z1 < 16; z1++) {
|
||||||
if (x == bcx) {
|
PlotLoc plotLoc = new PlotLoc(bx + x1, bz + z1);
|
||||||
xxb2 = p1x - 1;
|
BaseBlock[] ids = map.allBlocks.get(plotLoc);
|
||||||
checkX1 = true;
|
if (ids != null) {
|
||||||
} else {
|
for (int y = 0; y < Math.min(128, ids.length); y++) {
|
||||||
xxb2 = xxb;
|
BaseBlock id = ids[y];
|
||||||
}
|
if (id != null) {
|
||||||
boolean checkX2 = false;
|
value.setBlock(x1, y, z1, id);
|
||||||
int xxt2;
|
} else {
|
||||||
if (x == tcx) {
|
value.setBlock(x1, y, z1, BlockTypes.AIR.getDefaultState());
|
||||||
xxt2 = p2x + 1;
|
}
|
||||||
checkX2 = true;
|
|
||||||
} else {
|
|
||||||
xxt2 = xxt;
|
|
||||||
}
|
|
||||||
boolean checkZ1 = false;
|
|
||||||
int zzb2;
|
|
||||||
if (z == bcz) {
|
|
||||||
zzb2 = p1z - 1;
|
|
||||||
checkZ1 = true;
|
|
||||||
} else {
|
|
||||||
zzb2 = zzb;
|
|
||||||
}
|
|
||||||
boolean checkZ2 = false;
|
|
||||||
int zzt2;
|
|
||||||
if (z == tcz) {
|
|
||||||
zzt2 = p2z + 1;
|
|
||||||
checkZ2 = true;
|
|
||||||
} else {
|
|
||||||
zzt2 = zzt;
|
|
||||||
}
|
|
||||||
final ContentMap map = new ContentMap();
|
|
||||||
if (checkX1) {
|
|
||||||
map.saveRegion(bukkitWorldObj, xxb, xxb2, zzb2, zzt2); //
|
|
||||||
}
|
|
||||||
if (checkX2) {
|
|
||||||
map.saveRegion(bukkitWorldObj, xxt2, xxt, zzb2, zzt2); //
|
|
||||||
}
|
|
||||||
if (checkZ1) {
|
|
||||||
map.saveRegion(bukkitWorldObj, xxb2, xxt2, zzb, zzb2); //
|
|
||||||
}
|
|
||||||
if (checkZ2) {
|
|
||||||
map.saveRegion(bukkitWorldObj, xxb2, xxt2, zzt2, zzt); //
|
|
||||||
}
|
|
||||||
if (checkX1 && checkZ1) {
|
|
||||||
map.saveRegion(bukkitWorldObj, xxb, xxb2, zzb, zzb2); //
|
|
||||||
}
|
|
||||||
if (checkX2 && checkZ1) {
|
|
||||||
map.saveRegion(bukkitWorldObj, xxt2, xxt, zzb, zzb2); // ?
|
|
||||||
}
|
|
||||||
if (checkX1 && checkZ2) {
|
|
||||||
map.saveRegion(bukkitWorldObj, xxb, xxb2, zzt2, zzt); // ?
|
|
||||||
}
|
|
||||||
if (checkX2 && checkZ2) {
|
|
||||||
map.saveRegion(bukkitWorldObj, xxt2, xxt, zzt2, zzt); //
|
|
||||||
}
|
|
||||||
CuboidRegion currentPlotClear =
|
|
||||||
RegionUtil.createRegion(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ());
|
|
||||||
map.saveEntitiesOut(chunkObj, currentPlotClear);
|
|
||||||
AugmentedUtils.bypass(ignoreAugment,
|
|
||||||
() -> setChunkInPlotArea(null, new RunnableVal<ScopedLocalBlockQueue>() {
|
|
||||||
@Override public void run(ScopedLocalBlockQueue value) {
|
|
||||||
Location min = value.getMin();
|
|
||||||
int bx = min.getX();
|
|
||||||
int bz = min.getZ();
|
|
||||||
for (int x1 = 0; x1 < 16; x1++) {
|
|
||||||
for (int z1 = 0; z1 < 16; z1++) {
|
|
||||||
PlotLoc plotLoc = new PlotLoc(bx + x1, bz + z1);
|
|
||||||
BaseBlock[] ids = map.allBlocks.get(plotLoc);
|
|
||||||
if (ids != null) {
|
|
||||||
for (int y = 0; y < Math.min(128, ids.length); y++) {
|
|
||||||
BaseBlock id = ids[y];
|
|
||||||
if (id != null) {
|
|
||||||
value.setBlock(x1, y, z1, id);
|
|
||||||
} else {
|
|
||||||
value.setBlock(x1, y, z1, BlockTypes.AIR.getDefaultState());
|
|
||||||
}
|
}
|
||||||
}
|
for (int y = Math.min(128, ids.length);
|
||||||
for (int y = Math.min(128, ids.length);
|
y < ids.length; y++) {
|
||||||
y < ids.length; y++) {
|
BaseBlock id = ids[y];
|
||||||
BaseBlock id = ids[y];
|
if (id != null) {
|
||||||
if (id != null) {
|
value.setBlock(x1, y, z1, id);
|
||||||
value.setBlock(x1, y, z1, id);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}, world, chunk));
|
||||||
}, world, chunk));
|
//map.restoreBlocks(worldObj, 0, 0);
|
||||||
//map.restoreBlocks(worldObj, 0, 0);
|
map.restoreEntities(worldObj, 0, 0);
|
||||||
map.restoreEntities(worldObj, 0, 0);
|
});
|
||||||
}
|
}
|
||||||
if (!chunks.isEmpty()) {
|
if (!chunks.isEmpty()) {
|
||||||
TaskManager.runTaskLater(this, 1);
|
TaskManager.runTaskLater(this, 1);
|
||||||
|
@ -352,5 +352,7 @@ public class Settings extends Config {
|
|||||||
public static boolean EXTERNAL_PLACEHOLDERS = true;
|
public static boolean EXTERNAL_PLACEHOLDERS = true;
|
||||||
@Comment("Make road regeneration persistent across restarts") public static boolean
|
@Comment("Make road regeneration persistent across restarts") public static boolean
|
||||||
PERSISTENT_ROAD_REGEN = false;
|
PERSISTENT_ROAD_REGEN = false;
|
||||||
|
@Comment("Try to guess plot owners from sign data. This may decrease server performance")
|
||||||
|
public static boolean GUESS_PLOT_OWNER = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2368,7 +2368,7 @@ public class Plot {
|
|||||||
if (this.hasOwner()) {
|
if (this.hasOwner()) {
|
||||||
return this.owner;
|
return this.owner;
|
||||||
}
|
}
|
||||||
if (!this.area.allowSigns()) {
|
if (!this.area.allowSigns() || !Settings.Enabled_Components.GUESS_PLOT_OWNER) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
Loading…
Reference in New Issue
Block a user