Feature / Fix

Add trim regen argument @manuelgu /plot trim <world> true
Add grant check other + console usage
Finish abstracting world generation to prepare for sponge port
Fix economy hook
Add ban as alias for deny
Remove some redundant code
This commit is contained in:
Jesse Boyd 2016-02-20 05:42:06 +11:00
parent 411a74eefa
commit 60629db042
27 changed files with 334 additions and 335 deletions

View File

@ -213,7 +213,7 @@ public interface IPlotMain {
/** /**
* *
*/ */
GeneratorWrapper<?> wrapPlotGenerator(String world, IndependentPlotGenerator generator); GeneratorWrapper<?> wrapPlotGenerator(IndependentPlotGenerator generator);
/** /**
* Register the chunk processor which will clean out chunks that have too many blockstates or entities * Register the chunk processor which will clean out chunks that have too many blockstates or entities

View File

@ -1294,7 +1294,6 @@ public class PS {
public Collection<Plot> getPlots(final String world) { public Collection<Plot> getPlots(final String world) {
final HashSet<Plot> set = new HashSet<>(); final HashSet<Plot> set = new HashSet<>();
foreachPlotArea(null);
foreachPlotArea(world, new RunnableVal<PlotArea>() { foreachPlotArea(world, new RunnableVal<PlotArea>() {
@Override @Override
public void run(PlotArea value) { public void run(PlotArea value) {
@ -2436,6 +2435,21 @@ public class PS {
} }
} }
public void foreachPlotRaw(final RunnableVal<Plot> runnable) {
for (PlotArea area : plotareas) {
for (Plot plot : area.getPlots()) {
runnable.run(plot);
}
}
if (plots_tmp != null) {
for (Entry<String, HashMap<PlotId, Plot>> entry : plots_tmp.entrySet()) {
for (Entry<PlotId, Plot> entry2 : entry.getValue().entrySet()) {
runnable.run(entry2.getValue());
}
}
}
}
public void foreachBasePlot(RunnableVal<Plot> run) { public void foreachBasePlot(RunnableVal<Plot> run) {
for (PlotArea area : plotareas) { for (PlotArea area : plotareas) {
area.foreachBasePlot(run); area.foreachBasePlot(run);

View File

@ -131,8 +131,8 @@ public class Area extends SubCommand {
if (area.TERRAIN != 3) { if (area.TERRAIN != 3) {
ChunkManager.largeRegionTask(world, region, new RunnableVal<ChunkLoc>() { ChunkManager.largeRegionTask(world, region, new RunnableVal<ChunkLoc>() {
@Override @Override
public void run(ChunkLoc value) { public void run(final ChunkLoc value) {
AugmentedUtils.generate(world, value.x, value.z); AugmentedUtils.generate(world, value.x, value.z, null);
} }
}, null); }, null);
} }
@ -415,7 +415,7 @@ public class Area extends SubCommand {
ChunkManager.largeRegionTask(area.worldname, area.getRegion(), new RunnableVal<ChunkLoc>() { ChunkManager.largeRegionTask(area.worldname, area.getRegion(), new RunnableVal<ChunkLoc>() {
@Override @Override
public void run(ChunkLoc value) { public void run(ChunkLoc value) {
AugmentedUtils.generate(area.worldname, value.x, value.z); AugmentedUtils.generate(area.worldname, value.x, value.z, null);
} }
}, null); }, null);
return true; return true;

View File

@ -21,12 +21,9 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
@ -47,7 +44,6 @@ import com.intellectualcrafters.plot.config.Settings;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.flag.FlagManager;
import com.intellectualcrafters.plot.generator.HybridUtils; import com.intellectualcrafters.plot.generator.HybridUtils;
import com.intellectualcrafters.plot.object.ChunkLoc;
import com.intellectualcrafters.plot.object.ConsolePlayer; import com.intellectualcrafters.plot.object.ConsolePlayer;
import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.OfflinePlotPlayer; import com.intellectualcrafters.plot.object.OfflinePlotPlayer;
@ -158,7 +154,7 @@ public class DebugExec extends SubCommand {
@Override @Override
public boolean onCommand(final PlotPlayer player, final String... args) { public boolean onCommand(final PlotPlayer player, final String... args) {
final List<String> allowed_params = Arrays.asList("calibrate-analysis", "remove-flag", "stop-expire", "start-expire", "show-expired", "update-expired", "seen", "trim-check"); final List<String> allowed_params = Arrays.asList("calibrate-analysis", "remove-flag", "stop-expire", "start-expire", "show-expired", "update-expired", "seen");
if (args.length > 0) { if (args.length > 0) {
final String arg = args[0].toLowerCase(); final String arg = args[0].toLowerCase();
String script; String script;
@ -313,46 +309,6 @@ public class DebugExec extends SubCommand {
MainUtil.sendMessage(player, "GMT: " + date.toGMTString()); MainUtil.sendMessage(player, "GMT: " + date.toGMTString());
MainUtil.sendMessage(player, "Local: " + date.toLocaleString()); MainUtil.sendMessage(player, "Local: " + date.toLocaleString());
return true; return true;
case "trim-check":
if (args.length != 2) {
MainUtil.sendMessage(player, "Use /plot debugexec trim-check <world>");
MainUtil.sendMessage(player, "&7 - Generates a list of regions to trim");
return MainUtil.sendMessage(player, "&7 - Run after plot expiry has run");
}
final String world = args[1];
if (!WorldUtil.IMP.isWorld(world) || !PS.get().hasPlotArea(args[1])) {
return MainUtil.sendMessage(player, "Invalid world: " + args[1]);
}
final ArrayList<ChunkLoc> empty = new ArrayList<>();
final 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() * 1024 + " (max)");
Trim.sendMessage("Exporting log for manual approval...");
final File file = new File(PS.get().IMP.getDirectory() + File.separator + "trim.txt");
try {
PrintWriter writer = new PrintWriter(file);
for (final ChunkLoc loc : empty) {
writer.println(world + "/region/r." + loc.x + "." + loc.z + ".mca");
}
writer.close();
Trim.sendMessage("File saved to 'plugins/PlotSquared/trim.txt'");
} catch (final FileNotFoundException e) {
e.printStackTrace();
Trim.sendMessage("File failed to save! :(");
}
Trim.sendMessage("How to get the chunk coords from a region file:");
Trim.sendMessage(" - Locate the x,z values for the region file (the two numbers which are separated by a dot)");
Trim.sendMessage(" - Multiply each number by 32; this gives you the starting position");
Trim.sendMessage(" - Add 31 to each number to get the end position");
}
});
if (!result) {
MainUtil.sendMessage(player, "Trim task already started!");
}
return result;
case "h": case "h":
case "he": case "he":
case "?": case "?":

View File

@ -35,7 +35,7 @@ import com.intellectualcrafters.plot.util.WorldUtil;
import com.plotsquared.general.commands.Argument; import com.plotsquared.general.commands.Argument;
import com.plotsquared.general.commands.CommandDeclaration; import com.plotsquared.general.commands.CommandDeclaration;
@CommandDeclaration(command = "deny", aliases = { "d" }, description = "Deny a user from a plot", usage = "/plot deny <player>", category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE) @CommandDeclaration(command = "deny", aliases = { "d", "ban" }, description = "Deny a user from a plot", usage = "/plot deny <player>", category = CommandCategory.SETTINGS, requiredType = RequiredType.NONE)
public class Deny extends SubCommand { public class Deny extends SubCommand {
public Deny() { public Deny() {

View File

@ -1,78 +1,60 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.UUID;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.ConsolePlayer; import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.object.RunnableVal;
import com.intellectualcrafters.plot.util.ByteArrayUtilities; import com.intellectualcrafters.plot.util.ByteArrayUtilities;
import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.MainUtil;
import com.intellectualcrafters.plot.util.Permissions;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import com.plotsquared.general.commands.CommandDeclaration; import com.plotsquared.general.commands.CommandDeclaration;
import java.util.UUID;
@CommandDeclaration( @CommandDeclaration(
command = "grant", command = "grant",
category = CommandCategory.CLAIMING, category = CommandCategory.CLAIMING,
usage = "/plot grant <check|add> [...]", usage = "/plot grant <check|add> [player]",
permission = "plots.grant", permission = "plots.grant",
requiredType = RequiredType.NONE requiredType = RequiredType.NONE
) )
public class Grant extends SubCommand { public class Grant extends SubCommand {
void grantPlayer(PlotPlayer plr, String enteredName) {
PlotPlayer player;
if (enteredName.length() > 16) {
player = PlotPlayer.wrap(UUID.fromString(enteredName));
} else {
player = UUIDHandler.getPlayer(enteredName);
}
if (player == null) {
sendMessage(plr, C.GRANTED_PLOT_FAILED, "Player not found");
} else {
int n = 1;
if (player.hasPersistentMeta("grantedPlots")) {
n += ByteArrayUtilities.bytesToInteger(player.getPersistentMeta("grantedPlots"));
}
player.setPersistentMeta("grantedPlots", ByteArrayUtilities.integerToBytes(n));
sendMessage(plr, C.GRANTED_PLOT, enteredName);
}
}
@Override @Override
public boolean onCommand(PlotPlayer plr, String[] arguments) { public boolean onCommand(final PlotPlayer plr, final String[] args) {
if (plr == null || plr instanceof ConsolePlayer) { final String arg0 = args[0].toLowerCase();
if (arguments.length != 1) { switch (arg0) {
MainUtil.sendMessage(null, "Usage: /plot grant <Player>"); case "add":
} else { case "check":
grantPlayer(null, arguments[0]); if (Permissions.hasPermission(plr, "plots.grant." + arg0)) {
return true; C.NO_PERMISSION.send(plr, "plots.grant." + arg0);
} return false;
} else {
if (arguments.length < 1) {
arguments = new String[] { "check" };
}
switch (arguments[0]) {
case "check": {
int grantedPlots = 0;
if (plr.hasPersistentMeta("grantedPlots")) {
grantedPlots = ByteArrayUtilities.bytesToInteger(plr.getPersistentMeta("grantedPlots"));
}
return sendMessage(plr, C.GRANTED_PLOTS, "" + grantedPlots);
} }
case "add": { if (args.length > 2) {
if (!plr.hasPermission("plots.grant.add")) { break;
return sendMessage(plr, C.NO_PERMISSION, "plots.grant.add"); }
final UUID uuid = args.length == 2 ? UUIDHandler.getUUIDFromString(args[1]) : plr.getUUID();
if (uuid == null) {
C.INVALID_PLAYER.send(plr, args[1]);
return false;
}
MainUtil.getPersistentMeta(uuid, "grantedPlots", new RunnableVal<byte[]>() {
@Override
public void run(byte[] array) {
if (arg0.equals("check")) { // check
int granted = array == null ? 0 : ByteArrayUtilities.bytesToInteger(array);
C.GRANTED_PLOTS.send(plr, granted);
} else { // add
int amount = 1 + (array == null ? 0 : ByteArrayUtilities.bytesToInteger(array));
boolean replace = array != null;
DBFunc.dbManager.addPersistentMeta(uuid, "grantedPlots", ByteArrayUtilities.integerToBytes(amount), replace);
}
} }
if (arguments.length < 2) { });
plr.sendMessage("&cUsage: /plot grant add <player>"); return true;
} else {
grantPlayer(plr, arguments[1]);
}
} break;
default: return onCommand(plr, new String[] { "check" });
}
} }
return true; C.COMMAND_SYNTAX.send(plr, getUsage());
return false;
} }
} }

View File

@ -20,20 +20,6 @@
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.ChunkLoc;
import com.intellectualcrafters.plot.object.ConsolePlayer;
import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.util.ChunkManager;
import com.intellectualcrafters.plot.util.MainUtil;
import com.intellectualcrafters.plot.util.TaskManager;
import com.intellectualcrafters.plot.util.WorldUtil;
import com.plotsquared.general.commands.CommandDeclaration;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
@ -42,19 +28,34 @@ import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.ChunkLoc;
import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.object.RegionWrapper;
import com.intellectualcrafters.plot.object.RunnableVal;
import com.intellectualcrafters.plot.object.RunnableVal2;
import com.intellectualcrafters.plot.util.ChunkManager;
import com.intellectualcrafters.plot.util.MainUtil;
import com.intellectualcrafters.plot.util.TaskManager;
import com.intellectualcrafters.plot.util.WorldUtil;
import com.plotsquared.general.commands.CommandDeclaration;
@CommandDeclaration( @CommandDeclaration(
command = "trim", command = "trim",
permission = "plots.admin", permission = "plots.admin",
description = "Delete unmodified portions of your plotworld", description = "Delete unmodified portions of your plotworld",
usage = "/plot trim", usage = "/plot trim <world> [regenerate]",
requiredType = RequiredType.CONSOLE, requiredType = RequiredType.CONSOLE,
category = CommandCategory.ADMINISTRATION) category = CommandCategory.ADMINISTRATION)
public class Trim extends SubCommand { public class Trim extends SubCommand {
public static boolean TASK = false;
public static ArrayList<Plot> expired = null; public static ArrayList<Plot> expired = null;
private static int TASK_ID = 0;
public static boolean getBulkRegions(final ArrayList<ChunkLoc> empty, final String world, final Runnable whenDone) { public static boolean getBulkRegions(final ArrayList<ChunkLoc> empty, final String world, final Runnable whenDone) {
if (Trim.TASK) { if (Trim.TASK) {
@ -110,114 +111,127 @@ public class Trim extends SubCommand {
return true; return true;
} }
public static boolean getTrimRegions(final ArrayList<ChunkLoc> empty, final String world, final Runnable whenDone) { /**
if (Trim.TASK) { * Runs the result task with the parameters (viable, nonViable).<br>
* @param world
* @param result (viable = .mcr to trim, nonViable = .mcr keep)
* @return
*/
public static boolean getTrimRegions(final String world, final RunnableVal2<Set<ChunkLoc>, Set<ChunkLoc>> result) {
if (result == null) {
return false; return false;
} }
System.currentTimeMillis(); MainUtil.sendMessage(null, "Collecting region data...");
sendMessage("Collecting region data...");
final ArrayList<Plot> plots = new ArrayList<>(); final ArrayList<Plot> plots = new ArrayList<>();
plots.addAll(PS.get().getPlots(world)); plots.addAll(PS.get().getPlots(world));
final HashSet<ChunkLoc> chunks = new HashSet<>(ChunkManager.manager.getChunkChunks(world)); result.value1 = new HashSet<>(ChunkManager.manager.getChunkChunks(world));
sendMessage(" - MCA #: " + chunks.size()); result.value2 = new HashSet<ChunkLoc>();
sendMessage(" - CHUNKS: " + (chunks.size() * 1024) + " (max)"); MainUtil.sendMessage(null, " - MCA #: " + result.value1.size());
sendMessage(" - TIME ESTIMATE: " + (chunks.size() / 1200) + " minutes"); MainUtil.sendMessage(null, " - CHUNKS: " + (result.value1.size() * 1024) + " (max)");
Trim.TASK_ID = TaskManager.runTaskRepeat(new Runnable() { MainUtil.sendMessage(null, " - TIME ESTIMATE: 12 Parsecs");
TaskManager.objectTask(plots, new RunnableVal<Plot>() {
@Override @Override
public void run() { public void run(Plot plot) {
final long start = System.currentTimeMillis(); final Location pos1 = plot.getBottom();
while ((System.currentTimeMillis() - start) < 50) { final Location pos2 = plot.getTop();
if (plots.isEmpty()) { final int ccx1 = (pos1.getX() >> 9);
empty.addAll(chunks); final int ccz1 = (pos1.getZ() >> 9);
Trim.TASK = false; final int ccx2 = (pos2.getX() >> 9);
TaskManager.runTaskAsync(whenDone); final int ccz2 = (pos2.getZ() >> 9);
PS.get().TASK.cancelTask(Trim.TASK_ID); for (int x = ccx1; x <= ccx2; x++) {
return; for (int z = ccz1; z <= ccz2; z++) {
} ChunkLoc loc = new ChunkLoc(x, z);
final Plot plot = plots.remove(0); if (result.value1.remove(loc)) {
result.value2.add(loc);
final Location pos1 = plot.getBottom();
final Location pos2 = plot.getTop();
final int ccx1 = (pos1.getX() >> 9);
final int ccz1 = (pos1.getZ() >> 9);
final int ccx2 = (pos2.getX() >> 9);
final int ccz2 = (pos2.getZ() >> 9);
for (int x = ccx1; x <= ccx2; x++) {
for (int z = ccz1; z <= ccz2; z++) {
chunks.remove(new ChunkLoc(x, z));
} }
} }
} }
} }
}, 20); }, result);
Trim.TASK = true;
return true; return true;
} }
public static void deleteChunks(final String world, final ArrayList<ChunkLoc> chunks, final Runnable whenDone) { private static volatile boolean TASK = false;
ChunkManager.manager.deleteRegionFiles(world, chunks, whenDone);
}
public static void sendMessage(final String message) {
ConsolePlayer.getConsole().sendMessage("&3PlotSquared -> World trim&8: &7" + message);
}
public PlotId getId(final String id) {
try {
final String[] split = id.split(";");
return new PlotId(Integer.parseInt(split[0]), Integer.parseInt(split[1]));
} catch (final Exception e) {
return null;
}
}
@Override @Override
public boolean onCommand(final PlotPlayer plr, final String[] args) { public boolean onCommand(final PlotPlayer plr, final String[] args) {
if (args.length == 1) { if (args.length == 0) {
final String arg = args[0].toLowerCase(); C.COMMAND_SYNTAX.send(plr, getUsage());
final PlotId id = getId(arg);
if (id != null) {
MainUtil.sendMessage(plr, "/plot trim x;z &l<world>");
return false;
}
if (arg.equals("all")) {
MainUtil.sendMessage(plr, "/plot trim all &l<world>");
return false;
}
MainUtil.sendMessage(plr, C.TRIM_SYNTAX);
return false; return false;
} }
if (args.length != 2) { final String world = args[0];
MainUtil.sendMessage(plr, C.TRIM_SYNTAX);
return false;
}
final String arg = args[0].toLowerCase();
if (!arg.equals("all")) {
MainUtil.sendMessage(plr, C.TRIM_SYNTAX);
return false;
}
final String world = args[1];
if (!WorldUtil.IMP.isWorld(world) || (!PS.get().hasPlotArea(world))) { if (!WorldUtil.IMP.isWorld(world) || (!PS.get().hasPlotArea(world))) {
MainUtil.sendMessage(plr, C.NOT_VALID_WORLD); MainUtil.sendMessage(plr, C.NOT_VALID_WORLD);
return false; return false;
} }
if (Trim.TASK) { if (Trim.TASK) {
sendMessage(C.TRIM_IN_PROGRESS.s()); C.TRIM_IN_PROGRESS.send(plr);
return false; return false;
} }
sendMessage(C.TASK_START.s()); Trim.TASK = true;
final ArrayList<ChunkLoc> empty = new ArrayList<>(); final boolean regen = args.length == 2 ? Boolean.parseBoolean(args[1]) : false;
getTrimRegions(empty, world, new Runnable() { getTrimRegions(world, new RunnableVal2<Set<ChunkLoc>, Set<ChunkLoc>>() {
@Override @Override
public void run() { public void run(final Set<ChunkLoc> viable, final Set<ChunkLoc> nonViable) {
deleteChunks(world, empty, new Runnable() { Runnable regenTask;
@Override if (regen) {
public void run() { regenTask = new Runnable() {
ConsolePlayer.getConsole().sendMessage("$1Trim task complete!"); @Override
} public void run() {
}); if (nonViable.size() == 0) {
Trim.TASK = false;
plr.sendMessage("Trim done!");
return;
}
Iterator<ChunkLoc> iter = nonViable.iterator();
ChunkLoc mcr = iter.next();
iter.remove();
int cbx = mcr.x << 5;
int cbz = mcr.z << 5;
// get all 1024 chunks
HashSet<ChunkLoc> chunks = new HashSet<>();
for (int x = cbx; x < cbx + 32; x++) {
for (int z = cbz; z < cbz + 32; z++) {
ChunkLoc loc = new ChunkLoc(x, z);
chunks.add(loc);
}
}
int bx = cbx << 4;
int bz = cbz << 4;
RegionWrapper region = new RegionWrapper(bx, bx + 511, bz, bz + 511);
for (Plot plot : PS.get().getPlots(world)) {
Location bot = plot.getBottomAbs();
Location top = plot.getExtendedTopAbs();
RegionWrapper plotReg = new RegionWrapper(bot.getX(), top.getX(), bot.getZ(), top.getZ());
if (!region.intersects(plotReg)) {
continue;
}
for (int x = plotReg.minX >> 4; x <= plotReg.maxX >> 4; x++) {
for (int z = plotReg.minZ >> 4; z <= plotReg.maxZ >> 4; z++) {
ChunkLoc loc = new ChunkLoc(x, z);
chunks.remove(loc);
}
}
}
TaskManager.objectTask(chunks, new RunnableVal<ChunkLoc>() {
@Override
public void run(ChunkLoc value) {
ChunkManager.manager.regenerateChunk(world, value);
}
}, this);
}
};
}
else {
regenTask = new Runnable() {
@Override
public void run() {
Trim.TASK = false;
}
};
}
ChunkManager.manager.deleteRegionFiles(world, viable, regenTask);
} }
}); });
return true; return true;

View File

@ -31,7 +31,7 @@ import java.util.Set;
import com.intellectualcrafters.configuration.ConfigurationSection; import com.intellectualcrafters.configuration.ConfigurationSection;
import com.intellectualcrafters.configuration.file.YamlConfiguration; import com.intellectualcrafters.configuration.file.YamlConfiguration;
import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.object.ConsolePlayer;
import com.intellectualcrafters.plot.util.StringMan; import com.intellectualcrafters.plot.util.StringMan;
import com.plotsquared.general.commands.CommandCaller; import com.plotsquared.general.commands.CommandCaller;
@ -393,7 +393,6 @@ public enum C {
/* /*
* trim * trim
*/ */
TRIM_SYNTAX("Use /plot trim <all|x;y> <world>", "Trim"),
TRIM_IN_PROGRESS("A world trim task is already in progress!", "Trim"), TRIM_IN_PROGRESS("A world trim task is already in progress!", "Trim"),
NOT_VALID_HYBRID_PLOT_WORLD("The hybrid plot manager is required to perform this action", "Trim"), NOT_VALID_HYBRID_PLOT_WORLD("The hybrid plot manager is required to perform this action", "Trim"),
/* /*
@ -611,8 +610,11 @@ public enum C {
* Direction * Direction
*/ */
DIRECTION("$1Current direction: %dir%", "Help"), DIRECTION("$1Current direction: %dir%", "Help"),
GRANTED_PLOTS("$1You've got $2%s $1grants left", "Grants"), /*
GRANTED_PLOT("$1You granted 1 plot to $2%s", "Grants"), * Grant
*/
GRANTED_PLOTS("$1Result: $2%s $1grants left", "Grants"),
GRANTED_PLOT("$1You granted %s0 plot to $2%s1", "Grants"),
GRANTED_PLOT_FAILED("$1Grant failed: $2%s", "Grants"), GRANTED_PLOT_FAILED("$1Grant failed: $2%s", "Grants"),
/* /*
* Custom * Custom
@ -693,7 +695,7 @@ public enum C {
} }
public static String format(final C c, final Object... args) { public static String format(final C c, final Object... args) {
return format(c.s, args); return (c.usePrefix() ? C.PREFIX.s() : "") + format(c.s, args);
} }
public static String color(final String string) { public static String color(final String string) {
@ -801,10 +803,15 @@ public enum C {
} }
public void send(final CommandCaller plr, final String... args) { public void send(final CommandCaller plr, final String... args) {
send(plr, (Object[]) args);
}
public void send(final CommandCaller plr, final Object... args) {
String msg = format(this, args);
if (plr == null) { if (plr == null) {
MainUtil.sendConsoleMessage(this, args); ConsolePlayer.getConsole().sendMessage(msg);
} else { } else {
plr.sendMessage(this, args); plr.sendMessage(msg);
} }
} }
} }

View File

@ -34,7 +34,6 @@ import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotArea; import com.intellectualcrafters.plot.object.PlotArea;
import com.intellectualcrafters.plot.object.PlotCluster; import com.intellectualcrafters.plot.object.PlotCluster;
import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.object.RunnableVal; import com.intellectualcrafters.plot.object.RunnableVal;
import com.intellectualcrafters.plot.object.comment.PlotComment; import com.intellectualcrafters.plot.object.comment.PlotComment;
@ -103,7 +102,7 @@ public interface AbstractDB {
void removePersistentMeta(UUID uuid, String key); void removePersistentMeta(UUID uuid, String key);
void getPersistentMeta(PlotPlayer player, RunnableVal<Map<String, byte[]>> result); void getPersistentMeta(UUID uuid, RunnableVal<Map<String, byte[]>> result);
/** /**
* Create plot settings * Create plot settings

View File

@ -54,7 +54,6 @@ import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotArea; import com.intellectualcrafters.plot.object.PlotArea;
import com.intellectualcrafters.plot.object.PlotCluster; import com.intellectualcrafters.plot.object.PlotCluster;
import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.object.PlotSettings; import com.intellectualcrafters.plot.object.PlotSettings;
import com.intellectualcrafters.plot.object.RunnableVal; import com.intellectualcrafters.plot.object.RunnableVal;
import com.intellectualcrafters.plot.object.comment.PlotComment; import com.intellectualcrafters.plot.object.comment.PlotComment;
@ -2421,16 +2420,17 @@ public class SQLManager implements AbstractDB {
} }
@Override @Override
public void addPersistentMeta(final UUID uuid, final String key, final byte[] meta, final boolean delete) { public void addPersistentMeta(final UUID uuid, final String key, final byte[] meta, final boolean replace) {
addPlayerTask(uuid, new UniqueStatement("addPersistentMeta") { addPlayerTask(uuid, new UniqueStatement("addPersistentMeta") {
@Override @Override
public void set(final PreparedStatement stmt) throws SQLException { public void set(final PreparedStatement stmt) throws SQLException {
if (delete) { Blob blob = connection.createBlob();
stmt.setString(1, uuid.toString()); blob.setBytes(1, meta);
stmt.setString(2, key); if (replace) {
stmt.setBlob(1, blob);
stmt.setString(2, uuid.toString());
stmt.setString(3, key);
} else { } else {
Blob blob = connection.createBlob();
blob.setBytes(1, meta);
stmt.setString(1, uuid.toString()); stmt.setString(1, uuid.toString());
stmt.setString(2, key); stmt.setString(2, key);
stmt.setBlob(3, blob); stmt.setBlob(3, blob);
@ -2439,8 +2439,8 @@ public class SQLManager implements AbstractDB {
@Override @Override
public PreparedStatement get() throws SQLException { public PreparedStatement get() throws SQLException {
if (delete) { if (replace) {
return connection.prepareStatement("DELETE FROM `" + prefix + "player_meta` WHERE `uuid` = ? AND `key` = ?"); return connection.prepareStatement("UPDATE `" + prefix + "player_meta` SET `value` = ? WHERE `uuid` = ? AND `key` = ?");
} else { } else {
return connection.prepareStatement("INSERT INTO `" + prefix + "player_meta`(`uuid`, `key`, `value`) VALUES(?, ? ,?)"); return connection.prepareStatement("INSERT INTO `" + prefix + "player_meta`(`uuid`, `key`, `value`) VALUES(?, ? ,?)");
} }
@ -2465,11 +2465,11 @@ public class SQLManager implements AbstractDB {
} }
@Override @Override
public void getPersistentMeta(final PlotPlayer player, final RunnableVal<Map<String, byte[]>> result) { public void getPersistentMeta(final UUID uuid, final RunnableVal<Map<String, byte[]>> result) {
addPlayerTask(player.getUUID(), new UniqueStatement("getPersistentMeta") { addPlayerTask(uuid, new UniqueStatement("getPersistentMeta") {
@Override @Override
public void set(final PreparedStatement stmt) throws SQLException { public void set(final PreparedStatement stmt) throws SQLException {
stmt.setString(1, player.getUUID().toString()); stmt.setString(1, uuid.toString());
} }
@Override @Override

View File

@ -20,6 +20,13 @@
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
package com.intellectualcrafters.plot.flag; package com.intellectualcrafters.plot.flag;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
@ -32,13 +39,6 @@ import com.intellectualcrafters.plot.object.RunnableVal;
import com.intellectualcrafters.plot.util.EventUtil; import com.intellectualcrafters.plot.util.EventUtil;
import com.intellectualcrafters.plot.util.Permissions; import com.intellectualcrafters.plot.util.Permissions;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/** /**
* Flag Manager Utility * Flag Manager Utility
* *
@ -100,13 +100,13 @@ public class FlagManager {
PS.get().foreachPlotArea(new RunnableVal<PlotArea>() { PS.get().foreachPlotArea(new RunnableVal<PlotArea>() {
@Override @Override
public void run(PlotArea value) { public void run(PlotArea value) {
final Flag flag = ((HashMap<String, Flag>) value.DEFAULT_FLAGS.clone()).get(af.getKey()); final Flag flag = value.DEFAULT_FLAGS.get(af.getKey());
if (flag != null) { if (flag != null) {
flag.setKey(af); flag.setKey(af);
} }
} }
}); });
PS.get().foreachPlot(new RunnableVal<Plot>() { PS.get().foreachPlotRaw(new RunnableVal<Plot>() {
@Override @Override
public void run(Plot value) { public void run(Plot value) {
final Flag flag = value.getFlags().get(af.getKey()); final Flag flag = value.getFlags().get(af.getKey());
@ -115,11 +115,12 @@ public class FlagManager {
} }
} }
}); });
if (getFlag(af.getKey()) == null && flags.add(af)) { if (flags.remove(af)) {
if (reserved) { PS.debug("(Replaced existing flag)");
reserveFlag(af.getKey()); }
} flags.add(af);
return true; if (reserved) {
reserveFlag(af.getKey());
} }
return false; return false;
} }

View File

@ -1,6 +1,9 @@
package com.intellectualcrafters.plot.generator; package com.intellectualcrafters.plot.generator;
import java.util.Set;
import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.object.LazyResult;
import com.intellectualcrafters.plot.object.PlotArea; import com.intellectualcrafters.plot.object.PlotArea;
import com.intellectualcrafters.plot.object.PlotBlock; import com.intellectualcrafters.plot.object.PlotBlock;
import com.intellectualcrafters.plot.object.PlotManager; import com.intellectualcrafters.plot.object.PlotManager;
@ -10,8 +13,6 @@ import com.intellectualcrafters.plot.util.PlotChunk;
import com.intellectualcrafters.plot.util.SetQueue; import com.intellectualcrafters.plot.util.SetQueue;
import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper; import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper;
import java.util.Set;
public class AugmentedUtils { public class AugmentedUtils {
private static boolean enabled = true; private static boolean enabled = true;
@ -22,10 +23,18 @@ public class AugmentedUtils {
enabled = true; enabled = true;
} }
public static void generate(String world, int cx, int cz) { public static void generate(final String world, final int cx, final int cz, LazyResult<PlotChunk<?>> lazyChunk) {
if (!enabled) { if (!enabled) {
return; return;
} }
if (lazyChunk == null) {
lazyChunk = new LazyResult<PlotChunk<?>>() {
@Override
public PlotChunk<?> create() {
return SetQueue.IMP.queue.getChunk(SetQueue.IMP.new ChunkWrapper(world, cx, cz));
}
};
}
final int bx = cx << 4; final int bx = cx << 4;
final int bz = cz << 4; final int bz = cz << 4;
RegionWrapper region = new RegionWrapper(bx, bx + 15, bz, bz + 15); RegionWrapper region = new RegionWrapper(bx, bx + 15, bz, bz + 15);
@ -35,7 +44,6 @@ public class AugmentedUtils {
} }
final PseudoRandom r = new PseudoRandom(); final PseudoRandom r = new PseudoRandom();
r.state = (cx << 16) | (cz & 0xFFFF);; r.state = (cx << 16) | (cz & 0xFFFF);;
PlotChunk<?> cache_chunk = null;
ChunkWrapper wrap = SetQueue.IMP.new ChunkWrapper(world, cx, cz); ChunkWrapper wrap = SetQueue.IMP.new ChunkWrapper(world, cx, cz);
for (final PlotArea area : areas) { for (final PlotArea area : areas) {
if (area.TYPE == 0) { if (area.TYPE == 0) {
@ -48,10 +56,7 @@ public class AugmentedUtils {
if (generator == null) { if (generator == null) {
continue; continue;
} }
if (cache_chunk == null) { final PlotChunk<?> result = lazyChunk.getOrCreate();
cache_chunk = SetQueue.IMP.queue.getChunk(wrap);
}
final PlotChunk<?> result = cache_chunk;
final PlotChunk<?> primaryMask; final PlotChunk<?> primaryMask;
// coords // coords
int bxx = Math.max(0, area.getRegion().minX - bx); int bxx = Math.max(0, area.getRegion().minX - bx);
@ -154,9 +159,9 @@ public class AugmentedUtils {
} }
generator.generateChunk(secondaryMask, area, r); generator.generateChunk(secondaryMask, area, r);
} }
if (cache_chunk != null) { if (lazyChunk.get() != null) {
cache_chunk.addToQueue(); lazyChunk.get().addToQueue();
cache_chunk.flush(false); lazyChunk.get().flush(false);
} }
} }
} }

View File

@ -61,8 +61,8 @@ public abstract class IndependentPlotGenerator {
* @param <T> * @param <T>
* @return * @return
*/ */
public <T> GeneratorWrapper<T> specify(String world) { public <T> GeneratorWrapper<T> specify() {
return (GeneratorWrapper<T>) PS.get().IMP.wrapPlotGenerator(world, this); return (GeneratorWrapper<T>) PS.get().IMP.wrapPlotGenerator(this);
} }
@Override @Override

View File

@ -5,9 +5,7 @@ import java.util.UUID;
import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.commands.RequiredType; import com.intellectualcrafters.plot.commands.RequiredType;
import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.util.MainUtil;
import com.intellectualcrafters.plot.util.PlotGamemode; import com.intellectualcrafters.plot.util.PlotGamemode;
import com.intellectualcrafters.plot.util.PlotWeather; import com.intellectualcrafters.plot.util.PlotWeather;
@ -75,11 +73,6 @@ public class ConsolePlayer extends PlotPlayer {
PS.log(message); PS.log(message);
} }
@Override
public void sendMessage(final C c, final String... args) {
MainUtil.sendMessage(this, c, args);
}
@Override @Override
public void teleport(final Location loc) { public void teleport(final Location loc) {
final Plot plot = loc.getPlot(); final Plot plot = loc.getPlot();

View File

@ -0,0 +1,18 @@
package com.intellectualcrafters.plot.object;
public abstract class LazyResult<T> {
private T result;
public T get() {
return result;
}
public T getOrCreate() {
if (this.result == null) {
return (this.result = create());
}
return result;
}
public abstract T create();
}

View File

@ -422,7 +422,7 @@ public abstract class PlotPlayer implements CommandCaller {
} }
public void populatePersistentMetaMap() { public void populatePersistentMetaMap() {
DBFunc.dbManager.getPersistentMeta(this, new RunnableVal<Map<String, byte[]>>() { DBFunc.dbManager.getPersistentMeta(getUUID(), new RunnableVal<Map<String, byte[]>>() {
@Override @Override
public void run(Map<String, byte[]> value) { public void run(Map<String, byte[]> value) {
PlotPlayer.this.metaMap = value; PlotPlayer.this.metaMap = value;

View File

@ -1,5 +1,11 @@
package com.intellectualcrafters.plot.util; package com.intellectualcrafters.plot.util;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.ChunkLoc;
import com.intellectualcrafters.plot.object.ConsolePlayer; import com.intellectualcrafters.plot.object.ConsolePlayer;
@ -9,12 +15,6 @@ import com.intellectualcrafters.plot.object.RegionWrapper;
import com.intellectualcrafters.plot.object.RunnableVal; import com.intellectualcrafters.plot.object.RunnableVal;
import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper; import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public abstract class ChunkManager { public abstract class ChunkManager {
public static ChunkManager manager = null; public static ChunkManager manager = null;
@ -206,11 +206,11 @@ public abstract class ChunkManager {
public abstract void regenerateChunk(final String world, final ChunkLoc loc); public abstract void regenerateChunk(final String world, final ChunkLoc loc);
public void deleteRegionFiles(String world, List<ChunkLoc> chunks) { public void deleteRegionFiles(String world, Collection<ChunkLoc> chunks) {
deleteRegionFiles(world, chunks, null); deleteRegionFiles(world, chunks, null);
} }
public void deleteRegionFiles(final String world, final List<ChunkLoc> chunks, final Runnable whenDone) { public void deleteRegionFiles(final String world, final Collection<ChunkLoc> chunks, final Runnable whenDone) {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -222,9 +222,7 @@ public abstract class ChunkManager {
file.delete(); file.delete();
} }
} }
if (whenDone != null) { TaskManager.runTask(whenDone);
whenDone.run();
}
} }
}); });
} }

View File

@ -11,9 +11,11 @@ public abstract class EconHandler {
if (ConsolePlayer.isConsole(player)) { if (ConsolePlayer.isConsole(player)) {
return Double.MAX_VALUE; return Double.MAX_VALUE;
} }
return Double.NaN; return getBalance(player);
} }
public abstract double getBalance(PlotPlayer player);
public abstract void withdrawMoney(final PlotPlayer player, final double amount); public abstract void withdrawMoney(final PlotPlayer player, final double amount);
public abstract void depositMoney(final PlotPlayer player, final double amount); public abstract void depositMoney(final PlotPlayer player, final double amount);

View File

@ -25,6 +25,7 @@ import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.UUID; import java.util.UUID;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@ -525,14 +526,11 @@ public class MainUtil {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {
@Override @Override
public void run() { public void run() {
String msg = c.s(); String m = C.format(c, args);
if (args.length != 0) { if (plr == null) {
msg = C.format(c, args); ConsolePlayer.getConsole().sendMessage(m);
}
if (plr != null) {
plr.sendMessage(c.usePrefix() ? C.PREFIX.s() + msg : msg);
} else { } else {
ConsolePlayer.getConsole().sendMessage((c.usePrefix() ? C.PREFIX.s() : "") + msg); plr.sendMessage(m);
} }
} }
}); });
@ -712,4 +710,18 @@ public class MainUtil {
} }
return list.toString(); return list.toString();
} }
public static void getPersistentMeta(final UUID uuid, final String key, final RunnableVal<byte[]> result) {
PlotPlayer pp = UUIDHandler.getPlayer(uuid);
if (pp != null) {
result.run(pp.getPersistentMeta(key));
} else {
DBFunc.dbManager.getPersistentMeta(uuid, new RunnableVal<Map<String, byte[]>>() {
@Override
public void run(Map<String, byte[]> value) {
result.run(value.get(key));
}
});
}
}
} }

