mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-22 21:26:45 +01:00
it's faster now
This commit is contained in:
parent
0bb4afbd9a
commit
643d907792
@ -59,7 +59,7 @@ public class DebugExec extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean execute(final Player player, final String... args) {
|
||||
List<String> allowed_params = Arrays.asList(new String[]{"stop-expire","start-expire", "show-expired", "update-expired", "seen", "trim-check-chunks", "trim-get-chunks"});
|
||||
List<String> allowed_params = Arrays.asList(new String[]{"stop-expire","start-expire", "show-expired", "update-expired", "seen", "trim-check"});
|
||||
if (args.length > 0) {
|
||||
String arg = args[0].toLowerCase();
|
||||
switch (arg) {
|
||||
@ -133,7 +133,7 @@ public class DebugExec extends SubCommand {
|
||||
}
|
||||
case "trim-check": {
|
||||
if (args.length != 2) {
|
||||
PlayerFunctions.sendMessage(null, "Use /plot debugexec trim-get-chunks <world>");
|
||||
PlayerFunctions.sendMessage(null, "Use /plot debugexec trim-check <world>");
|
||||
PlayerFunctions.sendMessage(null, "&7 - Generates a list of regions to trim");
|
||||
return PlayerFunctions.sendMessage(null, "&7 - Run after plot expiry has run");
|
||||
}
|
||||
@ -142,12 +142,12 @@ public class DebugExec extends SubCommand {
|
||||
return PlayerFunctions.sendMessage(null, "Invalid world: "+args[1]);
|
||||
}
|
||||
final ArrayList<ChunkLoc> empty = new ArrayList<>();
|
||||
Trim.getTrimRegions(empty, world, new Runnable() {
|
||||
boolean result = Trim.getTrimRegions(empty, world, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Trim.sendMessage("Processing is complete! Here's how many chunks would be deleted:");
|
||||
Trim.sendMessage(" - MCA #: " + empty.size());
|
||||
Trim.sendMessage(" - CHUNKS: " + (empty.size() * 256) + " (max)");
|
||||
Trim.sendMessage(" - CHUNKS: " + (empty.size() * 1024) + " (max)");
|
||||
Trim.sendMessage("Exporting log for manual approval...");
|
||||
final File file = new File(PlotMain.getMain().getDataFolder() + File.separator + "trim.txt");
|
||||
PrintWriter writer;
|
||||
@ -158,7 +158,7 @@ public class DebugExec extends SubCommand {
|
||||
writer.println(worldname +"/region/r." + loc.x + "." + loc.z +".mca" );
|
||||
}
|
||||
writer.close();
|
||||
Trim.sendMessage("File saved");
|
||||
Trim.sendMessage("File saved to 'plugins/PlotSquared/trim.txt'");
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
Trim.sendMessage("File failed to save! :(");
|
||||
@ -169,7 +169,10 @@ public class DebugExec extends SubCommand {
|
||||
Trim.sendMessage(" - Add 31 to each number to get the end position");
|
||||
}
|
||||
});
|
||||
return true;
|
||||
if (!result) {
|
||||
PlayerFunctions.sendMessage(null, "Trim task already started!");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ public class RegenAllRoads extends SubCommand {
|
||||
|
||||
PlotMain.sendConsoleSenderMessage("&cIf no schematic is set, the following will not do anything");
|
||||
PlotMain.sendConsoleSenderMessage("&7 - To set a schematic, stand in a plot and use &c/plot createroadschematic");
|
||||
PlotMain.sendConsoleSenderMessage("&6Potential chunks to update: &7"+ (chunks.size() * 256));
|
||||
PlotMain.sendConsoleSenderMessage("&6Potential chunks to update: &7"+ (chunks.size() * 1024));
|
||||
PlotMain.sendConsoleSenderMessage("&6Estimated time: &7"+ (chunks.size()) + " seconds");
|
||||
|
||||
boolean result = hpm.scheduleRoadUpdate(world);
|
||||
|
@ -29,10 +29,12 @@ import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@ -46,6 +48,7 @@ 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 Trim extends SubCommand {
|
||||
@ -180,40 +183,42 @@ public class Trim extends SubCommand {
|
||||
if (Trim.TASK) {
|
||||
return false;
|
||||
}
|
||||
final long startOld = System.currentTimeMillis();
|
||||
sendMessage("Collecting region data...");
|
||||
final ArrayList<ChunkLoc> chunks = ChunkManager.getChunkChunks(world);
|
||||
final ArrayList<Plot> plots = new ArrayList<>();
|
||||
plots.addAll(PlotMain.getPlots(world).values());
|
||||
final HashSet<ChunkLoc> chunks = new HashSet<>(ChunkManager.getChunkChunks(world));
|
||||
sendMessage(" - MCA #: " + chunks.size());
|
||||
sendMessage(" - CHUNKS: " + (chunks.size() * 256) +" (max)");
|
||||
sendMessage(" - CHUNKS: " + (chunks.size() * 1024) +" (max)");
|
||||
sendMessage(" - TIME ESTIMATE: " + (chunks.size()/1200) +" minutes");
|
||||
Trim.TASK_ID = Bukkit.getScheduler().scheduleSyncRepeatingTask(PlotMain.getMain(), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (chunks.size() == 0) {
|
||||
long start = System.currentTimeMillis();
|
||||
while (System.currentTimeMillis() - start < 50) {
|
||||
if (plots.size() == 0) {
|
||||
empty.addAll(chunks);
|
||||
System.out.print("DONE!");
|
||||
Trim.TASK = false;
|
||||
TaskManager.runTask(whenDone);
|
||||
Bukkit.getScheduler().cancelTask(Trim.TASK_ID);
|
||||
return;
|
||||
}
|
||||
ChunkLoc loc = chunks.get(0);
|
||||
int sx = loc.x << 5;
|
||||
int sz = loc.z << 5;
|
||||
Plot plot = plots.get(0);
|
||||
plots.remove(0);
|
||||
Location pos1 = PlotHelper.getPlotBottomLoc(world, plot.id);
|
||||
Location pos2 = PlotHelper.getPlotTopLoc(world, plot.id);
|
||||
|
||||
boolean delete = true;
|
||||
Location pos3 = new Location(world, pos1.getBlockX(), 64, pos2.getBlockZ());
|
||||
Location pos4 = new Location(world, pos2.getBlockX(), 64, pos1.getBlockZ());
|
||||
|
||||
loop:
|
||||
for (int x = sx; x < sx + 32; x++) {
|
||||
for (int z = sz; z < sz + 32; z++) {
|
||||
Chunk chunk = world.getChunkAt(x, z);
|
||||
if (ChunkManager.hasPlot(world, chunk) != null) {
|
||||
delete = false;
|
||||
break loop;
|
||||
chunks.remove(ChunkManager.getChunkChunk(pos1));
|
||||
chunks.remove(ChunkManager.getChunkChunk(pos2));
|
||||
chunks.remove(ChunkManager.getChunkChunk(pos3));
|
||||
chunks.remove(ChunkManager.getChunkChunk(pos4));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (delete) {
|
||||
empty.add(loc);
|
||||
}
|
||||
}
|
||||
}, 1L, 1L);
|
||||
}, 20L, 20L);
|
||||
Trim.TASK = true;
|
||||
return true;
|
||||
}
|
||||
|
@ -34,15 +34,11 @@ import org.bukkit.block.Skull;
|
||||
import org.bukkit.block.banner.Pattern;
|
||||
import org.bukkit.block.banner.PatternType;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.intellectualcrafters.plot.PlotMain;
|
||||
import com.intellectualcrafters.plot.config.C;
|
||||
import com.intellectualcrafters.plot.generator.HybridPlotManager;
|
||||
import com.intellectualcrafters.plot.object.BlockLoc;
|
||||
import com.intellectualcrafters.plot.object.ChunkLoc;
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
@ -57,6 +53,12 @@ public class ChunkManager {
|
||||
public static MutableInt index = new MutableInt(0);
|
||||
public static HashMap<Integer, Integer> tasks = new HashMap<>();
|
||||
|
||||
public static ChunkLoc getChunkChunk(Location loc) {
|
||||
int x = loc.getBlockX() >> 9;
|
||||
int z = loc.getBlockZ() >> 9;
|
||||
return new ChunkLoc(x, z);
|
||||
}
|
||||
|
||||
public static ArrayList<ChunkLoc> getChunkChunks(World world) {
|
||||
File[] regionFiles = new File(world.getName() + File.separator + "region").listFiles();
|
||||
ArrayList<ChunkLoc> chunks = new ArrayList<>();
|
||||
|
Loading…
Reference in New Issue
Block a user