mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-26 15:16:45 +01:00
Regenallroads:
- remove the "estimated time" as it's just not remotely correct, nor would it be correct if it were based on actual chunk number - fix the air to be pasted above the road when using regenallroads
This commit is contained in:
parent
ea01a5171b
commit
727d120e70
@ -5,15 +5,11 @@ import com.github.intellectualsites.plotsquared.plot.PlotSquared;
|
|||||||
import com.github.intellectualsites.plotsquared.plot.config.C;
|
import com.github.intellectualsites.plotsquared.plot.config.C;
|
||||||
import com.github.intellectualsites.plotsquared.plot.generator.HybridPlotManager;
|
import com.github.intellectualsites.plotsquared.plot.generator.HybridPlotManager;
|
||||||
import com.github.intellectualsites.plotsquared.plot.generator.HybridUtils;
|
import com.github.intellectualsites.plotsquared.plot.generator.HybridUtils;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.ChunkLoc;
|
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
|
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.PlotManager;
|
import com.github.intellectualsites.plotsquared.plot.object.PlotManager;
|
||||||
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
|
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.ChunkManager;
|
|
||||||
import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
|
import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
@CommandDeclaration(command = "regenallroads",
|
@CommandDeclaration(command = "regenallroads",
|
||||||
description = "Regenerate all roads in the map using the set road schematic",
|
description = "Regenerate all roads in the map using the set road schematic",
|
||||||
aliases = {"rgar"}, usage = "/plot regenallroads <world> [height]",
|
aliases = {"rgar"}, usage = "/plot regenallroads <world> [height]",
|
||||||
@ -46,13 +42,13 @@ import java.util.Set;
|
|||||||
MainUtil.sendMessage(player, C.NOT_VALID_PLOT_WORLD);
|
MainUtil.sendMessage(player, C.NOT_VALID_PLOT_WORLD);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Set<ChunkLoc> chunks = ChunkManager.manager.getChunkChunks(name);
|
//Set<ChunkLoc> chunks = ChunkManager.manager.getChunkChunks(name);
|
||||||
MainUtil
|
MainUtil
|
||||||
.sendMessage(player, "&cIf no schematic is set, the following will not do anything");
|
.sendMessage(player, "&cIf no schematic is set, the following will not do anything");
|
||||||
MainUtil.sendMessage(player,
|
MainUtil.sendMessage(player,
|
||||||
"&7 - To set a schematic, stand in a plot and use &c/plot createroadschematic");
|
"&7 - To set a schematic, stand in a plot and use &c/plot createroadschematic");
|
||||||
MainUtil.sendMessage(player, "&6Potential chunks to update: &7" + (chunks.size() * 1024));
|
//MainUtil.sendMessage(player, "&6Potential chunks to update: &7" + (chunks.size() * 1024));
|
||||||
MainUtil.sendMessage(player, "&6Estimated time: &7" + chunks.size() + " seconds");
|
//MainUtil.sendMessage(player, "&6Estimated time: &7" + chunks.size() + " seconds");
|
||||||
boolean result = HybridUtils.manager.scheduleRoadUpdate(area, height);
|
boolean result = HybridUtils.manager.scheduleRoadUpdate(area, height);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
MainUtil.sendMessage(player,
|
MainUtil.sendMessage(player,
|
||||||
|
@ -11,6 +11,7 @@ import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
|
|||||||
import com.github.intellectualsites.plotsquared.plot.util.expiry.PlotAnalysis;
|
import com.github.intellectualsites.plotsquared.plot.util.expiry.PlotAnalysis;
|
||||||
import com.sk89q.jnbt.CompoundTag;
|
import com.sk89q.jnbt.CompoundTag;
|
||||||
import com.sk89q.worldedit.world.block.BaseBlock;
|
import com.sk89q.worldedit.world.block.BaseBlock;
|
||||||
|
import com.sk89q.worldedit.world.block.BlockTypes;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -23,6 +24,7 @@ public abstract class HybridUtils {
|
|||||||
public static Set<ChunkLoc> chunks = new HashSet<>();
|
public static Set<ChunkLoc> chunks = new HashSet<>();
|
||||||
public static PlotArea area;
|
public static PlotArea area;
|
||||||
public static boolean UPDATE = false;
|
public static boolean UPDATE = false;
|
||||||
|
private static BaseBlock air = BlockTypes.AIR.getDefaultState().toBaseBlock();
|
||||||
|
|
||||||
public abstract void analyzeRegion(String world, RegionWrapper region,
|
public abstract void analyzeRegion(String world, RegionWrapper region,
|
||||||
RunnableVal<PlotAnalysis> whenDone);
|
RunnableVal<PlotAnalysis> whenDone);
|
||||||
@ -161,57 +163,55 @@ public abstract class HybridUtils {
|
|||||||
// CANCEL TASK
|
// CANCEL TASK
|
||||||
} else {
|
} else {
|
||||||
final Runnable task = this;
|
final Runnable task = this;
|
||||||
TaskManager.runTaskAsync(new Runnable() {
|
TaskManager.runTaskAsync(() -> {
|
||||||
@Override public void run() {
|
try {
|
||||||
try {
|
if (chunks.size() < 1024) {
|
||||||
if (chunks.size() < 1024) {
|
if (!regions.isEmpty()) {
|
||||||
if (!regions.isEmpty()) {
|
Iterator<ChunkLoc> iterator = regions.iterator();
|
||||||
Iterator<ChunkLoc> iterator = regions.iterator();
|
ChunkLoc loc = iterator.next();
|
||||||
ChunkLoc loc = iterator.next();
|
iterator.remove();
|
||||||
iterator.remove();
|
PlotSquared.debug("&3Updating .mcr: " + loc.x + ", " + loc.z
|
||||||
PlotSquared.debug("&3Updating .mcr: " + loc.x + ", " + loc.z
|
+ " (aprrox 1024 chunks)");
|
||||||
+ " (aprrox 1024 chunks)");
|
PlotSquared.debug(" - Remaining: " + regions.size());
|
||||||
PlotSquared.debug(" - Remaining: " + regions.size());
|
chunks.addAll(getChunks(loc));
|
||||||
chunks.addAll(getChunks(loc));
|
System.gc();
|
||||||
System.gc();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!chunks.isEmpty()) {
|
|
||||||
TaskManager.IMP.sync(new RunnableVal<Object>() {
|
|
||||||
@Override public void run(Object value) {
|
|
||||||
long start = System.currentTimeMillis();
|
|
||||||
Iterator<ChunkLoc> iterator = chunks.iterator();
|
|
||||||
while (System.currentTimeMillis() - start < 20
|
|
||||||
&& !chunks.isEmpty()) {
|
|
||||||
final ChunkLoc chunk = iterator.next();
|
|
||||||
iterator.remove();
|
|
||||||
regenerateRoad(area, chunk, extend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
Iterator<ChunkLoc> iterator = regions.iterator();
|
|
||||||
ChunkLoc loc = iterator.next();
|
|
||||||
iterator.remove();
|
|
||||||
PlotSquared.debug(
|
|
||||||
"&c[ERROR]&7 Could not update '" + area.worldname + "/region/r."
|
|
||||||
+ loc.x + "." + loc.z + ".mca' (Corrupt chunk?)");
|
|
||||||
int sx = loc.x << 5;
|
|
||||||
int sz = loc.z << 5;
|
|
||||||
for (int x = sx; x < sx + 32; x++) {
|
|
||||||
for (int z = sz; z < sz + 32; z++) {
|
|
||||||
ChunkManager.manager
|
|
||||||
.unloadChunk(area.worldname, new ChunkLoc(x, z), true,
|
|
||||||
true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PlotSquared.debug("&d - Potentially skipping 1024 chunks");
|
|
||||||
PlotSquared.debug("&d - TODO: recommend chunkster if corrupt");
|
|
||||||
}
|
}
|
||||||
GlobalBlockQueue.IMP.addTask(() -> TaskManager.runTaskLater(task, 20));
|
if (!chunks.isEmpty()) {
|
||||||
|
TaskManager.IMP.sync(new RunnableVal<Object>() {
|
||||||
|
@Override public void run(Object value) {
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
Iterator<ChunkLoc> iterator = chunks.iterator();
|
||||||
|
while (System.currentTimeMillis() - start < 20
|
||||||
|
&& !chunks.isEmpty()) {
|
||||||
|
final ChunkLoc chunk = iterator.next();
|
||||||
|
iterator.remove();
|
||||||
|
regenerateRoad(area, chunk, extend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Iterator<ChunkLoc> iterator = regions.iterator();
|
||||||
|
ChunkLoc loc = iterator.next();
|
||||||
|
iterator.remove();
|
||||||
|
PlotSquared.debug(
|
||||||
|
"&c[ERROR]&7 Could not update '" + area.worldname + "/region/r."
|
||||||
|
+ loc.x + "." + loc.z + ".mca' (Corrupt chunk?)");
|
||||||
|
int sx = loc.x << 5;
|
||||||
|
int sz = loc.z << 5;
|
||||||
|
for (int x = sx; x < sx + 32; x++) {
|
||||||
|
for (int z = sz; z < sz + 32; z++) {
|
||||||
|
ChunkManager.manager
|
||||||
|
.unloadChunk(area.worldname, new ChunkLoc(x, z), true,
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlotSquared.debug("&d - Potentially skipping 1024 chunks");
|
||||||
|
PlotSquared.debug("&d - TODO: recommend chunkster if corrupt");
|
||||||
}
|
}
|
||||||
|
GlobalBlockQueue.IMP.addTask(() -> TaskManager.runTaskLater(task, 20));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -283,6 +283,7 @@ public abstract class HybridUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean regenerateRoad(final PlotArea area, final ChunkLoc chunk, int extend) {
|
public boolean regenerateRoad(final PlotArea area, final ChunkLoc chunk, int extend) {
|
||||||
|
PlotSquared.log(chunk);
|
||||||
int x = chunk.x << 4;
|
int x = chunk.x << 4;
|
||||||
int z = chunk.z << 4;
|
int z = chunk.z << 4;
|
||||||
int ex = x + 15;
|
int ex = x + 15;
|
||||||
@ -353,8 +354,15 @@ public abstract class HybridUtils {
|
|||||||
for (int y = 0; y < blocks.length; y++) {
|
for (int y = 0; y < blocks.length; y++) {
|
||||||
if (blocks[y] != null) {
|
if (blocks[y] != null) {
|
||||||
BaseBlock block = blocks[y];
|
BaseBlock block = blocks[y];
|
||||||
queue.setBlock(x + X + plotWorld.ROAD_OFFSET_X, minY + y,
|
if (block != null) {
|
||||||
z + Z + plotWorld.ROAD_OFFSET_Z, block);
|
queue
|
||||||
|
.setBlock(x + X + plotWorld.ROAD_OFFSET_X, minY + y,
|
||||||
|
z + Z + plotWorld.ROAD_OFFSET_Z, block);
|
||||||
|
} else if (y <= extend) {
|
||||||
|
queue
|
||||||
|
.setBlock(x + X + plotWorld.ROAD_OFFSET_X, minY + y,
|
||||||
|
z + Z + plotWorld.ROAD_OFFSET_Z, air);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user