View File

@ -1,5 +1,9 @@
package com.intellectualcrafters.plot.util; package com.intellectualcrafters.plot.util;
import java.util.HashSet;
import java.util.Map;
import java.util.UUID;
import com.google.common.collect.BiMap; import com.google.common.collect.BiMap;
import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.object.OfflinePlotPlayer; import com.intellectualcrafters.plot.object.OfflinePlotPlayer;
@ -9,10 +13,6 @@ import com.intellectualcrafters.plot.object.RunnableVal;
import com.intellectualcrafters.plot.object.StringWrapper; import com.intellectualcrafters.plot.object.StringWrapper;
import com.intellectualcrafters.plot.uuid.UUIDWrapper; import com.intellectualcrafters.plot.uuid.UUIDWrapper;
import java.util.HashSet;
import java.util.Map;
import java.util.UUID;
public class UUIDHandler { public class UUIDHandler {
public static UUIDHandlerImplementation implementation; public static UUIDHandlerImplementation implementation;
@ -107,6 +107,13 @@ public class UUIDHandler {
return implementation.getPlayer(name); return implementation.getPlayer(name);
} }
public static UUID getUUIDFromString(String nameOrUUIDString) {
if (nameOrUUIDString.length() > 16) {
return UUID.fromString(nameOrUUIDString);
}
return UUIDHandler.getUUID(nameOrUUIDString, null);
}
public static UUID getUUID(final String name, final RunnableVal<UUID> ifFetch) { public static UUID getUUID(final String name, final RunnableVal<UUID> ifFetch) {
return implementation.getUUID(name, ifFetch); return implementation.getUUID(name, ifFetch);
} }

View File

@ -375,9 +375,7 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
@Override @Override
public void registerInventoryEvents() { public void registerInventoryEvents() {
// Part of PlayerEvents - can be moved if necessary // Part of PlayerEvents - can be moved if necessary
} }
@Override @Override
@ -486,7 +484,7 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
} }
return new BukkitPlotGenerator(world, gen); return new BukkitPlotGenerator(world, gen);
} else { } else {
return new BukkitPlotGenerator(world, new HybridGen()); return new BukkitPlotGenerator(new HybridGen());
} }
} }
@ -654,11 +652,7 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
} else if (obj instanceof String) { } else if (obj instanceof String) {
return UUIDHandler.getPlayer((String) obj); return UUIDHandler.getPlayer((String) obj);
} else if (obj instanceof UUID) { } else if (obj instanceof UUID) {
PlotPlayer player = UUIDHandler.getPlayer((UUID) obj); return UUIDHandler.getPlayer((UUID) obj);
if (player == null) {
return BukkitUtil.getPlayer(Bukkit.getOfflinePlayer((UUID) obj));
}
return player;
} }
return null; return null;
} }
@ -697,7 +691,7 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
@Override @Override
public GeneratorWrapper<?> wrapPlotGenerator(String world, IndependentPlotGenerator generator) { public GeneratorWrapper<?> wrapPlotGenerator(String world, IndependentPlotGenerator generator) {
return new BukkitPlotGenerator(world, generator); return new BukkitPlotGenerator(generator);
} }
@Override @Override

View File

@ -371,7 +371,7 @@ public class LikePlotMeConverter {
// Load using Bukkit API // Load using Bukkit API
// - User must set generator manually // - User must set generator manually
Bukkit.getServer().unloadWorld(world, true); Bukkit.getServer().unloadWorld(world, true);
final World myworld = WorldCreator.name(actualWorldName).generator(new BukkitPlotGenerator(actualWorldName, new HybridGen())).createWorld(); final World myworld = WorldCreator.name(actualWorldName).generator(new BukkitPlotGenerator(new HybridGen())).createWorld();
myworld.save(); myworld.save();
} }
} }

View File

@ -28,7 +28,7 @@ public class BukkitAugmentedGenerator extends BlockPopulator {
} }
@Override @Override
public void populate(World world, Random r, Chunk chunk) { public void populate(final World world, Random r, final Chunk chunk) {
AugmentedUtils.generate(world.getName(), chunk.getX(), chunk.getZ()); AugmentedUtils.generate(world.getName(), chunk.getX(), chunk.getZ(), null);
} }
} }

View File

@ -20,6 +20,17 @@
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
package com.plotsquared.bukkit.generator; package com.plotsquared.bukkit.generator;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Set;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator;
import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.generator.GeneratorWrapper; import com.intellectualcrafters.plot.generator.GeneratorWrapper;
import com.intellectualcrafters.plot.generator.HybridGen; import com.intellectualcrafters.plot.generator.HybridGen;
@ -36,16 +47,6 @@ import com.intellectualcrafters.plot.util.SetQueue;
import com.plotsquared.bukkit.listeners.WorldEvents; import com.plotsquared.bukkit.listeners.WorldEvents;
import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.bukkit.util.block.GenChunk; import com.plotsquared.bukkit.util.block.GenChunk;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Set;
public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> { public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> {
@ -54,12 +55,10 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
private final IndependentPlotGenerator plotGenerator; private final IndependentPlotGenerator plotGenerator;
private final List<BlockPopulator> populators = new ArrayList<>(); private final List<BlockPopulator> populators = new ArrayList<>();
private boolean loaded = false; private boolean loaded = false;
private PlotManager manager;
private ChunkGenerator platformGenerator; private ChunkGenerator platformGenerator;
private boolean full; private boolean full;
public BukkitPlotGenerator(final String world, IndependentPlotGenerator generator) { public BukkitPlotGenerator(IndependentPlotGenerator generator) {
WorldEvents.lastWorld = world;
this.plotGenerator = generator; this.plotGenerator = generator;
this.platformGenerator = this; this.platformGenerator = this;
populators.add(new BlockPopulator() { populators.add(new BlockPopulator() {
@ -87,7 +86,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
} }
} }
}); });
chunkSetter = new GenChunk(null, SetQueue.IMP.new ChunkWrapper(world, 0, 0)); chunkSetter = new GenChunk(null, null);
this.full = true; this.full = true;
MainUtil.initCache(); MainUtil.initCache();
} }

View File

@ -1,14 +1,7 @@
package com.plotsquared.bukkit.object; package com.plotsquared.bukkit.object;
import com.intellectualcrafters.plot.config.C; import java.util.UUID;
import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.util.EconHandler;
import com.intellectualcrafters.plot.util.MainUtil;
import com.intellectualcrafters.plot.util.PlotGamemode;
import com.intellectualcrafters.plot.util.PlotWeather;
import com.intellectualcrafters.plot.util.UUIDHandler;
import com.plotsquared.bukkit.util.BukkitUtil;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Effect; import org.bukkit.Effect;
import org.bukkit.GameMode; import org.bukkit.GameMode;
@ -18,7 +11,14 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.permissions.Permission; import org.bukkit.permissions.Permission;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import java.util.UUID; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.util.EconHandler;
import com.intellectualcrafters.plot.util.PlotGamemode;
import com.intellectualcrafters.plot.util.PlotWeather;
import com.intellectualcrafters.plot.util.UUIDHandler;
import com.plotsquared.bukkit.util.BukkitUtil;
public class BukkitPlayer extends PlotPlayer { public class BukkitPlayer extends PlotPlayer {
@ -101,11 +101,6 @@ public class BukkitPlayer extends PlotPlayer {
player.sendMessage(message); player.sendMessage(message);
} }
@Override
public void sendMessage(final C c, final String... args) {
MainUtil.sendMessage(this, c, args);
}
@Override @Override
public void teleport(final Location loc) { public void teleport(final Location loc) {
if (Math.abs(loc.getX()) >= 30000000 || Math.abs(loc.getZ()) >= 30000000) { if (Math.abs(loc.getX()) >= 30000000 || Math.abs(loc.getZ()) >= 30000000) {
@ -145,7 +140,6 @@ public class BukkitPlayer extends PlotPlayer {
@Override @Override
public boolean getAttribute(String key) { public boolean getAttribute(String key) {
if (!hasPersistentMeta(key)) { if (!hasPersistentMeta(key)) {
return false; return false;
} }

View File

@ -1,14 +1,16 @@
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;
import org.bukkit.Bukkit;
import org.bukkit.plugin.RegisteredServiceProvider;
import com.intellectualcrafters.plot.object.OfflinePlotPlayer; import com.intellectualcrafters.plot.object.OfflinePlotPlayer;
import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.util.EconHandler; import com.intellectualcrafters.plot.util.EconHandler;
import com.plotsquared.bukkit.object.BukkitOfflinePlayer; import com.plotsquared.bukkit.object.BukkitOfflinePlayer;
import com.plotsquared.bukkit.object.BukkitPlayer; import com.plotsquared.bukkit.object.BukkitPlayer;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;
import org.bukkit.Bukkit;
import org.bukkit.plugin.RegisteredServiceProvider;
public class BukkitEconHandler extends EconHandler { public class BukkitEconHandler extends EconHandler {
@ -88,4 +90,9 @@ public class BukkitEconHandler extends EconHandler {
public boolean hasPermission(final String world, final String player, final String perm) { public boolean hasPermission(final String world, final String player, final String perm) {
return perms.playerHas(world, Bukkit.getOfflinePlayer(player), perm); return perms.playerHas(world, Bukkit.getOfflinePlayer(player), perm);
} }
@Override
public double getBalance(PlotPlayer player) {
return econ.getBalance(player.getName());
}
} }

View File

@ -1,13 +1,10 @@
package com.plotsquared.general.commands; package com.plotsquared.general.commands;
import com.intellectualcrafters.plot.commands.RequiredType; import com.intellectualcrafters.plot.commands.RequiredType;
import com.intellectualcrafters.plot.config.C;
public interface CommandCaller { public interface CommandCaller {
void sendMessage(final String message); void sendMessage(final String message);
void sendMessage(final C c, final String... args);
boolean hasPermission(final String perm); boolean hasPermission(final String perm);
RequiredType getSuperCaller(); RequiredType getSuperCaller();