This commit is contained in:
dordsor21 2018-12-26 21:18:22 +00:00
parent ba47a21971
commit 6e127db982
112 changed files with 1809 additions and 2264 deletions

View File

@ -72,12 +72,7 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
pluginsField.setAccessible(true); pluginsField.setAccessible(true);
lookupNamesField.setAccessible(true); lookupNamesField.setAccessible(true);
List<Plugin> plugins = (List<Plugin>) pluginsField.get(manager); List<Plugin> plugins = (List<Plugin>) pluginsField.get(manager);
Iterator<Plugin> iter = plugins.iterator(); plugins.removeIf(plugin -> plugin.getName().startsWith("PlotMe"));
while (iter.hasNext()) {
if (iter.next().getName().startsWith("PlotMe")) {
iter.remove();
}
}
Map<String, Plugin> lookupNames = Map<String, Plugin> lookupNames =
(Map<String, Plugin>) lookupNamesField.get(manager); (Map<String, Plugin>) lookupNamesField.get(manager);
lookupNames.remove("PlotMe"); lookupNames.remove("PlotMe");
@ -201,8 +196,8 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
this.methodUnloadChunk0 = classCraftWorld.getRealClass() this.methodUnloadChunk0 = classCraftWorld.getRealClass()
.getDeclaredMethod("unloadChunk0", int.class, int.class, boolean.class); .getDeclaredMethod("unloadChunk0", int.class, int.class, boolean.class);
this.methodUnloadChunk0.setAccessible(true); this.methodUnloadChunk0.setAccessible(true);
} catch (Throwable ignore) { } catch (Throwable e) {
ignore.printStackTrace(); e.printStackTrace();
} }
} }
final PlotAreaManager manager = PlotSquared.get().getPlotAreaManager(); final PlotAreaManager manager = PlotSquared.get().getPlotAreaManager();
@ -226,7 +221,7 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
if (id != null) { if (id != null) {
final Plot plot = area.getOwnedPlot(id); final Plot plot = area.getOwnedPlot(id);
if (plot != null) { if (plot != null) {
if (PlotPlayer.wrap(plot.owner) == null) { if (PlotPlayer.wrap(plot.guessOwner()) == null) {
if (world.getKeepSpawnInMemory()) { if (world.getKeepSpawnInMemory()) {
world.setKeepSpawnInMemory(false); world.setKeepSpawnInMemory(false);
return; return;
@ -651,10 +646,8 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain
@Override public boolean initPlotMeConverter() { @Override public boolean initPlotMeConverter() {
if (new LikePlotMeConverter("PlotMe").run(new ClassicPlotMeConnector())) { if (new LikePlotMeConverter("PlotMe").run(new ClassicPlotMeConnector())) {
return true; return true;
} else if (new LikePlotMeConverter("PlotMe").run(new PlotMeConnector_017())) { } else
return true; return new LikePlotMeConverter("PlotMe").run(new PlotMeConnector_017());
}
return false;
} }
@Override @Nullable public GeneratorWrapper<?> getGenerator(@NonNull final String world, @Override @Nullable public GeneratorWrapper<?> getGenerator(@NonNull final String world,

View File

@ -26,7 +26,7 @@ public final class ArrayWrapper<E> {
* *
* @param elements The elements of the array. * @param elements The elements of the array.
*/ */
public ArrayWrapper(E... elements) { @SafeVarargs public ArrayWrapper(E... elements) {
setArray(elements); setArray(elements);
} }

View File

@ -56,7 +56,7 @@ final class MessagePart implements JsonRepresentedObject, ConfigurationSerializa
String clickActionData = null; String clickActionData = null;
String hoverActionName = null; String hoverActionName = null;
JsonRepresentedObject hoverActionData = null; JsonRepresentedObject hoverActionData = null;
TextualComponent text = null; TextualComponent text;
String insertionData = null; String insertionData = null;
ArrayList<JsonRepresentedObject> translationReplacements = new ArrayList<>(); ArrayList<JsonRepresentedObject> translationReplacements = new ArrayList<>();
@ -123,8 +123,7 @@ final class MessagePart implements JsonRepresentedObject, ConfigurationSerializa
if (insertionData != null) { if (insertionData != null) {
json.name("insertion").value(insertionData); json.name("insertion").value(insertionData);
} }
if (translationReplacements.size() > 0 && text != null && TextualComponent if (translationReplacements.size() > 0 && TextualComponent.isTranslatableText(text)) {
.isTranslatableText(text)) {
json.name("with").beginArray(); json.name("with").beginArray();
for (JsonRepresentedObject obj : translationReplacements) { for (JsonRepresentedObject obj : translationReplacements) {
obj.writeJson(json); obj.writeJson(json);

View File

@ -181,13 +181,13 @@ public final class Reflection {
*/ */
public synchronized static Method getMethod(Class<?> clazz, String name, Class<?>... args) { public synchronized static Method getMethod(Class<?> clazz, String name, Class<?>... args) {
if (!_loadedMethods.containsKey(clazz)) { if (!_loadedMethods.containsKey(clazz)) {
_loadedMethods.put(clazz, new HashMap<String, Map<ArrayWrapper<Class<?>>, Method>>()); _loadedMethods.put(clazz, new HashMap<>());
} }
Map<String, Map<ArrayWrapper<Class<?>>, Method>> loadedMethodNames = Map<String, Map<ArrayWrapper<Class<?>>, Method>> loadedMethodNames =
_loadedMethods.get(clazz); _loadedMethods.get(clazz);
if (!loadedMethodNames.containsKey(name)) { if (!loadedMethodNames.containsKey(name)) {
loadedMethodNames.put(name, new HashMap<ArrayWrapper<Class<?>>, Method>()); loadedMethodNames.put(name, new HashMap<>());
} }
Map<ArrayWrapper<Class<?>>, Method> loadedSignatures = loadedMethodNames.get(name); Map<ArrayWrapper<Class<?>>, Method> loadedSignatures = loadedMethodNames.get(name);

View File

@ -207,7 +207,7 @@ public abstract class TextualComponent implements Cloneable {
this.value = value; this.value = value;
} }
@Override public TextualComponent clone() throws CloneNotSupportedException { @Override public TextualComponent clone() {
// Since this is a private and final class, we can just reinstantiate this class instead of casting super.clone // Since this is a private and final class, we can just reinstantiate this class instead of casting super.clone
return new ArbitraryTextTypeComponent(getKey(), getValue()); return new ArbitraryTextTypeComponent(getKey(), getValue());
} }

View File

@ -171,126 +171,114 @@ import java.util.Map.Entry;
} }
MainUtil.sendMessage(player, "&7 - Replacing cache"); MainUtil.sendMessage(player, "&7 - Replacing cache");
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { for (Entry<UUID, UUID> entry : uCMap.entrySet()) {
for (Entry<UUID, UUID> entry : uCMap.entrySet()) { String name = UUIDHandler.getName(entry.getKey());
String name = UUIDHandler.getName(entry.getKey()); if (name != null) {
if (name != null) { UUIDHandler.add(new StringWrapper(name), entry.getValue());
UUIDHandler.add(new StringWrapper(name), entry.getValue());
}
} }
}
MainUtil.sendMessage(player, "&7 - Scanning for applicable files (uuids.txt)"); MainUtil.sendMessage(player, "&7 - Scanning for applicable files (uuids.txt)");
File file = new File(PlotSquared.get().IMP.getDirectory(), "uuids.txt");
if (file.exists()) {
try {
List<String> lines =
Files.readAllLines(file.toPath(), StandardCharsets.UTF_8);
for (String line : lines) {
try {
line = line.trim();
if (line.isEmpty()) {
continue;
}
line = line.replaceAll("[\\|][0-9]+[\\|][0-9]+[\\|]", "");
String[] split = line.split("\\|");
String name = split[0];
if (name.isEmpty() || name.length() > 16 || !StringMan
.isAlphanumericUnd(name)) {
continue;
}
UUID old = currentUUIDWrapper.getUUID(name);
if (old == null) {
continue;
}
UUID now = newWrapper.getUUID(name);
UUIDHandler.add(new StringWrapper(name), now);
uCMap.put(old, now);
uCReverse.put(now, old);
} catch (Exception e2) {
e2.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
MainUtil.sendMessage(player, "&7 - Replacing wrapper");
UUIDHandler.setUUIDWrapper(newWrapper);
MainUtil.sendMessage(player, "&7 - Updating plot objects");
for (Plot plot : PlotSquared.get().getPlots()) {
UUID value = uCMap.get(plot.owner);
if (value != null) {
plot.owner = value;
}
plot.getTrusted().clear();
plot.getMembers().clear();
plot.getDenied().clear();
}
MainUtil.sendMessage(player, "&7 - Deleting database");
boolean result = DBFunc.deleteTables();
MainUtil.sendMessage(player, "&7 - Creating tables");
File file = new File(PlotSquared.get().IMP.getDirectory(), "uuids.txt");
if (file.exists()) {
try { try {
DBFunc.createTables(); List<String> lines = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8);
if (!result) { for (String line : lines) {
MainUtil.sendMessage(player, "&cConversion failed! Attempting recovery"); try {
for (Plot plot : PlotSquared.get().getPlots()) { line = line.trim();
UUID value = uCReverse.get(plot.owner); if (line.isEmpty()) {
if (value != null) { continue;
plot.owner = value;
} }
line = line.replaceAll("[\\|][0-9]+[\\|][0-9]+[\\|]", "");
String[] split = line.split("\\|");
String name = split[0];
if (name.isEmpty() || name.length() > 16 || !StringMan
.isAlphanumericUnd(name)) {
continue;
}
UUID old = currentUUIDWrapper.getUUID(name);
if (old == null) {
continue;
}
UUID now = newWrapper.getUUID(name);
UUIDHandler.add(new StringWrapper(name), now);
uCMap.put(old, now);
uCReverse.put(now, old);
} catch (Exception e2) {
e2.printStackTrace();
} }
DBFunc.createPlotsAndData(new ArrayList<>(PlotSquared.get().getPlots()),
new Runnable() {
@Override public void run() {
MainUtil.sendMessage(player, "&6Recovery was successful!");
}
});
return;
} }
} catch (Exception e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
}
}
MainUtil.sendMessage(player, "&7 - Replacing wrapper");
UUIDHandler.setUUIDWrapper(newWrapper);
MainUtil.sendMessage(player, "&7 - Updating plot objects");
for (Plot plot : PlotSquared.get().getPlots()) {
UUID value = uCMap.get(plot.guessOwner());
if (value != null) {
plot.setOwner(value);
}
plot.getTrusted().clear();
plot.getMembers().clear();
plot.getDenied().clear();
}
MainUtil.sendMessage(player, "&7 - Deleting database");
boolean result = DBFunc.deleteTables();
MainUtil.sendMessage(player, "&7 - Creating tables");
try {
DBFunc.createTables();
if (!result) {
MainUtil.sendMessage(player, "&cConversion failed! Attempting recovery");
for (Plot plot : PlotSquared.get().getPlots()) {
UUID value = uCReverse.get(plot.guessOwner());
if (value != null) {
plot.setOwner(value);
}
}
DBFunc.createPlotsAndData(new ArrayList<>(PlotSquared.get().getPlots()),
() -> MainUtil.sendMessage(player, "&6Recovery was successful!"));
return; return;
} }
} catch (Exception e) {
if (newWrapper instanceof OfflineUUIDWrapper) { e.printStackTrace();
PlotSquared.get().worlds.set("UUID.force-lowercase", false); return;
PlotSquared.get().worlds.set("UUID.offline", true);
} else if (newWrapper instanceof DefaultUUIDWrapper) {
PlotSquared.get().worlds.set("UUID.force-lowercase", false);
PlotSquared.get().worlds.set("UUID.offline", false);
}
try {
PlotSquared.get().worlds.save(PlotSquared.get().worldsFile);
} catch (IOException ignored) {
MainUtil.sendMessage(player,
"Could not save configuration. It will need to be manual set!");
}
MainUtil.sendMessage(player, "&7 - Populating tables");
TaskManager.runTaskAsync(new Runnable() {
@Override public void run() {
ArrayList<Plot> plots = new ArrayList<>(PlotSquared.get().getPlots());
DBFunc.createPlotsAndData(plots, new Runnable() {
@Override public void run() {
MainUtil.sendMessage(player, "&aConversion complete!");
}
});
}
});
MainUtil.sendMessage(player, "&aIt is now safe for players to join");
MainUtil.sendMessage(player,
"&cConversion is still in progress, you will be notified when it is complete");
} }
if (newWrapper instanceof OfflineUUIDWrapper) {
PlotSquared.get().worlds.set("UUID.force-lowercase", false);
PlotSquared.get().worlds.set("UUID.offline", true);
} else if (newWrapper instanceof DefaultUUIDWrapper) {
PlotSquared.get().worlds.set("UUID.force-lowercase", false);
PlotSquared.get().worlds.set("UUID.offline", false);
}
try {
PlotSquared.get().worlds.save(PlotSquared.get().worldsFile);
} catch (IOException ignored) {
MainUtil.sendMessage(player,
"Could not save configuration. It will need to be manual set!");
}
MainUtil.sendMessage(player, "&7 - Populating tables");
TaskManager.runTaskAsync(() -> {
ArrayList<Plot> plots = new ArrayList<>(PlotSquared.get().getPlots());
DBFunc.createPlotsAndData(plots,
() -> MainUtil.sendMessage(player, "&aConversion complete!"));
});
MainUtil.sendMessage(player, "&aIt is now safe for players to join");
MainUtil.sendMessage(player,
"&cConversion is still in progress, you will be notified when it is complete");
}); });
return true; return true;
} }

View File

@ -66,13 +66,13 @@ public class ClassicPlotMeConnector extends APlotMeConnector {
String name = resultSet.getString("owner"); String name = resultSet.getString("owner");
String world = LikePlotMeConverter.getWorld(resultSet.getString("world")); String world = LikePlotMeConverter.getWorld(resultSet.getString("world"));
if (!plots.containsKey(world)) { if (!plots.containsKey(world)) {
plots.put(world, new HashMap<PlotId, Plot>()); plots.put(world, new HashMap<>());
if (merge) { if (merge) {
int plot = PlotSquared.get().worlds.getInt("worlds." + world + ".plot.size"); int plot = PlotSquared.get().worlds.getInt("worlds." + world + ".plot.size");
int path = PlotSquared.get().worlds.getInt("worlds." + world + ".road.width"); int path = PlotSquared.get().worlds.getInt("worlds." + world + ".road.width");
plotWidth.put(world, plot); plotWidth.put(world, plot);
roadWidth.put(world, path); roadWidth.put(world, path);
merges.put(world, new HashMap<PlotId, boolean[]>()); merges.put(world, new HashMap<>());
} }
} }
if (merge) { if (merge) {

View File

@ -48,7 +48,7 @@ public class LikePlotMeConverter {
private void sendMessage(String message) { private void sendMessage(String message) {
PlotSquared PlotSquared
.debug("&3PlotMe&8->&3" + PlotSquared.imp().getPluginName() + "&8: &7" + message); .debug("&3PlotMe&8->&3" + PlotSquared.get().IMP.getPluginName() + "&8: &7" + message);
} }
public String getPlotMePath() { public String getPlotMePath() {
@ -97,7 +97,7 @@ public class LikePlotMeConverter {
return; return;
} }
String content = new String(Files.readAllBytes(path), StandardCharsets.UTF_8); String content = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
String pluginName = PlotSquared.imp().getPluginName(); String pluginName = PlotSquared.get().IMP.getPluginName();
content = content.replace("PlotMe-DefaultGenerator", pluginName); content = content.replace("PlotMe-DefaultGenerator", pluginName);
content = content.replace("PlotMe", pluginName); content = content.replace("PlotMe", pluginName);
content = content.replace("AthionPlots", pluginName); content = content.replace("AthionPlots", pluginName);
@ -220,8 +220,8 @@ public class LikePlotMeConverter {
for (String world : allWorlds) { for (String world : allWorlds) {
copyConfig(plotmeDgYml, world); copyConfig(plotmeDgYml, world);
} }
} catch (IOException ignored) { } catch (IOException e) {
ignored.printStackTrace(); e.printStackTrace();
} }
} }
for (Entry<String, HashMap<PlotId, Plot>> entry : plots.entrySet()) { for (Entry<String, HashMap<PlotId, Plot>> entry : plots.entrySet()) {
@ -266,23 +266,21 @@ public class LikePlotMeConverter {
sendMessage("Creating plot DB"); sendMessage("Creating plot DB");
Thread.sleep(1000); Thread.sleep(1000);
final AtomicBoolean done = new AtomicBoolean(false); final AtomicBoolean done = new AtomicBoolean(false);
DBFunc.createPlotsAndData(createdPlots, new Runnable() { DBFunc.createPlotsAndData(createdPlots, () -> {
@Override public void run() { if (done.get()) {
if (done.get()) { done();
done(); sendMessage("&aDatabase conversion is now complete!");
sendMessage("&aDatabase conversion is now complete!"); PlotSquared.debug("&c - Stop the server");
PlotSquared.debug("&c - Stop the server"); PlotSquared.debug(
PlotSquared.debug( "&c - Disable 'plotme-converter' and 'plotme-convert.cache-uuids' in the settings.yml");
"&c - Disable 'plotme-converter' and 'plotme-convert.cache-uuids' in the settings.yml"); PlotSquared.debug(
PlotSquared.debug( "&c - Correct any generator settings that haven't copied to 'settings.yml' properly");
"&c - Correct any generator settings that haven't copied to 'settings.yml' properly"); PlotSquared.debug("&c - Start the server");
PlotSquared.debug("&c - Start the server"); PlotSquared.get().setPlots(DBFunc.getPlots());
PlotSquared.get().setPlots(DBFunc.getPlots()); } else {
} else { sendMessage(
sendMessage( "&cPlease wait until database conversion is complete. You will be notified with instructions when this happens!");
"&cPlease wait until database conversion is complete. You will be notified with instructions when this happens!"); done.set(true);
done.set(true);
}
} }
}); });
sendMessage("Saving configuration..."); sendMessage("Saving configuration...");
@ -291,93 +289,88 @@ public class LikePlotMeConverter {
} catch (IOException ignored) { } catch (IOException ignored) {
sendMessage(" - &cFailed to save configuration."); sendMessage(" - &cFailed to save configuration.");
} }
TaskManager.runTask(new Runnable() { TaskManager.runTask(() -> {
@Override public void run() { try {
try { boolean mv = false;
boolean mv = false; boolean mw = false;
boolean mw = false; if ((Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) && Bukkit
if ((Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) .getPluginManager().getPlugin("Multiverse-Core").isEnabled()) {
&& Bukkit.getPluginManager().getPlugin("Multiverse-Core").isEnabled()) { mv = true;
mv = true; } else if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) && Bukkit
} else if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) .getPluginManager().getPlugin("MultiWorld").isEnabled()) {
&& Bukkit.getPluginManager().getPlugin("MultiWorld").isEnabled()) { mw = true;
mw = true; }
for (String worldName : worlds) {
World world = Bukkit.getWorld(getWorld(worldName));
if (world == null) {
sendMessage("&cInvalid world in PlotMe configuration: " + worldName);
continue;
} }
for (String worldName : worlds) { String actualWorldName = world.getName();
World world = Bukkit.getWorld(getWorld(worldName)); sendMessage("Reloading generator for world: '" + actualWorldName + "'...");
if (world == null) { if (!Bukkit.getWorlds().isEmpty() && Bukkit.getWorlds().get(0).getName()
sendMessage( .equals(worldName)) {
"&cInvalid world in PlotMe configuration: " + worldName);
continue;
}
String actualWorldName = world.getName();
sendMessage( sendMessage(
"Reloading generator for world: '" + actualWorldName + "'..."); "&cYou need to stop the server to reload this world properly");
if (!Bukkit.getWorlds().isEmpty() && Bukkit.getWorlds().get(0).getName() } else {
.equals(worldName)) { PlotSquared.get().removePlotAreas(actualWorldName);
sendMessage( if (mv) {
"&cYou need to stop the server to reload this world properly"); // unload world with MV
} else { Bukkit.getServer()
PlotSquared.get().removePlotAreas(actualWorldName); .dispatchCommand(Bukkit.getServer().getConsoleSender(),
if (mv) { "mv unload " + actualWorldName);
// unload world with MV try {
Bukkit.getServer() Thread.sleep(1000);
.dispatchCommand(Bukkit.getServer().getConsoleSender(), } catch (InterruptedException ignored) {
"mv unload " + actualWorldName); Thread.currentThread().interrupt();
try {
Thread.sleep(1000);
} catch (InterruptedException ignored) {
Thread.currentThread().interrupt();
}
// load world with MV
Bukkit.getServer()
.dispatchCommand(Bukkit.getServer().getConsoleSender(),
"mv import " + actualWorldName + " normal -g "
+ PlotSquared.imp().getPluginName());
} else if (mw) {
// unload world with MW
Bukkit.getServer()
.dispatchCommand(Bukkit.getServer().getConsoleSender(),
"mw unload " + actualWorldName);
try {
Thread.sleep(1000);
} catch (InterruptedException ignored) {
Thread.currentThread().interrupt();
}
// load world with MW
Bukkit.getServer()
.dispatchCommand(Bukkit.getServer().getConsoleSender(),
"mw create " + actualWorldName + " plugin:"
+ PlotSquared.imp().getPluginName());
} else {
// Load using Bukkit API
// - User must set generator manually
Bukkit.getServer().unloadWorld(world, true);
World myWorld = WorldCreator.name(actualWorldName).generator(
new BukkitPlotGenerator(
PlotSquared.get().IMP.getDefaultGenerator()))
.createWorld();
myWorld.save();
} }
// load world with MV
Bukkit.getServer()
.dispatchCommand(Bukkit.getServer().getConsoleSender(),
"mv import " + actualWorldName + " normal -g " + PlotSquared
.get().IMP.getPluginName());
} else if (mw) {
// unload world with MW
Bukkit.getServer()
.dispatchCommand(Bukkit.getServer().getConsoleSender(),
"mw unload " + actualWorldName);
try {
Thread.sleep(1000);
} catch (InterruptedException ignored) {
Thread.currentThread().interrupt();
}
// load world with MW
Bukkit.getServer()
.dispatchCommand(Bukkit.getServer().getConsoleSender(),
"mw create " + actualWorldName + " plugin:" + PlotSquared
.get().IMP.getPluginName());
} else {
// Load using Bukkit API
// - User must set generator manually
Bukkit.getServer().unloadWorld(world, true);
World myWorld = WorldCreator.name(actualWorldName).generator(
new BukkitPlotGenerator(
PlotSquared.get().IMP.getDefaultGenerator())).createWorld();
myWorld.save();
} }
} }
} catch (CommandException e) {
e.printStackTrace();
}
if (done.get()) {
done();
sendMessage("&aDatabase conversion is now complete!");
PlotSquared.debug("&c - Stop the server");
PlotSquared.debug(
"&c - Disable 'plotme-converter' and 'plotme-convert.cache-uuids' in the settings.yml");
PlotSquared.debug(
"&c - Correct any generator settings that haven't copied to 'settings.yml' properly");
PlotSquared.debug("&c - Start the server");
} else {
sendMessage(
"&cPlease wait until database conversion is complete. You will be notified with instructions when this happens!");
done.set(true);
} }
} catch (CommandException e) {
e.printStackTrace();
}
if (done.get()) {
done();
sendMessage("&aDatabase conversion is now complete!");
PlotSquared.debug("&c - Stop the server");
PlotSquared.debug(
"&c - Disable 'plotme-converter' and 'plotme-convert.cache-uuids' in the settings.yml");
PlotSquared.debug(
"&c - Correct any generator settings that haven't copied to 'settings.yml' properly");
PlotSquared.debug("&c - Start the server");
} else {
sendMessage(
"&cPlease wait until database conversion is complete. You will be notified with instructions when this happens!");
done.set(true);
} }
}); });
} catch (InterruptedException | SQLException e) { } catch (InterruptedException | SQLException e) {

View File

@ -75,7 +75,7 @@ public class PlotMeConnector_017 extends APlotMeConnector {
int path = PlotSquared.get().worlds.getInt("worlds." + world + ".road.width"); int path = PlotSquared.get().worlds.getInt("worlds." + world + ".road.width");
plotWidth.put(world, plot); plotWidth.put(world, plot);
roadWidth.put(world, path); roadWidth.put(world, path);
merges.put(world, new HashMap<PlotId, boolean[]>()); merges.put(world, new HashMap<>());
} }
if (merge) { if (merge) {
int tx = resultSet.getInt("topX"); int tx = resultSet.getInt("topX");
@ -178,11 +178,8 @@ public class PlotMeConnector_017 extends APlotMeConnector {
HashMap<String, HashMap<PlotId, Plot>> processed = new HashMap<>(); HashMap<String, HashMap<PlotId, Plot>> processed = new HashMap<>();
for (Plot plot : plots.values()) { for (Plot plot : plots.values()) {
HashMap<PlotId, Plot> map = processed.get(plot.getWorldName()); HashMap<PlotId, Plot> map =
if (map == null) { processed.computeIfAbsent(plot.getWorldName(), k -> new HashMap<>());
map = new HashMap<>();
processed.put(plot.getWorldName(), map);
}
map.put(plot.getId(), plot); map.put(plot.getId(), plot);
} }
return processed; return processed;

View File

@ -19,7 +19,10 @@ import org.bukkit.block.Biome;
import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
import java.util.*; import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Set;
public class BukkitPlotGenerator extends ChunkGenerator public class BukkitPlotGenerator extends ChunkGenerator
implements GeneratorWrapper<ChunkGenerator> { implements GeneratorWrapper<ChunkGenerator> {
@ -28,7 +31,6 @@ public class BukkitPlotGenerator extends ChunkGenerator
private final IndependentPlotGenerator plotGenerator; private final IndependentPlotGenerator plotGenerator;
private final ChunkGenerator platformGenerator; private final ChunkGenerator platformGenerator;
private final boolean full; private final boolean full;
private final HashMap<ChunkLoc, byte[][]> dataMap = new HashMap<>();
private List<BlockPopulator> populators; private List<BlockPopulator> populators;
private boolean loaded = false; private boolean loaded = false;
@ -199,9 +201,11 @@ public class BukkitPlotGenerator extends ChunkGenerator
if (populators == null && platformGenerator != null) { if (populators == null && platformGenerator != null) {
populators = new ArrayList<>(platformGenerator.getDefaultPopulators(world)); populators = new ArrayList<>(platformGenerator.getDefaultPopulators(world));
} }
for (BlockPopulator populator : this.populators) { if (this.populators != null) {
if (!existing.contains(populator)) { for (BlockPopulator populator : this.populators) {
toAdd.add(populator); if (!existing.contains(populator)) {
toAdd.add(populator);
}
} }
} }
return toAdd; return toAdd;

View File

@ -47,7 +47,7 @@ import static com.github.intellectualsites.plotsquared.plot.util.ReflectionUtils
this.mustSave = classChunk.getField("mustSave"); this.mustSave = classChunk.getField("mustSave");
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle"); this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle");
} catch (Throwable ignored) { } catch (Throwable ignored) {
PlotSquared.debug(PlotSquared.imp().getPluginName() PlotSquared.debug(PlotSquared.get().IMP.getPluginName()
+ "/Server not compatible for chunk processor trim/gc"); + "/Server not compatible for chunk processor trim/gc");
Settings.Chunk_Processor.AUTO_TRIM = false; Settings.Chunk_Processor.AUTO_TRIM = false;
} }
@ -58,48 +58,45 @@ import static com.github.intellectualsites.plotsquared.plot.util.ReflectionUtils
for (World world : Bukkit.getWorlds()) { for (World world : Bukkit.getWorlds()) {
world.setAutoSave(false); world.setAutoSave(false);
} }
TaskManager.runTaskRepeat(new Runnable() { TaskManager.runTaskRepeat(() -> {
@Override public void run() { try {
try { HashSet<Chunk> toUnload = new HashSet<>();
HashSet<Chunk> toUnload = new HashSet<>(); for (World world : Bukkit.getWorlds()) {
for (World world : Bukkit.getWorlds()) { String worldName = world.getName();
String worldName = world.getName(); if (!PlotSquared.get().hasPlotArea(worldName)) {
if (!PlotSquared.get().hasPlotArea(worldName)) { continue;
}
Object w = world.getClass().getDeclaredMethod("getHandle").invoke(world);
Object chunkMap = w.getClass().getDeclaredMethod("getPlayerChunkMap").invoke(w);
Method methodIsChunkInUse =
chunkMap.getClass().getDeclaredMethod("isChunkInUse", int.class, int.class);
Chunk[] chunks = world.getLoadedChunks();
for (Chunk chunk : chunks) {
if ((boolean) methodIsChunkInUse
.invoke(chunkMap, chunk.getX(), chunk.getZ())) {
continue; continue;
} }
Object w = world.getClass().getDeclaredMethod("getHandle").invoke(world); int x = chunk.getX();
Object chunkMap = int z = chunk.getZ();
w.getClass().getDeclaredMethod("getPlayerChunkMap").invoke(w); if (!shouldSave(worldName, x, z)) {
Method methodIsChunkInUse = chunkMap.getClass() unloadChunk(worldName, chunk, false);
.getDeclaredMethod("isChunkInUse", int.class, int.class); continue;
Chunk[] chunks = world.getLoadedChunks();
for (Chunk chunk : chunks) {
if ((boolean) methodIsChunkInUse
.invoke(chunkMap, chunk.getX(), chunk.getZ())) {
continue;
}
int x = chunk.getX();
int z = chunk.getZ();
if (!shouldSave(worldName, x, z)) {
unloadChunk(worldName, chunk, false);
continue;
}
toUnload.add(chunk);
} }
toUnload.add(chunk);
} }
if (toUnload.isEmpty()) { }
if (toUnload.isEmpty()) {
return;
}
long start = System.currentTimeMillis();
for (Chunk chunk : toUnload) {
if (System.currentTimeMillis() - start > 5) {
return; return;
} }
long start = System.currentTimeMillis(); chunk.unload(true, false);
for (Chunk chunk : toUnload) {
if (System.currentTimeMillis() - start > 5) {
return;
}
chunk.unload(true, false);
}
} catch (Throwable e) {
e.printStackTrace();
} }
} catch (Throwable e) {
e.printStackTrace();
} }
}, 1); }, 1);
} }
@ -110,7 +107,7 @@ import static com.github.intellectualsites.plotsquared.plot.util.ReflectionUtils
} }
Object c = this.methodGetHandleChunk.of(chunk).call(); Object c = this.methodGetHandleChunk.of(chunk).call();
RefField.RefExecutor field = this.mustSave.of(c); RefField.RefExecutor field = this.mustSave.of(c);
if ((Boolean) field.get() == true) { if ((Boolean) field.get()) {
field.set(false); field.set(false);
if (chunk.isLoaded()) { if (chunk.isLoaded()) {
ignoreUnload = true; ignoreUnload = true;
@ -221,9 +218,26 @@ import static com.github.intellectualsites.plotsquared.plot.util.ReflectionUtils
private void cleanChunk(final Chunk chunk) { private void cleanChunk(final Chunk chunk) {
TaskManager.index.incrementAndGet(); TaskManager.index.incrementAndGet();
final Integer currentIndex = TaskManager.index.get(); final Integer currentIndex = TaskManager.index.get();
Integer task = TaskManager.runTaskRepeat(new Runnable() { Integer task = TaskManager.runTaskRepeat(() -> {
@Override public void run() { if (!chunk.isLoaded()) {
if (!chunk.isLoaded()) { Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex));
TaskManager.tasks.remove(currentIndex);
PlotSquared.debug(C.PREFIX.s() + "&aSuccessfully processed and unloaded chunk!");
chunk.unload(true, true);
return;
}
BlockState[] tiles = chunk.getTileEntities();
if (tiles.length == 0) {
Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex));
TaskManager.tasks.remove(currentIndex);
PlotSquared.debug(C.PREFIX.s() + "&aSuccessfully processed and unloaded chunk!");
chunk.unload(true, true);
return;
}
long start = System.currentTimeMillis();
int i = 0;
while (System.currentTimeMillis() - start < 250) {
if (i >= tiles.length) {
Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex)); Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex));
TaskManager.tasks.remove(currentIndex); TaskManager.tasks.remove(currentIndex);
PlotSquared PlotSquared
@ -231,29 +245,8 @@ import static com.github.intellectualsites.plotsquared.plot.util.ReflectionUtils
chunk.unload(true, true); chunk.unload(true, true);
return; return;
} }
BlockState[] tiles = chunk.getTileEntities(); tiles[i].getBlock().setType(Material.AIR, false);
if (tiles.length == 0) { i++;
Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex));
TaskManager.tasks.remove(currentIndex);
PlotSquared
.debug(C.PREFIX.s() + "&aSuccessfully processed and unloaded chunk!");
chunk.unload(true, true);
return;
}
long start = System.currentTimeMillis();
int i = 0;
while (System.currentTimeMillis() - start < 250) {
if (i >= tiles.length) {
Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex));
TaskManager.tasks.remove(currentIndex);
PlotSquared
.debug(C.PREFIX.s() + "&aSuccessfully processed and unloaded chunk!");
chunk.unload(true, true);
return;
}
tiles[i].getBlock().setType(Material.AIR, false);
i++;
}
} }
}, 5); }, 5);
TaskManager.tasks.put(currentIndex, task); TaskManager.tasks.put(currentIndex, task);

View File

@ -129,7 +129,7 @@ import java.util.List;
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void vehicleMove(VehicleMoveEvent event) throws IllegalAccessException { public void vehicleMove(VehicleMoveEvent event) {
test(event.getVehicle()); test(event.getVehicle());
} }

View File

@ -590,13 +590,11 @@ import java.util.regex.Pattern;
// Delayed // Delayed
// Async // Async
TaskManager.runTaskLaterAsync(new Runnable() { TaskManager.runTaskLaterAsync(() -> {
@Override public void run() { if (!player.hasPlayedBefore() && player.isOnline()) {
if (!player.hasPlayedBefore() && player.isOnline()) { player.saveData();
player.saveData();
}
EventUtil.manager.doJoinTask(pp);
} }
EventUtil.manager.doJoinTask(pp);
}, 20); }, 20);
} }
@ -2194,7 +2192,7 @@ import java.util.regex.Pattern;
MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, C.PERMISSION_ADMIN_BUILD_UNOWNED); MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, C.PERMISSION_ADMIN_BUILD_UNOWNED);
event.setCancelled(true); event.setCancelled(true);
} else if (!plot.isAdded(pp.getUUID())) { } else if (!plot.isAdded(pp.getUUID())) {
if (Flags.USE.contains(plot, PlotBlock.get(event.getBucket().getId(), 0))) { if (Flags.USE.contains(plot, PlotBlock.get(event.getBucket()))) {
return; return;
} }
if (Permissions.hasPermission(pp, C.PERMISSION_ADMIN_BUILD_OTHER)) { if (Permissions.hasPermission(pp, C.PERMISSION_ADMIN_BUILD_OTHER)) {
@ -2216,9 +2214,7 @@ import java.util.regex.Pattern;
} }
@EventHandler(priority = EventPriority.MONITOR) public void onLeave(PlayerQuitEvent event) { @EventHandler(priority = EventPriority.MONITOR) public void onLeave(PlayerQuitEvent event) {
if (TaskManager.TELEPORT_QUEUE.contains(event.getPlayer().getName())) { TaskManager.TELEPORT_QUEUE.remove(event.getPlayer().getName());
TaskManager.TELEPORT_QUEUE.remove(event.getPlayer().getName());
}
PlotPlayer pp = BukkitUtil.getPlayer(event.getPlayer()); PlotPlayer pp = BukkitUtil.getPlayer(event.getPlayer());
pp.unregister(); pp.unregister();
} }
@ -2507,7 +2503,7 @@ import java.util.regex.Pattern;
@SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.HIGHEST) @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.HIGHEST)
public void onEntityCombustByEntity(EntityCombustByEntityEvent event) { public void onEntityCombustByEntity(EntityCombustByEntityEvent event) {
EntityDamageByEntityEvent eventChange = null; EntityDamageByEntityEvent eventChange;
eventChange = new EntityDamageByEntityEvent(event.getCombuster(), event.getEntity(), eventChange = new EntityDamageByEntityEvent(event.getCombuster(), event.getEntity(),
EntityDamageEvent.DamageCause.FIRE_TICK, (double) event.getDuration()); EntityDamageEvent.DamageCause.FIRE_TICK, (double) event.getDuration());
onEntityDamageByEntityEvent(eventChange); onEntityDamageByEntityEvent(eventChange);

View File

@ -36,45 +36,43 @@ import java.util.UUID;
private static final HashMap<UUID, Interval> healRunnable = new HashMap<>(); private static final HashMap<UUID, Interval> healRunnable = new HashMap<>();
public static void startRunnable(JavaPlugin plugin) { public static void startRunnable(JavaPlugin plugin) {
plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, () -> {
@Override public void run() { if (!healRunnable.isEmpty()) {
if (!healRunnable.isEmpty()) { for (Iterator<Entry<UUID, Interval>> iterator =
for (Iterator<Entry<UUID, Interval>> iterator = healRunnable.entrySet().iterator(); iterator.hasNext(); ) {
healRunnable.entrySet().iterator(); iterator.hasNext(); ) { Entry<UUID, Interval> entry = iterator.next();
Entry<UUID, Interval> entry = iterator.next(); Interval value = entry.getValue();
Interval value = entry.getValue(); ++value.count;
++value.count; if (value.count == value.interval) {
if (value.count == value.interval) { value.count = 0;
value.count = 0; Player player = Bukkit.getPlayer(entry.getKey());
Player player = Bukkit.getPlayer(entry.getKey()); if (player == null) {
if (player == null) { iterator.remove();
iterator.remove(); continue;
continue; }
} double level = player.getHealth();
double level = player.getHealth(); if (level != value.max) {
if (level != value.max) { player.setHealth(Math.min(level + value.amount, value.max));
player.setHealth(Math.min(level + value.amount, value.max));
}
} }
} }
} }
if (!feedRunnable.isEmpty()) { }
for (Iterator<Entry<UUID, Interval>> iterator = if (!feedRunnable.isEmpty()) {
feedRunnable.entrySet().iterator(); iterator.hasNext(); ) { for (Iterator<Entry<UUID, Interval>> iterator =
Entry<UUID, Interval> entry = iterator.next(); feedRunnable.entrySet().iterator(); iterator.hasNext(); ) {
Interval value = entry.getValue(); Entry<UUID, Interval> entry = iterator.next();
++value.count; Interval value = entry.getValue();
if (value.count == value.interval) { ++value.count;
value.count = 0; if (value.count == value.interval) {
Player player = Bukkit.getPlayer(entry.getKey()); value.count = 0;
if (player == null) { Player player = Bukkit.getPlayer(entry.getKey());
iterator.remove(); if (player == null) {
continue; iterator.remove();
} continue;
int level = player.getFoodLevel(); }
if (level != value.max) { int level = player.getFoodLevel();
player.setFoodLevel(Math.min(level + value.amount, value.max)); if (level != value.max) {
} player.setFoodLevel(Math.min(level + value.amount, value.max));
} }
} }
} }

View File

@ -33,8 +33,8 @@ import static com.github.intellectualsites.plotsquared.plot.util.ReflectionUtils
this.done = classChunk.getField("done").getRealField(); this.done = classChunk.getField("done").getRealField();
this.lit = classChunk.getField("lit").getRealField(); this.lit = classChunk.getField("lit").getRealField();
this.s = classChunk.getField("s").getRealField(); this.s = classChunk.getField("s").getRealField();
} catch (Throwable ignore) { } catch (Throwable e) {
ignore.printStackTrace(); e.printStackTrace();
} }
Bukkit.getPluginManager().registerEvents(this, plugin); Bukkit.getPluginManager().registerEvents(this, plugin);
} }

View File

@ -10,7 +10,7 @@ public class BukkitLazyBlock extends LazyBlock {
private StringPlotBlock pb; private StringPlotBlock pb;
public BukkitLazyBlock(Block block) { public BukkitLazyBlock(Block block) {
this.pb = (StringPlotBlock) PlotBlock.get(block.getType().toString()); this.pb = PlotBlock.get(block.getType().toString());
} }
public BukkitLazyBlock(StringPlotBlock pb) { public BukkitLazyBlock(StringPlotBlock pb) {

View File

@ -76,7 +76,7 @@ public class BukkitPlayer extends PlotPlayer {
private void callEvent(final Event event) { private void callEvent(final Event event) {
RegisteredListener[] listeners = event.getHandlers().getRegisteredListeners(); RegisteredListener[] listeners = event.getHandlers().getRegisteredListeners();
for (RegisteredListener listener : listeners) { for (RegisteredListener listener : listeners) {
if (listener.getPlugin().getName().equals(PlotSquared.imp().getPluginName())) { if (listener.getPlugin().getName().equals(PlotSquared.get().IMP.getPluginName())) {
continue; continue;
} }
try { try {
@ -143,7 +143,7 @@ public class BukkitPlayer extends PlotPlayer {
} }
@Override public void sendMessage(String message) { @Override public void sendMessage(String message) {
if (!StringMan.isEqual(this.<String>getMeta("lastMessage"), message) || ( if (!StringMan.isEqual(this.getMeta("lastMessage"), message) || (
System.currentTimeMillis() - this.<Long>getMeta("lastMessageTime") > 5000)) { System.currentTimeMillis() - this.<Long>getMeta("lastMessageTime") > 5000)) {
setMeta("lastMessage", message); setMeta("lastMessage", message);
setMeta("lastMessageTime", System.currentTimeMillis()); setMeta("lastMessageTime", System.currentTimeMillis());

View File

@ -38,7 +38,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
if (depth == 0) { if (depth == 0) {
return; return;
} }
Entity passenger = entity.getPassenger(); Entity passenger = entity.getPassengers().get(0);
if (passenger != null) { if (passenger != null) {
this.base.passenger = new ReplicatingEntityWrapper(passenger, depth); this.base.passenger = new ReplicatingEntityWrapper(passenger, depth);
} }

View File

@ -101,9 +101,7 @@ public class BukkitChunkManager extends ChunkManager {
Set<ChunkLoc> chunks = super.getChunkChunks(world); Set<ChunkLoc> chunks = super.getChunkChunks(world);
for (Chunk chunk : Bukkit.getWorld(world).getLoadedChunks()) { for (Chunk chunk : Bukkit.getWorld(world).getLoadedChunks()) {
ChunkLoc loc = new ChunkLoc(chunk.getX() >> 5, chunk.getZ() >> 5); ChunkLoc loc = new ChunkLoc(chunk.getX() >> 5, chunk.getZ() >> 5);
if (!chunks.contains(loc)) { chunks.add(loc);
chunks.add(loc);
}
} }
return chunks; return chunks;
} }
@ -115,10 +113,6 @@ public class BukkitChunkManager extends ChunkManager {
final Runnable whenDone) { final Runnable whenDone) {
final int relX = newPos.getX() - pos1.getX(); final int relX = newPos.getX() - pos1.getX();
final int relZ = newPos.getZ() - pos1.getZ(); final int relZ = newPos.getZ() - pos1.getZ();
com.github.intellectualsites.plotsquared.plot.object.Location pos4 =
new com.github.intellectualsites.plotsquared.plot.object.Location(newPos.getWorld(),
newPos.getX() + relX, 256, newPos.getZ() + relZ);
final RegionWrapper region = final RegionWrapper region =
new RegionWrapper(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ()); new RegionWrapper(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ());
final World oldWorld = Bukkit.getWorld(pos1.getWorld()); final World oldWorld = Bukkit.getWorld(pos1.getWorld());

View File

@ -85,7 +85,6 @@ public class BukkitInventoryUtil extends InventoryUtil {
} }
// int id = item.getTypeId(); // int id = item.getTypeId();
Material id = item.getType(); Material id = item.getType();
short data = item.getDurability();
int amount = item.getAmount(); int amount = item.getAmount();
String name = null; String name = null;
String[] lore = null; String[] lore = null;

View File

@ -208,8 +208,6 @@ public class BukkitSetupUtils extends SetupUtils {
return world; return world;
} }
} }
World bw =
Bukkit.createWorld(new WorldCreator(object.world).environment(Environment.NORMAL));
} }
return object.world; return object.world;
} }

View File

@ -215,7 +215,7 @@ import java.util.*;
public static List<Entity> getEntities(@NonNull final String worldName) { public static List<Entity> getEntities(@NonNull final String worldName) {
World world = getWorld(worldName); World world = getWorld(worldName);
return world != null ? world.getEntities() : new ArrayList<Entity>(); return world != null ? world.getEntities() : new ArrayList<>();
} }
public static Location getLocation(@NonNull final Entity entity) { public static Location getLocation(@NonNull final Entity entity) {
@ -233,7 +233,7 @@ import java.util.*;
} }
public static BukkitLegacyMappings getBukkitLegacyMappings() { public static BukkitLegacyMappings getBukkitLegacyMappings() {
return (BukkitLegacyMappings) PlotSquared.imp().getLegacyMappings(); return (BukkitLegacyMappings) PlotSquared.get().IMP.getLegacyMappings();
} }
public static Material getMaterial(@NonNull final PlotBlock plotBlock) { public static Material getMaterial(@NonNull final PlotBlock plotBlock) {

View File

@ -117,7 +117,7 @@ public class NbtFactory {
* *
* @return The NBT list. * @return The NBT list.
*/ */
public static NbtList createList(Iterable<? extends Object> iterable) { public static NbtList createList(Iterable<?> iterable) {
NbtList list = get().new NbtList(INSTANCE.createNbtTag(NbtType.TAG_LIST, null)); NbtList list = get().new NbtList(INSTANCE.createNbtTag(NbtType.TAG_LIST, null));
// Add the content as well // Add the content as well
@ -951,8 +951,7 @@ public class NbtFactory {
@Override public Entry<String, Object> next() { @Override public Entry<String, Object> next() {
Entry<String, Object> entry = proxy.next(); Entry<String, Object> entry = proxy.next();
return new SimpleEntry<String, Object>(entry.getKey(), return new SimpleEntry<>(entry.getKey(), wrapOutgoing(entry.getValue()));
wrapOutgoing(entry.getValue()));
} }
@Override public void remove() { @Override public void remove() {

View File

@ -65,11 +65,7 @@ public class SendChunk {
int view = Bukkit.getServer().getViewDistance(); int view = Bukkit.getServer().getViewDistance();
for (Chunk chunk : chunks) { for (Chunk chunk : chunks) {
String world = chunk.getWorld().getName(); String world = chunk.getWorld().getName();
ArrayList<Chunk> list = map.get(world); ArrayList<Chunk> list = map.computeIfAbsent(world, k -> new ArrayList<>());
if (list == null) {
list = new ArrayList<>();
map.put(world, list);
}
list.add(chunk); list.add(chunk);
Object c = this.methodGetHandleChunk.of(chunk).call(); Object c = this.methodGetHandleChunk.of(chunk).call();
this.methodInitLighting.of(c).call(); this.methodInitLighting.of(c).call();
@ -118,20 +114,17 @@ public class SendChunk {
} }
} }
for (final Chunk chunk : chunks) { for (final Chunk chunk : chunks) {
TaskManager.runTask(new Runnable() { TaskManager.runTask(() -> {
@Override public void run() { try {
try { chunk.unload(true, false);
chunk.unload(true, false); } catch (Throwable ignored) {
} catch (Throwable ignored) { String worldName = chunk.getWorld().getName();
String worldName = chunk.getWorld().getName(); PlotSquared.debug(
PlotSquared.debug( "$4Could not save chunk: " + worldName + ';' + chunk.getX() + ";" + chunk
"$4Could not save chunk: " + worldName + ';' + chunk.getX() + ";" .getZ());
+ chunk.getZ()); PlotSquared.debug("$3 - $4File may be open in another process (e.g. MCEdit)");
PlotSquared PlotSquared.debug("$3 - $4" + worldName + "/level.dat or " + worldName
.debug("$3 - $4File may be open in another process (e.g. MCEdit)"); + "/level_old.dat may be corrupt (try repairing or removing these)");
PlotSquared.debug("$3 - $4" + worldName + "/level.dat or " + worldName
+ "/level_old.dat may be corrupt (try repairing or removing these)");
}
} }
}); });
} }

View File

@ -5,12 +5,10 @@ import com.github.intellectualsites.plotsquared.plot.PlotSquared;
import com.github.intellectualsites.plotsquared.plot.generator.GeneratorWrapper; import com.github.intellectualsites.plotsquared.plot.generator.GeneratorWrapper;
import com.github.intellectualsites.plotsquared.plot.util.SetupUtils; import com.github.intellectualsites.plotsquared.plot.util.SetupUtils;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
public class SetGenCB { public class SetGenCB {
@ -45,12 +43,8 @@ public class SetGenCB {
} }
} }
if (!set) { if (!set) {
Iterator<BlockPopulator> iterator = world.getPopulators().iterator(); world.getPopulators()
while (iterator.hasNext()) { .removeIf(blockPopulator -> blockPopulator instanceof BukkitAugmentedGenerator);
if (iterator.next() instanceof BukkitAugmentedGenerator) {
iterator.remove();
}
}
} }
PlotSquared.get() PlotSquared.get()
.loadWorld(world.getName(), PlotSquared.get().IMP.getGenerator(world.getName(), null)); .loadWorld(world.getName(), PlotSquared.get().IMP.getGenerator(world.getName(), null));

View File

@ -189,11 +189,11 @@ public class BukkitLocalQueue<T> extends BasicLocalBlockQueue<T> {
for (int x = 0; x < lc.biomes.length; x++) { for (int x = 0; x < lc.biomes.length; x++) {
String[] biomes2 = lc.biomes[x]; String[] biomes2 = lc.biomes[x];
if (biomes2 != null) { if (biomes2 != null) {
for (int y = 0; y < biomes2.length; y++) { for (String biomeStr : biomes2) {
String biomeStr = biomes2[y];
if (biomeStr != null) { if (biomeStr != null) {
if (last == null || !StringMan.isEqual(last, biomeStr)) { if (last == null || !StringMan.isEqual(last, biomeStr)) {
biome = Biome.valueOf(biomeStr.toUpperCase()); biome = Biome.valueOf(biomeStr.toUpperCase());
last = biomeStr;
} }
worldObj.setBiome(bx, bz, biome); worldObj.setBiome(bx, bz, biome);
} }
@ -244,8 +244,8 @@ public class BukkitLocalQueue<T> extends BasicLocalBlockQueue<T> {
if (disableResult != null) { if (disableResult != null) {
try { try {
fieldNeighbors.set(disableResult[0], disableResult[1]); fieldNeighbors.set(disableResult[0], disableResult[1]);
} catch (Throwable ignore) { } catch (Throwable e) {
ignore.printStackTrace(); e.printStackTrace();
} }
} }
} }

View File

@ -47,204 +47,196 @@ public class FileUUIDHandler extends UUIDHandlerImplementation {
} else { } else {
world = worlds.get(0).getName(); world = worlds.get(0).getName();
} }
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { PlotSquared.debug(C.PREFIX + "&6Starting player data caching for: " + world);
PlotSquared.debug(C.PREFIX + "&6Starting player data caching for: " + world); File uuidFile = new File(PlotSquared.get().IMP.getDirectory(), "uuids.txt");
File uuidFile = new File(PlotSquared.get().IMP.getDirectory(), "uuids.txt"); if (uuidFile.exists()) {
if (uuidFile.exists()) { try {
try { List<String> lines =
List<String> lines = Files.readAllLines(uuidFile.toPath(), StandardCharsets.UTF_8);
Files.readAllLines(uuidFile.toPath(), StandardCharsets.UTF_8); for (String line : lines) {
for (String line : lines) { try {
try { line = line.trim();
line = line.trim(); if (line.isEmpty()) {
if (line.isEmpty()) { continue;
continue;
}
line = line.replaceAll("[\\|][0-9]+[\\|][0-9]+[\\|]", "");
String[] split = line.split("\\|");
String name = split[0];
if (name.isEmpty() || (name.length() > 16) || !StringMan
.isAlphanumericUnd(name)) {
continue;
}
UUID uuid = FileUUIDHandler.this.uuidWrapper.getUUID(name);
if (uuid == null) {
continue;
}
UUIDHandler.add(new StringWrapper(name), uuid);
} catch (Exception e2) {
e2.printStackTrace();
} }
line = line.replaceAll("[\\|][0-9]+[\\|][0-9]+[\\|]", "");
String[] split = line.split("\\|");
String name = split[0];
if (name.isEmpty() || (name.length() > 16) || !StringMan
.isAlphanumericUnd(name)) {
continue;
}
UUID uuid = FileUUIDHandler.this.uuidWrapper.getUUID(name);
if (uuid == null) {
continue;
}
UUIDHandler.add(new StringWrapper(name), uuid);
} catch (Exception e2) {
e2.printStackTrace();
} }
} catch (IOException e) {
e.printStackTrace();
} }
} catch (IOException e) {
e.printStackTrace();
} }
HashBiMap<StringWrapper, UUID> toAdd = }
HashBiMap.create(new HashMap<StringWrapper, UUID>()); HashBiMap<StringWrapper, UUID> toAdd = HashBiMap.create(new HashMap<>());
if (Settings.UUID.NATIVE_UUID_PROVIDER) { if (Settings.UUID.NATIVE_UUID_PROVIDER) {
HashSet<UUID> all = UUIDHandler.getAllUUIDS(); HashSet<UUID> all = UUIDHandler.getAllUUIDS();
PlotSquared.debug("&aFast mode UUID caching enabled!"); PlotSquared.debug("&aFast mode UUID caching enabled!");
File playerDataFolder = File playerDataFolder = new File(container, world + File.separator + "playerdata");
new File(container, world + File.separator + "playerdata"); String[] dat = playerDataFolder.list(new DatFileFilter());
String[] dat = playerDataFolder.list(new DatFileFilter()); boolean check = all.isEmpty();
boolean check = all.isEmpty(); if (dat != null) {
if (dat != null) { for (String current : dat) {
for (String current : dat) { String s = current.replaceAll(".dat$", "");
String s = current.replaceAll(".dat$", ""); try {
try { UUID uuid = UUID.fromString(s);
UUID uuid = UUID.fromString(s); if (check || all.remove(uuid)) {
if (check || all.remove(uuid)) { File file = new File(playerDataFolder, current);
File file = new File(playerDataFolder, current); NbtFactory.NbtCompound compound = NbtFactory
NbtFactory.NbtCompound compound = NbtFactory .fromStream(new FileInputStream(file),
.fromStream(new FileInputStream(file), NbtFactory.StreamOptions.GZIP_COMPRESSION);
NbtFactory.StreamOptions.GZIP_COMPRESSION); if (!compound.containsKey("bukkit")) {
if (!compound.containsKey("bukkit")) { PlotSquared.debug("ERROR: Player data (" + uuid.toString()
PlotSquared.debug("ERROR: Player data (" + uuid.toString() + ".dat) does not contain the the key \"bukkit\"");
+ ".dat) does not contain the the key \"bukkit\""); } else {
} else { NbtFactory.NbtCompound bukkit =
NbtFactory.NbtCompound bukkit = (NbtFactory.NbtCompound) compound.get("bukkit");
(NbtFactory.NbtCompound) compound.get("bukkit"); String name = (String) bukkit.get("lastKnownName");
String name = (String) bukkit.get("lastKnownName"); long last = (long) bukkit.get("lastPlayed");
long last = (long) bukkit.get("lastPlayed"); long first = (long) bukkit.get("firstPlayed");
long first = (long) bukkit.get("firstPlayed"); if (ExpireManager.IMP != null) {
if (ExpireManager.IMP != null) { ExpireManager.IMP.storeDate(uuid, last);
ExpireManager.IMP.storeDate(uuid, last); ExpireManager.IMP.storeAccountAge(uuid, last - first);
ExpireManager.IMP.storeAccountAge(uuid, last - first);
}
toAdd.put(new StringWrapper(name), uuid);
} }
} toAdd.put(new StringWrapper(name), uuid);
} catch (Exception e) {
e.printStackTrace();
PlotSquared.debug(C.PREFIX + "Invalid playerdata: " + current);
}
}
}
add(toAdd);
if (all.isEmpty()) {
if (whenDone != null) {
whenDone.run();
}
return;
} else {
PlotSquared.debug("Failed to cache: " + all.size()
+ " uuids - slowly processing all files");
}
}
HashSet<String> worlds = Sets.newHashSet(world, "world");
HashSet<UUID> uuids = new HashSet<>();
HashSet<String> names = new HashSet<>();
File playerDataFolder = null;
for (String worldName : worlds) {
// Getting UUIDs
playerDataFolder =
new File(container, worldName + File.separator + "playerdata");
String[] dat = playerDataFolder.list(new DatFileFilter());
if ((dat != null) && (dat.length != 0)) {
for (String current : dat) {
String s = current.replaceAll(".dat$", "");
try {
UUID uuid = UUID.fromString(s);
uuids.add(uuid);
} catch (Exception ignored) {
PlotSquared.debug(C.PREFIX + "Invalid PlayerData: " + current);
}
}
break;
}
// Getting names
File playersFolder = new File(worldName + File.separator + "players");
dat = playersFolder.list(new DatFileFilter());
if ((dat != null) && (dat.length != 0)) {
for (String current : dat) {
names.add(current.replaceAll(".dat$", ""));
}
break;
}
}
for (UUID uuid : uuids) {
try {
File file =
new File(playerDataFolder + File.separator + uuid.toString() + ".dat");
if (!file.exists()) {
continue;
}
NbtFactory.NbtCompound compound = NbtFactory
.fromStream(new FileInputStream(file),
NbtFactory.StreamOptions.GZIP_COMPRESSION);
if (!compound.containsKey("bukkit")) {
PlotSquared.debug("ERROR: Player data (" + uuid.toString()
+ ".dat) does not contain the the key \"bukkit\"");
} else {
NbtFactory.NbtCompound bukkit =
(NbtFactory.NbtCompound) compound.get("bukkit");
String name = (String) bukkit.get("lastKnownName");
StringWrapper wrap = new StringWrapper(name);
if (!toAdd.containsKey(wrap)) {
long last = (long) bukkit.get("lastPlayed");
long first = (long) bukkit.get("firstPlayed");
if (Settings.UUID.OFFLINE) {
if (Settings.UUID.FORCE_LOWERCASE && !name.toLowerCase()
.equals(name)) {
uuid = FileUUIDHandler.this.uuidWrapper.getUUID(name);
} else {
long most = (long) compound.get("UUIDMost");
long least = (long) compound.get("UUIDLeast");
uuid = new UUID(most, least);
}
}
if (ExpireManager.IMP != null) {
ExpireManager.IMP.storeDate(uuid, last);
ExpireManager.IMP.storeAccountAge(uuid, last - first);
}
toAdd.put(wrap, uuid);
}
}
} catch (Exception ignored) {
PlotSquared
.debug(C.PREFIX + "&6Invalid PlayerData: " + uuid.toString() + ".dat");
}
}
for (String name : names) {
UUID uuid = FileUUIDHandler.this.uuidWrapper.getUUID(name);
StringWrapper nameWrap = new StringWrapper(name);
toAdd.put(nameWrap, uuid);
}
if (getUUIDMap().isEmpty()) {
for (OfflinePlotPlayer op : FileUUIDHandler.this.uuidWrapper
.getOfflinePlayers()) {
long last = op.getLastPlayed();
if (last != 0) {
String name = op.getName();
StringWrapper wrap = new StringWrapper(name);
if (!toAdd.containsKey(wrap)) {
UUID uuid = FileUUIDHandler.this.uuidWrapper.getUUID(op);
toAdd.put(wrap, uuid);
if (ExpireManager.IMP != null) {
ExpireManager.IMP.storeDate(uuid, last);
} }
} }
} catch (Exception e) {
e.printStackTrace();
PlotSquared.debug(C.PREFIX + "Invalid playerdata: " + current);
} }
} }
} }
add(toAdd); add(toAdd);
if (whenDone != null) { if (all.isEmpty()) {
whenDone.run(); if (whenDone != null) {
whenDone.run();
}
return;
} else {
PlotSquared.debug(
"Failed to cache: " + all.size() + " uuids - slowly processing all files");
} }
} }
HashSet<String> worlds1 = Sets.newHashSet(world, "world");
HashSet<UUID> uuids = new HashSet<>();
HashSet<String> names = new HashSet<>();
File playerDataFolder = null;
for (String worldName : worlds1) {
// Getting UUIDs
playerDataFolder = new File(container, worldName + File.separator + "playerdata");
String[] dat = playerDataFolder.list(new DatFileFilter());
if ((dat != null) && (dat.length != 0)) {
for (String current : dat) {
String s = current.replaceAll(".dat$", "");
try {
UUID uuid = UUID.fromString(s);
uuids.add(uuid);
} catch (Exception ignored) {
PlotSquared.debug(C.PREFIX + "Invalid PlayerData: " + current);
}
}
break;
}
// Getting names
File playersFolder = new File(worldName + File.separator + "players");
dat = playersFolder.list(new DatFileFilter());
if ((dat != null) && (dat.length != 0)) {
for (String current : dat) {
names.add(current.replaceAll(".dat$", ""));
}
break;
}
}
for (UUID uuid : uuids) {
try {
File file =
new File(playerDataFolder + File.separator + uuid.toString() + ".dat");
if (!file.exists()) {
continue;
}
NbtFactory.NbtCompound compound = NbtFactory
.fromStream(new FileInputStream(file),
NbtFactory.StreamOptions.GZIP_COMPRESSION);
if (!compound.containsKey("bukkit")) {
PlotSquared.debug("ERROR: Player data (" + uuid.toString()
+ ".dat) does not contain the the key \"bukkit\"");
} else {
NbtFactory.NbtCompound bukkit =
(NbtFactory.NbtCompound) compound.get("bukkit");
String name = (String) bukkit.get("lastKnownName");
StringWrapper wrap = new StringWrapper(name);
if (!toAdd.containsKey(wrap)) {
long last = (long) bukkit.get("lastPlayed");
long first = (long) bukkit.get("firstPlayed");
if (Settings.UUID.OFFLINE) {
if (Settings.UUID.FORCE_LOWERCASE && !name.toLowerCase()
.equals(name)) {
uuid = FileUUIDHandler.this.uuidWrapper.getUUID(name);
} else {
long most = (long) compound.get("UUIDMost");
long least = (long) compound.get("UUIDLeast");
uuid = new UUID(most, least);
}
}
if (ExpireManager.IMP != null) {
ExpireManager.IMP.storeDate(uuid, last);
ExpireManager.IMP.storeAccountAge(uuid, last - first);
}
toAdd.put(wrap, uuid);
}
}
} catch (Exception ignored) {
PlotSquared
.debug(C.PREFIX + "&6Invalid PlayerData: " + uuid.toString() + ".dat");
}
}
for (String name : names) {
UUID uuid = FileUUIDHandler.this.uuidWrapper.getUUID(name);
StringWrapper nameWrap = new StringWrapper(name);
toAdd.put(nameWrap, uuid);
}
if (getUUIDMap().isEmpty()) {
for (OfflinePlotPlayer op : FileUUIDHandler.this.uuidWrapper.getOfflinePlayers()) {
long last = op.getLastPlayed();
if (last != 0) {
String name = op.getName();
StringWrapper wrap = new StringWrapper(name);
if (!toAdd.containsKey(wrap)) {
UUID uuid = FileUUIDHandler.this.uuidWrapper.getUUID(op);
toAdd.put(wrap, uuid);
if (ExpireManager.IMP != null) {
ExpireManager.IMP.storeDate(uuid, last);
}
}
}
}
}
add(toAdd);
if (whenDone != null) {
whenDone.run();
}
}); });
return true; return true;
} }
@Override public void fetchUUID(final String name, final RunnableVal<UUID> ifFetch) { @Override public void fetchUUID(final String name, final RunnableVal<UUID> ifFetch) {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { ifFetch.value = FileUUIDHandler.this.uuidWrapper.getUUID(name);
ifFetch.value = FileUUIDHandler.this.uuidWrapper.getUUID(name); TaskManager.runTask(ifFetch);
TaskManager.runTask(ifFetch);
}
}); });
} }
} }

View File

@ -34,7 +34,6 @@ import java.util.UUID;
public class SQLUUIDHandler extends UUIDHandlerImplementation { public class SQLUUIDHandler extends UUIDHandlerImplementation {
final int MAX_REQUESTS = 500;
private final String PROFILE_URL = private final String PROFILE_URL =
"https://sessionserver.mojang.com/session/minecraft/profile/"; "https://sessionserver.mojang.com/session/minecraft/profile/";
private final int INTERVAL = 12000; private final int INTERVAL = 12000;
@ -71,96 +70,81 @@ public class SQLUUIDHandler extends UUIDHandlerImplementation {
if (!super.startCaching(whenDone)) { if (!super.startCaching(whenDone)) {
return false; return false;
} }
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { try {
try { HashBiMap<StringWrapper, UUID> toAdd = HashBiMap.create(new HashMap<>());
HashBiMap<StringWrapper, UUID> toAdd = try (PreparedStatement statement = getConnection()
HashBiMap.create(new HashMap<StringWrapper, UUID>()); .prepareStatement("SELECT `uuid`, `username` FROM `usercache`");
try (PreparedStatement statement = getConnection() ResultSet resultSet = statement.executeQuery()) {
.prepareStatement("SELECT `uuid`, `username` FROM `usercache`"); while (resultSet.next()) {
ResultSet resultSet = statement.executeQuery()) { StringWrapper username = new StringWrapper(resultSet.getString("username"));
while (resultSet.next()) { UUID uuid = UUID.fromString(resultSet.getString("uuid"));
StringWrapper username = toAdd.put(new StringWrapper(username.value), uuid);
new StringWrapper(resultSet.getString("username"));
UUID uuid = UUID.fromString(resultSet.getString("uuid"));
toAdd.put(new StringWrapper(username.value), uuid);
}
} }
add(toAdd); }
// This should be called as long as there are some unknown plots add(toAdd);
final ArrayDeque<UUID> toFetch = new ArrayDeque<>(); // This should be called as long as there are some unknown plots
for (UUID u : UUIDHandler.getAllUUIDS()) { final ArrayDeque<UUID> toFetch = new ArrayDeque<>();
if (!uuidExists(u)) { for (UUID u : UUIDHandler.getAllUUIDS()) {
toFetch.add(u); if (!uuidExists(u)) {
} toFetch.add(u);
} }
if (toFetch.isEmpty()) { }
if (toFetch.isEmpty()) {
if (whenDone != null) {
whenDone.run();
}
return;
}
FileUUIDHandler fileHandler = new FileUUIDHandler(SQLUUIDHandler.this.uuidWrapper);
fileHandler.startCaching(() -> {
// If the file based UUID handler didn't cache it, then we can't cache offline mode
// Also, trying to cache based on files again, is useless as that's what the file based uuid cacher does
if (Settings.UUID.OFFLINE) {
if (whenDone != null) { if (whenDone != null) {
whenDone.run(); whenDone.run();
} }
return; return;
} }
FileUUIDHandler fileHandler =
new FileUUIDHandler(SQLUUIDHandler.this.uuidWrapper);
fileHandler.startCaching(new Runnable() {
@Override public void run() {
// If the file based UUID handler didn't cache it, then we can't cache offline mode
// Also, trying to cache based on files again, is useless as that's what the file based uuid cacher does
if (Settings.UUID.OFFLINE) {
if (whenDone != null) {
whenDone.run();
}
return;
}
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { while (!toFetch.isEmpty()) {
while (!toFetch.isEmpty()) { try {
try { for (int i = 0; i < Math.min(500, toFetch.size()); i++) {
for (int i = 0; UUID uuid = toFetch.pop();
i < Math.min(500, toFetch.size()); i++) { HttpURLConnection connection = (HttpURLConnection) new URL(
UUID uuid = toFetch.pop(); SQLUUIDHandler.this.PROFILE_URL + uuid.toString()
HttpURLConnection connection = .replace("-", "")).openConnection();
(HttpURLConnection) new URL( try (InputStream con = connection.getInputStream()) {
SQLUUIDHandler.this.PROFILE_URL + uuid InputStreamReader reader = new InputStreamReader(con);
.toString().replace("-", "")) JSONObject response =
.openConnection(); (JSONObject) SQLUUIDHandler.this.jsonParser
try (InputStream con = connection .parse(reader);
.getInputStream()) { String name = (String) response.get("name");
InputStreamReader reader = if (name != null) {
new InputStreamReader(con); add(new StringWrapper(name), uuid);
JSONObject response =
(JSONObject) SQLUUIDHandler.this.jsonParser
.parse(reader);
String name = (String) response.get("name");
if (name != null) {
add(new StringWrapper(name), uuid);
}
}
connection.disconnect();
}
} catch (IOException | ParseException e) {
PlotSquared.debug(
"Invalid response from Mojang: Some UUIDs will be cached later. (`unknown` until then or player joins)");
}
try {
Thread.sleep(INTERVAL * 50);
} catch (InterruptedException e) {
e.printStackTrace();
break;
} }
} }
if (whenDone != null) { connection.disconnect();
whenDone.run();
}
return;
} }
}); } catch (IOException | ParseException e) {
PlotSquared.debug(
"Invalid response from Mojang: Some UUIDs will be cached later. (`unknown` until then or player joins)");
}
try {
Thread.sleep(INTERVAL * 50);
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
}
if (whenDone != null) {
whenDone.run();
} }
}); });
} catch (SQLException e) { });
throw new SQLUUIDHandlerException("Couldn't select :s", e); } catch (SQLException e) {
} throw new SQLUUIDHandlerException("Couldn't select :s", e);
} }
}); });
return true; return true;
@ -172,34 +156,32 @@ public class SQLUUIDHandler extends UUIDHandlerImplementation {
if (ifFetch == null) { if (ifFetch == null) {
return; return;
} }
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { try {
try { URL url = new URL(SQLUUIDHandler.this.PROFILE_URL);
URL url = new URL(SQLUUIDHandler.this.PROFILE_URL); HttpURLConnection connection = (HttpURLConnection) url.openConnection();
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST");
connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Content-Type", "application/json"); connection.setUseCaches(false);
connection.setUseCaches(false); connection.setDoInput(true);
connection.setDoInput(true); connection.setDoOutput(true);
connection.setDoOutput(true); String body = JSONArray.toJSONString(Collections.singletonList(name));
String body = JSONArray.toJSONString(Collections.singletonList(name)); OutputStream stream = connection.getOutputStream();
OutputStream stream = connection.getOutputStream(); stream.write(body.getBytes());
stream.write(body.getBytes()); stream.flush();
stream.flush(); stream.close();
stream.close(); JSONArray array = (JSONArray) SQLUUIDHandler.this.jsonParser
JSONArray array = (JSONArray) SQLUUIDHandler.this.jsonParser .parse(new InputStreamReader(connection.getInputStream()));
.parse(new InputStreamReader(connection.getInputStream())); JSONObject jsonProfile = (JSONObject) array.get(0);
JSONObject jsonProfile = (JSONObject) array.get(0); String id = (String) jsonProfile.get("id");
String id = (String) jsonProfile.get("id"); String name1 = (String) jsonProfile.get("name");
String name = (String) jsonProfile.get("name"); ifFetch.value = UUID.fromString(
ifFetch.value = UUID.fromString( id.substring(0, 8) + '-' + id.substring(8, 12) + '-' + id.substring(12, 16)
id.substring(0, 8) + '-' + id.substring(8, 12) + '-' + id.substring(12, 16) + '-' + id.substring(16, 20) + '-' + id.substring(20, 32));
+ '-' + id.substring(16, 20) + '-' + id.substring(20, 32)); } catch (IOException | ParseException e) {
} catch (IOException | ParseException e) { e.printStackTrace();
e.printStackTrace();
}
TaskManager.runTask(ifFetch);
} }
TaskManager.runTask(ifFetch);
}); });
} }
@ -215,18 +197,15 @@ public class SQLUUIDHandler extends UUIDHandlerImplementation {
@Override public boolean add(final StringWrapper name, final UUID uuid) { @Override public boolean add(final StringWrapper name, final UUID uuid) {
// Ignoring duplicates // Ignoring duplicates
if (super.add(name, uuid)) { if (super.add(name, uuid)) {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { try (PreparedStatement statement = getConnection()
try (PreparedStatement statement = getConnection().prepareStatement( .prepareStatement("REPLACE INTO usercache (`uuid`, `username`) VALUES(?, ?)")) {
"REPLACE INTO usercache (`uuid`, `username`) VALUES(?, ?)")) { statement.setString(1, uuid.toString());
statement.setString(1, uuid.toString()); statement.setString(2, name.toString());
statement.setString(2, name.toString()); statement.execute();
statement.execute(); PlotSquared.debug(C.PREFIX + "&cAdded '&6" + uuid + "&c' - '&6" + name + "&c'");
PlotSquared } catch (SQLException e) {
.debug(C.PREFIX + "&cAdded '&6" + uuid + "&c' - '&6" + name + "&c'"); e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
} }
}); });
return true; return true;
@ -239,18 +218,16 @@ public class SQLUUIDHandler extends UUIDHandlerImplementation {
*/ */
@Override public void rename(final UUID uuid, final StringWrapper name) { @Override public void rename(final UUID uuid, final StringWrapper name) {
super.rename(uuid, name); super.rename(uuid, name);
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { try (PreparedStatement statement = getConnection()
try (PreparedStatement statement = getConnection() .prepareStatement("UPDATE usercache SET `username`=? WHERE `uuid`=?")) {
.prepareStatement("UPDATE usercache SET `username`=? WHERE `uuid`=?")) { statement.setString(1, name.value);
statement.setString(1, name.value); statement.setString(2, uuid.toString());
statement.setString(2, uuid.toString()); statement.execute();
statement.execute(); PlotSquared
PlotSquared.debug( .debug(C.PREFIX + "Name change for '" + uuid + "' to '" + name.value + '\'');
C.PREFIX + "Name change for '" + uuid + "' to '" + name.value + '\''); } catch (SQLException e) {
} catch (SQLException e) { e.printStackTrace();
e.printStackTrace();
}
} }
}); });
} }

View File

@ -10,7 +10,10 @@ import com.github.intellectualsites.plotsquared.plot.object.PlotMessage;
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer; import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal2; import com.github.intellectualsites.plotsquared.plot.object.RunnableVal2;
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal3; import com.github.intellectualsites.plotsquared.plot.object.RunnableVal3;
import com.github.intellectualsites.plotsquared.plot.util.*; import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
import com.github.intellectualsites.plotsquared.plot.util.Permissions;
import com.github.intellectualsites.plotsquared.plot.util.StringComparison;
import com.github.intellectualsites.plotsquared.plot.util.StringMan;
import java.io.IOException; import java.io.IOException;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
@ -47,7 +50,7 @@ public abstract class Command {
this.perm = perm; this.perm = perm;
this.required = required; this.required = required;
this.category = cat; this.category = cat;
this.aliases = Arrays.asList(id); this.aliases = Collections.singletonList(id);
if (this.parent != null) { if (this.parent != null) {
this.parent.register(this); this.parent.register(this);
} }
@ -114,12 +117,7 @@ public abstract class Command {
public List<Command> getCommands(CommandCategory cat, PlotPlayer player) { public List<Command> getCommands(CommandCategory cat, PlotPlayer player) {
List<Command> commands = getCommands(player); List<Command> commands = getCommands(player);
if (cat != null) { if (cat != null) {
Iterator<Command> iterator = commands.iterator(); commands.removeIf(command -> command.category != cat);
while (iterator.hasNext()) {
if (iterator.next().category != cat) {
iterator.remove();
}
}
} }
return commands; return commands;
} }
@ -249,8 +247,7 @@ public abstract class Command {
} }
if (page == 0 && totalPages != 0) { // Next if (page == 0 && totalPages != 0) { // Next
new PlotMessage().text("<-").color("$3").text(" | ").color("$3").text("->").color("$1") new PlotMessage().text("<-").color("$3").text(" | ").color("$3").text("->").color("$1")
.command(baseCommand + " " + (0 + 2)).text(C.CLICKABLE.s()).color("$2") .command(baseCommand + " " + 2).text(C.CLICKABLE.s()).color("$2").send(player);
.send(player);
return; return;
} }
if (page == totalPages && totalPages != 0) { // Back if (page == totalPages && totalPages != 0) { // Back
@ -276,7 +273,7 @@ public abstract class Command {
} }
return; return;
} }
if (this.allCommands == null || this.allCommands.isEmpty()) { if (this.allCommands.isEmpty()) {
player.sendMessage( player.sendMessage(
"Not Implemented: https://github.com/IntellectualSites/PlotSquared/issues/new"); "Not Implemented: https://github.com/IntellectualSites/PlotSquared/issues/new");
return; return;
@ -289,13 +286,10 @@ public abstract class Command {
} }
// Help command // Help command
try { try {
if (args.length == 0 || MathMan.isInteger(args[0]) // This will default certain syntax to the help command
|| CommandCategory.valueOf(args[0].toUpperCase()) != null) { // e.g. /plot, /plot 1, /plot claiming
// This will default certain syntax to the help command MainCommand.getInstance().help.execute(player, args, null, null);
// e.g. /plot, /plot 1, /plot claiming return;
MainCommand.getInstance().help.execute(player, args, null, null);
return;
}
} catch (IllegalArgumentException ignored) { } catch (IllegalArgumentException ignored) {
} }
// Command recommendation // Command recommendation
@ -341,7 +335,6 @@ public abstract class Command {
boolean failed = args.length < reqArgs.length; boolean failed = args.length < reqArgs.length;
String[] baseSplit = getCommandString().split(" "); String[] baseSplit = getCommandString().split(" ");
String[] fullSplit = getUsage().split(" "); String[] fullSplit = getUsage().split(" ");
String base = getCommandString();
if (fullSplit.length - baseSplit.length < reqArgs.length) { if (fullSplit.length - baseSplit.length < reqArgs.length) {
String[] tmp = new String[baseSplit.length + reqArgs.length]; String[] tmp = new String[baseSplit.length + reqArgs.length];
System.arraycopy(fullSplit, 0, tmp, 0, fullSplit.length); System.arraycopy(fullSplit, 0, tmp, 0, fullSplit.length);
@ -457,7 +450,6 @@ public abstract class Command {
} }
public String getCommandString() { public String getCommandString() {
String base;
if (this.parent == null) { if (this.parent == null) {
return "/" + toString(); return "/" + toString();
} else { } else {
@ -490,7 +482,7 @@ public abstract class Command {
return null; return null;
} }
List<Command> result = new ArrayList<>(); List<Command> result = new ArrayList<>();
int index = input.length - (space ? 0 : 1); int index = input.length;
for (String arg : args) { for (String arg : args) {
arg = arg.replace(getCommandString() + " ", ""); arg = arg.replace(getCommandString() + " ", "");
String[] split = arg.split(" "); String[] split = arg.split(" ");
@ -519,7 +511,7 @@ public abstract class Command {
return null; return null;
} }
} else { } else {
Set<Command> commands = new HashSet<Command>(); Set<Command> commands = new HashSet<>();
for (Map.Entry<String, Command> entry : this.staticCommands.entrySet()) { for (Map.Entry<String, Command> entry : this.staticCommands.entrySet()) {
if (entry.getKey().startsWith(arg) && entry.getValue() if (entry.getKey().startsWith(arg) && entry.getValue()
.canExecute(player, false)) { .canExecute(player, false)) {
@ -566,7 +558,7 @@ public abstract class Command {
} }
} }
public <T extends Object> T check(T object, C message, Object... args) { public <T> T check(T object, C message, Object... args) {
if (object == null) { if (object == null) {
throw new CommandException(message, args); throw new CommandException(message, args);
} }

View File

@ -83,7 +83,7 @@ public class YamlConfiguration extends FileConfiguration {
Map<?, ?> input; Map<?, ?> input;
try { try {
input = (Map<?, ?>) yaml.load(contents); input = yaml.load(contents);
} catch (YAMLException e) { } catch (YAMLException e) {
throw new InvalidConfigurationException(e); throw new InvalidConfigurationException(e);
} catch (ClassCastException ignored) { } catch (ClassCastException ignored) {

File diff suppressed because one or more lines are too long

View File

@ -33,8 +33,8 @@ public class PlotVersion {
public static PlotVersion tryParse(String version) { public static PlotVersion tryParse(String version) {
try { try {
return new PlotVersion(version); return new PlotVersion(version);
} catch (Exception ignore) { } catch (Exception e) {
ignore.printStackTrace(); e.printStackTrace();
return new PlotVersion(0, 0, 0, 0, 0); return new PlotVersion(0, 0, 0, 0, 0);
} }
} }

View File

@ -61,21 +61,19 @@ import java.util.UUID;
checkTrue(!uuids.isEmpty(), null); checkTrue(!uuids.isEmpty(), null);
checkTrue(size <= plot.getArea().MAX_PLOT_MEMBERS || Permissions checkTrue(size <= plot.getArea().MAX_PLOT_MEMBERS || Permissions
.hasPermission(player, C.PERMISSION_ADMIN_COMMAND_TRUST), C.PLOT_MAX_MEMBERS); .hasPermission(player, C.PERMISSION_ADMIN_COMMAND_TRUST), C.PLOT_MAX_MEMBERS);
confirm.run(this, new Runnable() { // Success
@Override // Success confirm.run(this, () -> {
public void run() { for (UUID uuid : uuids) {
for (UUID uuid : uuids) { if (uuid != DBFunc.EVERYONE) {
if (uuid != DBFunc.EVERYONE) { if (!plot.removeTrusted(uuid)) {
if (!plot.removeTrusted(uuid)) { if (plot.getDenied().contains(uuid)) {
if (plot.getDenied().contains(uuid)) { plot.removeDenied(uuid);
plot.removeDenied(uuid);
}
} }
} }
plot.addMember(uuid);
EventUtil.manager.callMember(player, plot, uuid, true);
MainUtil.sendMessage(player, C.MEMBER_ADDED);
} }
plot.addMember(uuid);
EventUtil.manager.callMember(player, plot, uuid, true);
MainUtil.sendMessage(player, C.MEMBER_ADDED);
} }
}, null); }, null);
} }

View File

@ -98,42 +98,40 @@ import java.util.Set;
object.type = area.TYPE; object.type = area.TYPE;
object.min = new PlotId(1, 1); object.min = new PlotId(1, 1);
object.max = new PlotId(numX, numZ); object.max = new PlotId(numX, numZ);
object.plotManager = PlotSquared.imp().getPluginName(); object.plotManager = PlotSquared.get().IMP.getPluginName();
object.setupGenerator = PlotSquared.imp().getPluginName(); object.setupGenerator = PlotSquared.get().IMP.getPluginName();
object.step = area.getSettingNodes(); object.step = area.getSettingNodes();
final String path = final String path =
"worlds." + area.worldname + ".areas." + area.id + '-' "worlds." + area.worldname + ".areas." + area.id + '-'
+ object.min + '-' + object.max; + object.min + '-' + object.max;
Runnable run = new Runnable() { Runnable run = () -> {
@Override public void run() { if (offsetX != 0) {
if (offsetX != 0) { PlotSquared.get().worlds
PlotSquared.get().worlds .set(path + ".road.offset.x", offsetX);
.set(path + ".road.offset.x", offsetX); }
} if (offsetZ != 0) {
if (offsetZ != 0) { PlotSquared.get().worlds
PlotSquared.get().worlds .set(path + ".road.offset.z", offsetZ);
.set(path + ".road.offset.z", offsetZ); }
} final String world = SetupUtils.manager.setupWorld(object);
final String world = SetupUtils.manager.setupWorld(object); if (WorldUtil.IMP.isWorld(world)) {
if (WorldUtil.IMP.isWorld(world)) { PlotSquared.get().loadWorld(world, null);
PlotSquared.get().loadWorld(world, null); C.SETUP_FINISHED.send(player);
C.SETUP_FINISHED.send(player); player.teleport(WorldUtil.IMP.getSpawn(world));
player.teleport(WorldUtil.IMP.getSpawn(world)); if (area.TERRAIN != 3) {
if (area.TERRAIN != 3) { ChunkManager.largeRegionTask(world, region,
ChunkManager.largeRegionTask(world, region, new RunnableVal<ChunkLoc>() {
new RunnableVal<ChunkLoc>() { @Override public void run(ChunkLoc value) {
@Override public void run(ChunkLoc value) { AugmentedUtils
AugmentedUtils .generate(world, value.x, value.z,
.generate(world, value.x, value.z, null);
null); }
} }, null);
}, null);
}
} else {
MainUtil.sendMessage(player,
"An error occurred while creating the world: "
+ area.worldname);
} }
} else {
MainUtil.sendMessage(player,
"An error occurred while creating the world: "
+ area.worldname);
} }
}; };
if (hasConfirmation(player)) { if (hasConfirmation(player)) {
@ -228,32 +226,30 @@ import java.util.Set;
C.SETUP_WORLD_TAKEN.send(player, pa.worldname); C.SETUP_WORLD_TAKEN.send(player, pa.worldname);
return false; return false;
} }
Runnable run = new Runnable() { Runnable run = () -> {
@Override public void run() { String path = "worlds." + pa.worldname;
String path = "worlds." + pa.worldname; if (!PlotSquared.get().worlds.contains(path)) {
if (!PlotSquared.get().worlds.contains(path)) { PlotSquared.get().worlds.createSection(path);
PlotSquared.get().worlds.createSection(path); }
} ConfigurationSection section =
ConfigurationSection section = PlotSquared.get().worlds.getConfigurationSection(path);
PlotSquared.get().worlds.getConfigurationSection(path); pa.saveConfiguration(section);
pa.saveConfiguration(section); pa.loadConfiguration(section);
pa.loadConfiguration(section); object.plotManager = PlotSquared.get().IMP.getPluginName();
object.plotManager = PlotSquared.imp().getPluginName(); object.setupGenerator = PlotSquared.get().IMP.getPluginName();
object.setupGenerator = PlotSquared.imp().getPluginName(); String world = SetupUtils.manager.setupWorld(object);
String world = SetupUtils.manager.setupWorld(object); if (WorldUtil.IMP.isWorld(world)) {
if (WorldUtil.IMP.isWorld(world)) { C.SETUP_FINISHED.send(player);
C.SETUP_FINISHED.send(player); player.teleport(WorldUtil.IMP.getSpawn(world));
player.teleport(WorldUtil.IMP.getSpawn(world)); } else {
} else { MainUtil.sendMessage(player,
MainUtil.sendMessage(player, "An error occurred while creating the world: "
"An error occurred while creating the world: " + pa.worldname);
+ pa.worldname); }
} try {
try { PlotSquared.get().worlds.save(PlotSquared.get().worldsFile);
PlotSquared.get().worlds.save(PlotSquared.get().worldsFile); } catch (IOException e) {
} catch (IOException e) { e.printStackTrace();
e.printStackTrace();
}
} }
}; };
if (hasConfirmation(player)) { if (hasConfirmation(player)) {
@ -422,11 +418,7 @@ import java.util.Set;
@Override public void run(ChunkLoc value) { @Override public void run(ChunkLoc value) {
AugmentedUtils.generate(area.worldname, value.x, value.z, null); AugmentedUtils.generate(area.worldname, value.x, value.z, null);
} }
}, new Runnable() { }, () -> player.sendMessage("Regen complete"));
@Override public void run() {
player.sendMessage("Regen complete");
}
});
return true; return true;
} }
case "goto": case "goto":
@ -464,7 +456,7 @@ import java.util.Set;
case "remove": case "remove":
MainUtil.sendMessage(player, MainUtil.sendMessage(player,
"$1World creation settings may be stored in multiple locations:" "$1World creation settings may be stored in multiple locations:"
+ "\n$3 - $2Bukkit bukkit.yml" + "\n$3 - $2" + PlotSquared.imp() + "\n$3 - $2Bukkit bukkit.yml" + "\n$3 - $2" + PlotSquared.get().IMP
.getPluginName() + " settings.yml" .getPluginName() + " settings.yml"
+ "\n$3 - $2Multiverse worlds.yml (or any world management plugin)" + "\n$3 - $2Multiverse worlds.yml (or any world management plugin)"
+ "\n$1Stop the server and delete it from these locations."); + "\n$1Stop the server and delete it from these locations.");

View File

@ -16,10 +16,6 @@ import java.util.Set;
description = "Claim the nearest plot", aliases = "a", usage = "/plot auto [length,width]") description = "Claim the nearest plot", aliases = "a", usage = "/plot auto [length,width]")
public class Auto extends SubCommand { public class Auto extends SubCommand {
@Deprecated public static PlotId getNextPlotId(PlotId id, int step) {
return id.getNextId(step);
}
private static boolean checkAllowedPlots(PlotPlayer player, PlotArea plotarea, private static boolean checkAllowedPlots(PlotPlayer player, PlotArea plotarea,
@Nullable Integer allowed_plots, int size_x, int size_z) { @Nullable Integer allowed_plots, int size_x, int size_z) {
if (allowed_plots == null) if (allowed_plots == null)
@ -128,12 +124,9 @@ public class Auto extends SubCommand {
return; return;
} }
whenDone.value = plot; whenDone.value = plot;
plot.owner = player.getUUID(); plot.setOwner(player.getUUID());
DBFunc.createPlotSafe(plot, whenDone, new Runnable() { DBFunc.createPlotSafe(plot, whenDone,
@Override public void run() { () -> autoClaimFromDatabase(player, area, plot.getId(), whenDone));
autoClaimFromDatabase(player, area, plot.getId(), whenDone);
}
});
} }
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {

View File

@ -27,11 +27,9 @@ import com.github.intellectualsites.plotsquared.plot.util.WorldUtil;
return false; return false;
} }
plot.addRunning(); plot.addRunning();
plot.setBiome(value.toUpperCase(), new Runnable() { plot.setBiome(value.toUpperCase(), () -> {
@Override public void run() { plot.removeRunning();
plot.removeRunning(); MainUtil.sendMessage(player, C.BIOME_SET_TO.s() + value.toLowerCase());
MainUtil.sendMessage(player, C.BIOME_SET_TO.s() + value.toLowerCase());
}
}); });
return true; return true;
} }

View File

@ -46,27 +46,24 @@ import java.util.Set;
final double price = flag.get(); final double price = flag.get();
checkTrue(player.getMoney() >= price, C.CANNOT_AFFORD_PLOT); checkTrue(player.getMoney() >= price, C.CANNOT_AFFORD_PLOT);
player.withdraw(price); player.withdraw(price);
confirm.run(this, new Runnable() { // Failure
@Override // Success // Success
public void run() { confirm.run(this, () -> {
C.REMOVED_BALANCE.send(player, price); C.REMOVED_BALANCE.send(player, price);
EconHandler.manager EconHandler.manager
.depositMoney(UUIDHandler.getUUIDWrapper().getOfflinePlayer(plot.owner), price); .depositMoney(UUIDHandler.getUUIDWrapper().getOfflinePlayer(plot.guessOwner()),
PlotPlayer owner = UUIDHandler.getPlayer(plot.owner); price);
if (owner != null) { PlotPlayer owner = UUIDHandler.getPlayer(plot.guessOwner());
C.PLOT_SOLD.send(owner, plot.getId(), player.getName(), price); if (owner != null) {
} C.PLOT_SOLD.send(owner, plot.getId(), player.getName(), price);
plot.removeFlag(Flags.PRICE);
plot.setOwner(player.getUUID());
C.CLAIMED.send(player);
whenDone.run(Buy.this, CommandResult.SUCCESS);
}
}, new Runnable() {
@Override // Failure
public void run() {
player.deposit(price);
whenDone.run(Buy.this, CommandResult.FAILURE);
} }
plot.removeFlag(Flags.PRICE);
plot.setOwner(player.getUUID());
C.CLAIMED.send(player);
whenDone.run(Buy.this, CommandResult.SUCCESS);
}, () -> {
player.deposit(price);
whenDone.run(Buy.this, CommandResult.FAILURE);
}); });
} }
} }

View File

@ -80,24 +80,16 @@ public class Claim extends SubCommand {
sendMessage(player, C.REMOVED_GRANTED_PLOT, "1", "" + (grants - 1)); sendMessage(player, C.REMOVED_GRANTED_PLOT, "1", "" + (grants - 1));
} }
if (plot.canClaim(player)) { if (plot.canClaim(player)) {
plot.owner = player.getUUID(); plot.setOwner(player.getUUID());
final String finalSchematic = schematic; final String finalSchematic = schematic;
DBFunc.createPlotSafe(plot, new Runnable() { DBFunc.createPlotSafe(plot, () -> TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override public void run() { @Override public void run(Object value) {
TaskManager.IMP.sync(new RunnableVal<Object>() { plot.claim(player, true, finalSchematic, false);
@Override public void run(Object value) { if (area.AUTO_MERGE) {
plot.claim(player, true, finalSchematic, false); plot.autoMerge(-1, Integer.MAX_VALUE, player.getUUID(), true);
if (area.AUTO_MERGE) { }
plot.autoMerge(-1, Integer.MAX_VALUE, player.getUUID(), true);
}
}
});
} }
}, new Runnable() { }), () -> sendMessage(player, C.PLOT_NOT_CLAIMED));
@Override public void run() {
sendMessage(player, C.PLOT_NOT_CLAIMED);
}
});
return true; return true;
} else { } else {
sendMessage(player, C.PLOT_NOT_CLAIMED); sendMessage(player, C.PLOT_NOT_CLAIMED);

View File

@ -35,33 +35,27 @@ import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue
checkTrue(plot.getRunning() == 0, C.WAIT_FOR_TIMER); checkTrue(plot.getRunning() == 0, C.WAIT_FOR_TIMER);
checkTrue(!Settings.Done.RESTRICT_BUILDING || !Flags.DONE.isSet(plot) || Permissions checkTrue(!Settings.Done.RESTRICT_BUILDING || !Flags.DONE.isSet(plot) || Permissions
.hasPermission(player, C.PERMISSION_CONTINUE), C.DONE_ALREADY_DONE); .hasPermission(player, C.PERMISSION_CONTINUE), C.DONE_ALREADY_DONE);
confirm.run(this, new Runnable() { confirm.run(this, () -> {
@Override public void run() { final long start = System.currentTimeMillis();
final long start = System.currentTimeMillis(); boolean result = plot.clear(true, false, () -> {
boolean result = plot.clear(true, false, new Runnable() { plot.unlink();
@Override public void run() { GlobalBlockQueue.IMP.addTask(() -> {
plot.unlink(); plot.removeRunning();
GlobalBlockQueue.IMP.addTask(new Runnable() { // If the state changes, then mark it as no longer done
@Override public void run() { if (plot.getFlag(Flags.DONE).isPresent()) {
plot.removeRunning(); FlagManager.removePlotFlag(plot, Flags.DONE);
// If the state changes, then mark it as no longer done
if (plot.getFlag(Flags.DONE).isPresent()) {
FlagManager.removePlotFlag(plot, Flags.DONE);
}
if (plot.getFlag(Flags.ANALYSIS).isPresent()) {
FlagManager.removePlotFlag(plot, Flags.ANALYSIS);
}
MainUtil.sendMessage(player, C.CLEARING_DONE,
"" + (System.currentTimeMillis() - start));
}
});
} }
if (plot.getFlag(Flags.ANALYSIS).isPresent()) {
FlagManager.removePlotFlag(plot, Flags.ANALYSIS);
}
MainUtil.sendMessage(player, C.CLEARING_DONE,
"" + (System.currentTimeMillis() - start));
}); });
if (!result) { });
MainUtil.sendMessage(player, C.WAIT_FOR_TIMER); if (!result) {
} else { MainUtil.sendMessage(player, C.WAIT_FOR_TIMER);
plot.addRunning(); } else {
} plot.addRunning();
} }
}, null); }, null);
} }

View File

@ -148,9 +148,9 @@ import java.util.UUID;
// Add any existing plots to the current cluster // Add any existing plots to the current cluster
for (Plot plot : plots) { for (Plot plot : plots) {
if (plot.hasOwner()) { if (plot.hasOwner()) {
if (!cluster.isAdded(plot.owner)) { if (!cluster.isAdded(plot.guessOwner())) {
cluster.invited.add(plot.owner); cluster.invited.add(plot.guessOwner());
DBFunc.setInvited(cluster, plot.owner); DBFunc.setInvited(cluster, plot.guessOwner());
} }
} }
} }

View File

@ -97,7 +97,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
if (plot != null && !plot.hasOwner()) { if (plot != null && !plot.hasOwner()) {
free.add(plot.getId()); free.add(plot.getId());
} }
start = Auto.getNextPlotId(start, 1); start = start.getNextId(1);
} }
if (free.isEmpty() || toMove.isEmpty()) { if (free.isEmpty() || toMove.isEmpty()) {
MainUtil.sendMessage(player, "NO FREE PLOTS FOUND"); MainUtil.sendMessage(player, "NO FREE PLOTS FOUND");
@ -126,13 +126,11 @@ import java.util.concurrent.atomic.AtomicBoolean;
} }
i++; i++;
final AtomicBoolean result = new AtomicBoolean(false); final AtomicBoolean result = new AtomicBoolean(false);
result.set(origin.move(possible, new Runnable() { result.set(origin.move(possible, () -> {
@Override public void run() { if (result.get()) {
if (result.get()) { MainUtil.sendMessage(player,
MainUtil.sendMessage(player, "Moving: " + origin + " -> " + possible);
"Moving: " + origin + " -> " + possible); TaskManager.runTaskLater(task, 1);
TaskManager.runTaskLater(task, 1);
}
} }
}, false)); }, false));
if (result.get()) { if (result.get()) {

View File

@ -40,11 +40,7 @@ import com.github.intellectualsites.plotsquared.plot.util.Permissions;
C.PLOTWORLD_INCOMPATIBLE.send(player); C.PLOTWORLD_INCOMPATIBLE.send(player);
return false; return false;
} }
if (plot1.copy(plot2, new Runnable() { if (plot1.copy(plot2, () -> MainUtil.sendMessage(player, C.COPY_SUCCESS))) {
@Override public void run() {
MainUtil.sendMessage(player, C.COPY_SUCCESS);
}
})) {
return true; return true;
} else { } else {
MainUtil.sendMessage(player, C.REQUIRES_UNOWNED); MainUtil.sendMessage(player, C.REQUIRES_UNOWNED);

View File

@ -30,25 +30,18 @@ import java.util.Map.Entry;
public static void insertPlots(final SQLManager manager, final List<Plot> plots, public static void insertPlots(final SQLManager manager, final List<Plot> plots,
final PlotPlayer player) { final PlotPlayer player) {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { try {
try { ArrayList<Plot> ps = new ArrayList<>(plots);
ArrayList<Plot> ps = new ArrayList<>(); MainUtil.sendMessage(player, "&6Starting...");
for (Plot p : plots) { manager.createPlotsAndData(ps, () -> {
ps.add(p); MainUtil.sendMessage(player, "&6Database conversion finished!");
} manager.close();
MainUtil.sendMessage(player, "&6Starting..."); });
manager.createPlotsAndData(ps, new Runnable() { } catch (Exception e) {
@Override public void run() { MainUtil
MainUtil.sendMessage(player, "&6Database conversion finished!"); .sendMessage(player, "Failed to insert plot objects, see stacktrace for info");
manager.close(); e.printStackTrace();
}
});
} catch (Exception e) {
MainUtil.sendMessage(player,
"Failed to insert plot objects, see stacktrace for info");
e.printStackTrace();
}
} }
}); });
} }
@ -106,12 +99,12 @@ import java.util.Map.Entry;
PlotId newId = newPlot.getId(); PlotId newId = newPlot.getId();
PlotId id = plot.getId(); PlotId id = plot.getId();
File worldFile = File worldFile =
new File(PlotSquared.imp().getWorldContainer(), new File(PlotSquared.get().IMP.getWorldContainer(),
id.toCommaSeparatedString()); id.toCommaSeparatedString());
if (worldFile.exists()) { if (worldFile.exists()) {
File newFile = File newFile = new File(
new File(PlotSquared.imp().getWorldContainer(), PlotSquared.get().IMP.getWorldContainer(),
newId.toCommaSeparatedString()); newId.toCommaSeparatedString());
worldFile.renameTo(newFile); worldFile.renameTo(newFile);
} }
id.x = newId.x; id.x = newId.x;
@ -130,20 +123,13 @@ import java.util.Map.Entry;
plots.add(plot); plots.add(plot);
} }
} else { } else {
HashMap<PlotId, Plot> plotmap = HashMap<PlotId, Plot> plotmap = PlotSquared.get().plots_tmp
PlotSquared.get().plots_tmp.get(areaname); .computeIfAbsent(areaname, k -> new HashMap<>());
if (plotmap == null) {
plotmap = new HashMap<>();
PlotSquared.get().plots_tmp.put(areaname, plotmap);
}
plotmap.putAll(entry.getValue()); plotmap.putAll(entry.getValue());
} }
} }
DBFunc.createPlotsAndData(plots, new Runnable() { DBFunc.createPlotsAndData(plots,
@Override public void run() { () -> MainUtil.sendMessage(player, "&6Database conversion finished!"));
MainUtil.sendMessage(player, "&6Database conversion finished!");
}
});
return true; return true;
case "mysql": case "mysql":
if (args.length < 6) { if (args.length < 6) {

View File

@ -34,8 +34,6 @@ public class DebugClaimTest extends SubCommand {
} }
PlotId min, max; PlotId min, max;
try { try {
args[1].split(";");
args[2].split(";");
min = PlotId.fromString(args[1]); min = PlotId.fromString(args[1]);
max = PlotId.fromString(args[2]); max = PlotId.fromString(args[2]);
} catch (Exception ignored) { } catch (Exception ignored) {
@ -96,11 +94,8 @@ public class DebugClaimTest extends SubCommand {
if (!plots.isEmpty()) { if (!plots.isEmpty()) {
MainUtil.sendMessage(player, MainUtil.sendMessage(player,
"&3Sign Block&8->&3Plot&8: &7Updating '" + plots.size() + "' plots!"); "&3Sign Block&8->&3Plot&8: &7Updating '" + plots.size() + "' plots!");
DBFunc.createPlotsAndData(plots, new Runnable() { DBFunc.createPlotsAndData(plots,
@Override public void run() { () -> MainUtil.sendMessage(player, "&6Database update finished!"));
MainUtil.sendMessage(player, "&6Database update finished!");
}
});
for (Plot plot : plots) { for (Plot plot : plots) {
plot.create(); plot.create();
} }

View File

@ -46,8 +46,8 @@ import java.util.*;
this.engine.eval(script, this.scope); this.engine.eval(script, this.scope);
} }
} }
} catch (IOException | ScriptException ignored) { } catch (IOException | ScriptException e) {
ignored.printStackTrace(); e.printStackTrace();
} }
} }
@ -164,11 +164,8 @@ import java.util.*;
"$1<threshold> $2= $1The percentage of plots you want to clear as a number between 0 - 100"); "$1<threshold> $2= $1The percentage of plots you want to clear as a number between 0 - 100");
return false; return false;
} }
PlotAnalysis.calcOptimalModifiers(new Runnable() { PlotAnalysis.calcOptimalModifiers(() -> MainUtil
@Override public void run() { .sendMessage(player, "$1Thank you for calibrating plot expiry"), threshold);
MainUtil.sendMessage(player, "$1Thank you for calibrating plot expiry");
}
}, threshold);
return true; return true;
case "stop-expire": case "stop-expire":
if (ExpireManager.IMP == null || !ExpireManager.IMP.cancelTask()) { if (ExpireManager.IMP == null || !ExpireManager.IMP.cancelTask()) {
@ -404,18 +401,16 @@ import java.util.*;
try { try {
if (async) { if (async) {
final String toExec = script; final String toExec = script;
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { long start = System.currentTimeMillis();
long start = System.currentTimeMillis(); Object result = null;
Object result = null; try {
try { result = DebugExec.this.engine.eval(toExec, DebugExec.this.scope);
result = DebugExec.this.engine.eval(toExec, DebugExec.this.scope); } catch (ScriptException e) {
} catch (ScriptException e) { e.printStackTrace();
e.printStackTrace();
}
PlotSquared.log(
"> " + (System.currentTimeMillis() - start) + "ms -> " + result);
} }
PlotSquared
.log("> " + (System.currentTimeMillis() - start) + "ms -> " + result);
}); });
} else { } else {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();

View File

@ -35,7 +35,7 @@ import java.util.UUID;
} }
SinglePlotArea area = ((SinglePlotAreaManager) pam).getArea(); SinglePlotArea area = ((SinglePlotAreaManager) pam).getArea();
PlotId id = new PlotId(0, 0); PlotId id = new PlotId(0, 0);
File container = PlotSquared.imp().getWorldContainer(); File container = PlotSquared.get().IMP.getWorldContainer();
for (File folder : container.listFiles()) { for (File folder : container.listFiles()) {
String name = folder.getName(); String name = folder.getName();
if (!WorldUtil.IMP.isWorld(name) && PlotId.fromString(name) == null) { if (!WorldUtil.IMP.isWorld(name) && PlotId.fromString(name) == null) {
@ -45,7 +45,7 @@ import java.util.UUID;
UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8)); UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8));
} }
while (new File(container, id.toCommaSeparatedString()).exists()) { while (new File(container, id.toCommaSeparatedString()).exists()) {
id = Auto.getNextPlotId(id, 1); id = id.getNextId(1);
} }
File newDir = new File(container, id.toCommaSeparatedString()); File newDir = new File(container, id.toCommaSeparatedString());
if (folder.renameTo(newDir)) { if (folder.renameTo(newDir)) {

View File

@ -19,69 +19,64 @@ import java.io.IOException;
extends SubCommand { extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { try {
String settingsYML = HastebinUtility.upload(PlotSquared.get().configFile);
String worldsYML = HastebinUtility.upload(PlotSquared.get().worldsFile);
String commandsYML = HastebinUtility.upload(PlotSquared.get().commandsFile);
String latestLOG;
try { try {
String settingsYML = HastebinUtility.upload(PlotSquared.get().configFile); latestLOG = HastebinUtility.upload(
String worldsYML = HastebinUtility.upload(PlotSquared.get().worldsFile); new File(PlotSquared.get().IMP.getDirectory(), "../../logs/latest.log"));
String commandsYML = HastebinUtility.upload(PlotSquared.get().commandsFile); } catch (IOException ignored) {
String latestLOG; MainUtil
try { .sendMessage(player, "&clatest.log is too big to be pasted, will ignore");
latestLOG = HastebinUtility.upload( latestLOG = "too big :(";
new File(PlotSquared.get().IMP.getDirectory(),
"../../logs/latest.log"));
} catch (IOException ignored) {
MainUtil.sendMessage(player,
"&clatest.log is too big to be pasted, will ignore");
latestLOG = "too big :(";
}
StringBuilder b = new StringBuilder();
b.append(
"# Welcome to this paste\n# It is meant to provide us at IntellectualSites with better information about your "
+ "problem\n\n# We will start with some informational files\n");
b.append("links.settings_yml: ").append(settingsYML).append('\n');
b.append("links.worlds_yml: ").append(worldsYML).append('\n');
b.append("links.commands_yml: ").append(commandsYML).append('\n');
b.append("links.latest_log: ").append(latestLOG).append('\n');
b.append("\n# Server Information\n");
int[] sVersion = PlotSquared.get().IMP.getServerVersion();
b.append("version.server: ").append(sVersion[0]).append('.').append(sVersion[1])
.append('.').append(sVersion[2]).append('\n');
b.append("online_mode: ").append(UUIDHandler.getUUIDWrapper()).append(';')
.append(!Settings.UUID.OFFLINE).append('\n');
b.append("plugins:");
for (String id : PlotSquared.get().IMP.getPluginIds()) {
String[] split = id.split(":");
String[] split2 = split[0].split(";");
String enabled = split.length == 2 ? split[1] : "unknown";
String name = split2[0];
String version = split2.length == 2 ? split2[1] : "unknown";
b.append("\n ").append(name).append(":\n ").append("version: '")
.append(version).append('\'').append("\n enabled: ").append(enabled);
}
b.append("\n\n# YAY! Now, let's see what we can find in your JVM\n");
Runtime runtime = Runtime.getRuntime();
b.append("memory.free: ").append(runtime.freeMemory()).append('\n');
b.append("memory.max: ").append(runtime.maxMemory()).append('\n');
b.append("java.specification.version: '")
.append(System.getProperty("java.specification.version")).append("'\n");
b.append("java.vendor: '").append(System.getProperty("java.vendor"))
.append("'\n");
b.append("java.version: '").append(System.getProperty("java.version"))
.append("'\n");
b.append("os.arch: '").append(System.getProperty("os.arch")).append("'\n");
b.append("os.name: '").append(System.getProperty("os.name")).append("'\n");
b.append("os.version: '").append(System.getProperty("os.version"))
.append("'\n\n");
b.append("# Okay :D Great. You are now ready to create your bug report!");
b.append(
"\n# You can do so at https://github.com/IntellectualSites/PlotSquared/issues");
String link = HastebinUtility.upload(b.toString());
player.sendMessage(C.DEBUG_REPORT_CREATED.s().replace("%url%", link));
} catch (IOException e) {
e.printStackTrace();
} }
StringBuilder b = new StringBuilder();
b.append(
"# Welcome to this paste\n# It is meant to provide us at IntellectualSites with better information about your "
+ "problem\n\n# We will start with some informational files\n");
b.append("links.settings_yml: ").append(settingsYML).append('\n');
b.append("links.worlds_yml: ").append(worldsYML).append('\n');
b.append("links.commands_yml: ").append(commandsYML).append('\n');
b.append("links.latest_log: ").append(latestLOG).append('\n');
b.append("\n# Server Information\n");
int[] sVersion = PlotSquared.get().IMP.getServerVersion();
b.append("version.server: ").append(sVersion[0]).append('.').append(sVersion[1])
.append('.').append(sVersion[2]).append('\n');
b.append("online_mode: ").append(UUIDHandler.getUUIDWrapper()).append(';')
.append(!Settings.UUID.OFFLINE).append('\n');
b.append("plugins:");
for (String id : PlotSquared.get().IMP.getPluginIds()) {
String[] split = id.split(":");
String[] split2 = split[0].split(";");
String enabled = split.length == 2 ? split[1] : "unknown";
String name = split2[0];
String version = split2.length == 2 ? split2[1] : "unknown";
b.append("\n ").append(name).append(":\n ").append("version: '")
.append(version).append('\'').append("\n enabled: ").append(enabled);
}
b.append("\n\n# YAY! Now, let's see what we can find in your JVM\n");
Runtime runtime = Runtime.getRuntime();
b.append("memory.free: ").append(runtime.freeMemory()).append('\n');
b.append("memory.max: ").append(runtime.maxMemory()).append('\n');
b.append("java.specification.version: '")
.append(System.getProperty("java.specification.version")).append("'\n");
b.append("java.vendor: '").append(System.getProperty("java.vendor")).append("'\n");
b.append("java.version: '").append(System.getProperty("java.version"))
.append("'\n");
b.append("os.arch: '").append(System.getProperty("os.arch")).append("'\n");
b.append("os.name: '").append(System.getProperty("os.name")).append("'\n");
b.append("os.version: '").append(System.getProperty("os.version")).append("'\n\n");
b.append("# Okay :D Great. You are now ready to create your bug report!");
b.append(
"\n# You can do so at https://github.com/IntellectualSites/PlotSquared/issues");
String link = HastebinUtility.upload(b.toString());
player.sendMessage(C.DEBUG_REPORT_CREATED.s().replace("%url%", link));
} catch (IOException e) {
e.printStackTrace();
} }
}); });
return true; return true;

View File

@ -16,14 +16,10 @@ import java.util.ArrayList;
public class DebugSaveTest extends SubCommand { public class DebugSaveTest extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
ArrayList<Plot> plots = new ArrayList<Plot>(); ArrayList<Plot> plots = new ArrayList<>(PlotSquared.get().getPlots());
plots.addAll(PlotSquared.get().getPlots());
MainUtil.sendMessage(player, "&6Starting `DEBUGSAVETEST`"); MainUtil.sendMessage(player, "&6Starting `DEBUGSAVETEST`");
DBFunc.createPlotsAndData(plots, new Runnable() { DBFunc.createPlotsAndData(plots,
@Override public void run() { () -> MainUtil.sendMessage(player, "&6Database sync finished!"));
MainUtil.sendMessage(player, "&6Database sync finished!");
}
});
return true; return true;
} }
} }

View File

@ -33,33 +33,28 @@ import com.github.intellectualsites.plotsquared.plot.util.*;
final java.util.Set<Plot> plots = plot.getConnectedPlots(); final java.util.Set<Plot> plots = plot.getConnectedPlots();
final int currentPlots = final int currentPlots =
Settings.Limit.GLOBAL ? player.getPlotCount() : player.getPlotCount(loc.getWorld()); Settings.Limit.GLOBAL ? player.getPlotCount() : player.getPlotCount(loc.getWorld());
Runnable run = new Runnable() { Runnable run = () -> {
@Override public void run() { if (plot.getRunning() > 0) {
if (plot.getRunning() > 0) { MainUtil.sendMessage(player, C.WAIT_FOR_TIMER);
MainUtil.sendMessage(player, C.WAIT_FOR_TIMER); return;
return; }
} final long start = System.currentTimeMillis();
final long start = System.currentTimeMillis(); boolean result = plot.deletePlot(() -> {
boolean result = plot.deletePlot(new Runnable() { plot.removeRunning();
@Override public void run() { if ((EconHandler.manager != null) && plotArea.USE_ECONOMY) {
plot.removeRunning(); Expression<Double> valueExr = plotArea.PRICES.get("sell");
if ((EconHandler.manager != null) && plotArea.USE_ECONOMY) { double value = plots.size() * valueExr.evaluate((double) currentPlots);
Expression<Double> valueExr = plotArea.PRICES.get("sell"); if (value > 0d) {
double value = plots.size() * valueExr.evaluate((double) currentPlots); EconHandler.manager.depositMoney(player, value);
if (value > 0d) { sendMessage(player, C.ADDED_BALANCE, String.valueOf(value));
EconHandler.manager.depositMoney(player, value);
sendMessage(player, C.ADDED_BALANCE, String.valueOf(value));
}
}
MainUtil.sendMessage(player, C.DELETING_DONE,
System.currentTimeMillis() - start);
} }
});
if (result) {
plot.addRunning();
} else {
MainUtil.sendMessage(player, C.WAIT_FOR_TIMER);
} }
MainUtil.sendMessage(player, C.DELETING_DONE, System.currentTimeMillis() - start);
});
if (result) {
plot.addRunning();
} else {
MainUtil.sendMessage(player, C.WAIT_FOR_TIMER);
} }
}; };
if (hasConfirmation(player)) { if (hasConfirmation(player)) {

View File

@ -10,7 +10,6 @@ import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer; import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
import com.github.intellectualsites.plotsquared.plot.util.*; import com.github.intellectualsites.plotsquared.plot.util.*;
import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -44,9 +43,7 @@ import java.util.UUID;
MainUtil.sendMessage(player, C.INVALID_PLAYER, args[0]); MainUtil.sendMessage(player, C.INVALID_PLAYER, args[0]);
return false; return false;
} }
Iterator<UUID> iter = uuids.iterator(); for (UUID uuid : uuids) {
while (iter.hasNext()) {
UUID uuid = iter.next();
if (uuid == DBFunc.EVERYONE && !( if (uuid == DBFunc.EVERYONE && !(
Permissions.hasPermission(player, C.PERMISSION_DENY_EVERYONE) || Permissions Permissions.hasPermission(player, C.PERMISSION_DENY_EVERYONE) || Permissions
.hasPermission(player, C.PERMISSION_ADMIN_COMMAND_DENY))) { .hasPermission(player, C.PERMISSION_ADMIN_COMMAND_DENY))) {

View File

@ -247,20 +247,21 @@ import java.util.*;
for (Flag<?> flag1 : Flags.getFlags()) { for (Flag<?> flag1 : Flags.getFlags()) {
String type = flag1.getClass().getSimpleName(); String type = flag1.getClass().getSimpleName();
if (!flags.containsKey(type)) { if (!flags.containsKey(type)) {
flags.put(type, new ArrayList<String>()); flags.put(type, new ArrayList<>());
} }
flags.get(type).add(flag1.getName()); flags.get(type).add(flag1.getName());
} }
String message = ""; StringBuilder message = new StringBuilder();
String prefix = ""; String prefix = "";
for (Map.Entry<String, ArrayList<String>> entry : flags.entrySet()) { for (Map.Entry<String, ArrayList<String>> entry : flags.entrySet()) {
String category = entry.getKey(); String category = entry.getKey();
List<String> flagNames = entry.getValue(); List<String> flagNames = entry.getValue();
Collections.sort(flagNames); Collections.sort(flagNames);
message += prefix + "&6" + category + ": &7" + StringMan.join(flagNames, ", "); message.append(prefix).append("&6").append(category).append(": &7")
.append(StringMan.join(flagNames, ", "));
prefix = "\n"; prefix = "\n";
} }
MainUtil.sendMessage(player, message); MainUtil.sendMessage(player, message.toString());
return true; return true;
} }
MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag <set|remove|add|list|info>"); MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag <set|remove|add|list|info>");

View File

@ -209,7 +209,7 @@ public class GenerateDocs {
line = line =
line.replaceAll("/[*][*] ", "").replaceAll("[*]/ ", "").replaceAll("[*] ", "") line.replaceAll("/[*][*] ", "").replaceAll("[*]/ ", "").replaceAll("[*] ", "")
.trim(); .trim();
result.append(line + '\n'); result.append(line).append('\n');
} }
} }
return result.toString().trim(); return result.toString().trim();

View File

@ -57,9 +57,7 @@ public class Help extends Command {
public void displayHelp(PlotPlayer player, String cat, int page) { public void displayHelp(PlotPlayer player, String cat, int page) {
CommandCategory catEnum = null; CommandCategory catEnum = null;
if (cat != null) { if (cat != null) {
if (StringMan.isEqualIgnoreCase(cat, "all")) { if (!StringMan.isEqualIgnoreCase(cat, "all")) {
catEnum = null;
} else {
for (CommandCategory c : CommandCategory.values()) { for (CommandCategory c : CommandCategory.values()) {
if (StringMan.isEqualIgnoreCaseToAny(cat, c.name(), c.toString())) { if (StringMan.isEqualIgnoreCaseToAny(cat, c.name(), c.toString())) {
catEnum = c; catEnum = c;
@ -76,13 +74,13 @@ public class Help extends Command {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.append(C.HELP_HEADER.s()); builder.append(C.HELP_HEADER.s());
for (CommandCategory c : CommandCategory.values()) { for (CommandCategory c : CommandCategory.values()) {
builder.append("\n" + StringMan builder.append("\n").append(StringMan
.replaceAll(C.HELP_INFO_ITEM.s(), "%category%", c.toString().toLowerCase(), .replaceAll(C.HELP_INFO_ITEM.s(), "%category%", c.toString().toLowerCase(),
"%category_desc%", c.toString())); "%category_desc%", c.toString()));
} }
builder.append("\n").append(C.HELP_INFO_ITEM.s().replaceAll("%category%", "all") builder.append("\n").append(C.HELP_INFO_ITEM.s().replaceAll("%category%", "all")
.replaceAll("%category_desc%", "Display all commands")); .replaceAll("%category_desc%", "Display all commands"));
builder.append("\n" + C.HELP_FOOTER.s()); builder.append("\n").append(C.HELP_FOOTER.s());
MainUtil.sendMessage(player, builder.toString(), false); MainUtil.sendMessage(player, builder.toString(), false);
return; return;
} }

View File

@ -43,7 +43,7 @@ import java.util.List;
StringBuilder string = new StringBuilder(); StringBuilder string = new StringBuilder();
string.append(StringMan string.append(StringMan
.replaceAll(C.COMMENT_LIST_HEADER_PAGED.s(), "%amount%", comments.length, "%cur", .replaceAll(C.COMMENT_LIST_HEADER_PAGED.s(), "%amount%", comments.length, "%cur",
page + 1, "%max", totalPages + 1, "%word", "all") + '\n'); page + 1, "%max", totalPages + 1, "%word", "all")).append('\n');
// This might work xD // This might work xD
for (int x = page * 12; x < max; x++) { for (int x = page * 12; x < max; x++) {

View File

@ -69,24 +69,24 @@ import java.util.UUID;
} }
}; };
UUID uuid = player.getUUID(); UUID uuid = player.getUUID();
String name = MainUtil.getName(plot.owner); String name = MainUtil.getName(plot.guessOwner());
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cPlot Info", inv.setItem(1,
"&cID: &6" + plot.getId().toString(), "&cOwner: &6" + name, new PlotItemStack("emerald", 1, "&cPlot Info", "&cID: &6" + plot.getId().toString(),
"&cAlias: &6" + plot.getAlias(), "&cOwner: &6" + name, "&cAlias: &6" + plot.getAlias(),
"&cBiome: &6" + plot.getBiome().replaceAll("_", "").toLowerCase(), "&cBiome: &6" + plot.getBiome().replaceAll("_", "").toLowerCase(),
"&cCan Build: &6" + plot.isAdded(uuid), "&cCan Build: &6" + plot.isAdded(uuid), "&cSeen: &6" + MainUtil
"&cSeen: &6" + MainUtil.secToTime((int) (ExpireManager.IMP.getAge(plot) / 1000)), .secToTime((int) (ExpireManager.IMP.getAge(plot) / 1000)),
"&cIs Denied: &6" + plot.isDenied(uuid))); "&cIs Denied: &6" + plot.isDenied(uuid)));
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cTrusted", inv.setItem(1, new PlotItemStack("emerald", 1, "&cTrusted",
"&cAmount: &6" + plot.getTrusted().size(), "&cAmount: &6" + plot.getTrusted().size(),
"&8Click to view a list of the trusted users")); "&8Click to view a list of the trusted users"));
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cMembers", inv.setItem(1, new PlotItemStack("emerald", 1, "&cMembers",
"&cAmount: &6" + plot.getMembers().size(), "&cAmount: &6" + plot.getMembers().size(),
"&8Click to view a list of plot members")); "&8Click to view a list of plot members"));
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cDenied", "&cDenied", inv.setItem(1, new PlotItemStack("emerald", 1, "&cDenied", "&cDenied",
"&cAmount: &6" + plot.getDenied().size(), "&cAmount: &6" + plot.getDenied().size(),
"&8Click to view a list of denied players")); "&8Click to view a list of denied players"));
inv.setItem(1, new PlotItemStack(388, (short) 0, 1, "&cFlags", "&cFlags", inv.setItem(1, new PlotItemStack("emerald", 1, "&cFlags", "&cFlags",
"&cAmount: &6" + plot.getFlags().size(), "&8Click to view a list of plot flags")); "&cAmount: &6" + plot.getFlags().size(), "&8Click to view a list of plot flags"));
inv.openInventory(); inv.openInventory();
return true; return true;

View File

@ -10,8 +10,11 @@ import com.github.intellectualsites.plotsquared.plot.util.*;
import com.github.intellectualsites.plotsquared.plot.util.expiry.ExpireManager; import com.github.intellectualsites.plotsquared.plot.util.expiry.ExpireManager;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.UUID;
@CommandDeclaration(command = "list", aliases = {"l", "find", "search"}, description = "List plots", @CommandDeclaration(command = "list", aliases = {"l", "find", "search"}, description = "List plots",
permission = "plots.list", category = CommandCategory.INFO, permission = "plots.list", category = CommandCategory.INFO,
@ -132,7 +135,7 @@ public class ListCmd extends SubCommand {
return false; return false;
} }
plots = ExpireManager.IMP == null ? plots = ExpireManager.IMP == null ?
new ArrayList<Plot>() : new ArrayList<>() :
new ArrayList<>(ExpireManager.IMP.getPendingExpired()); new ArrayList<>(ExpireManager.IMP.getPendingExpired());
break; break;
case "area": case "area":
@ -145,7 +148,7 @@ public class ListCmd extends SubCommand {
C.PERMISSION_LIST_WORLD_NAME.f(world)); C.PERMISSION_LIST_WORLD_NAME.f(world));
return false; return false;
} }
plots = area == null ? new ArrayList<Plot>() : new ArrayList<>(area.getPlots()); plots = area == null ? new ArrayList<>() : new ArrayList<>(area.getPlots());
break; break;
case "all": case "all":
if (!Permissions.hasPermission(player, C.PERMISSION_LIST_ALL)) { if (!Permissions.hasPermission(player, C.PERMISSION_LIST_ALL)) {
@ -167,18 +170,16 @@ public class ListCmd extends SubCommand {
} }
plots.add(plot); plots.add(plot);
} }
Collections.sort(plots, new Comparator<Plot>() { plots.sort((a, b) -> {
@Override public int compare(Plot a, Plot b) { String va = "" + a.getFlags().get(Flags.DONE);
String va = "" + a.getFlags().get(Flags.DONE); String vb = "" + b.getFlags().get(Flags.DONE);
String vb = "" + b.getFlags().get(Flags.DONE); if (MathMan.isInteger(va)) {
if (MathMan.isInteger(va)) { if (MathMan.isInteger(vb)) {
if (MathMan.isInteger(vb)) { return Integer.parseInt(vb) - Integer.parseInt(va);
return Integer.parseInt(vb) - Integer.parseInt(va);
}
return -1;
} }
return 1; return -1;
} }
return 1;
}); });
sort = false; sort = false;
break; break;
@ -188,33 +189,31 @@ public class ListCmd extends SubCommand {
return false; return false;
} }
plots = new ArrayList<>(PlotSquared.get().getPlots()); plots = new ArrayList<>(PlotSquared.get().getPlots());
Collections.sort(plots, new Comparator<Plot>() { plots.sort((p1, p2) -> {
@Override public int compare(Plot p1, Plot p2) { double v1 = 0;
double v1 = 0; int p1s = p1.getSettings().getRatings().size();
int p1s = p1.getSettings().getRatings().size(); int p2s = p2.getRatings().size();
int p2s = p2.getRatings().size(); if (!p1.getSettings().getRatings().isEmpty()) {
if (!p1.getSettings().getRatings().isEmpty()) { for (Entry<UUID, Rating> entry : p1.getRatings().entrySet()) {
for (Entry<UUID, Rating> entry : p1.getRatings().entrySet()) { double av = entry.getValue().getAverageRating();
double av = entry.getValue().getAverageRating(); v1 += av * av;
v1 += av * av;
}
v1 /= p1s;
v1 += p1s;
} }
double v2 = 0; v1 /= p1s;
if (!p2.getSettings().getRatings().isEmpty()) { v1 += p1s;
for (Entry<UUID, Rating> entry : p2.getRatings().entrySet()) {
double av = entry.getValue().getAverageRating();
v2 += av * av;
}
v2 /= p2s;
v2 += p2s;
}
if (v2 == v1 && v2 != 0) {
return p2s - p1s;
}
return (int) Math.signum(v2 - v1);
} }
double v2 = 0;
if (!p2.getSettings().getRatings().isEmpty()) {
for (Entry<UUID, Rating> entry : p2.getRatings().entrySet()) {
double av = entry.getValue().getAverageRating();
v2 += av * av;
}
v2 /= p2s;
v2 += p2s;
}
if (v2 == v1 && v2 != 0) {
return p2s - p1s;
}
return (int) Math.signum(v2 - v1);
}); });
sort = false; sort = false;
break; break;
@ -241,7 +240,7 @@ public class ListCmd extends SubCommand {
} }
plots = new ArrayList<>(); plots = new ArrayList<>();
for (Plot plot : PlotSquared.get().getPlots()) { for (Plot plot : PlotSquared.get().getPlots()) {
if (plot.owner == null) { if (plot.guessOwner() == null) {
plots.add(plot); plots.add(plot);
} }
} }
@ -253,10 +252,10 @@ public class ListCmd extends SubCommand {
} }
plots = new ArrayList<>(); plots = new ArrayList<>();
for (Plot plot : PlotSquared.get().getPlots()) { for (Plot plot : PlotSquared.get().getPlots()) {
if (plot.owner == null) { if (plot.guessOwner() == null) {
continue; continue;
} }
if (UUIDHandler.getName(plot.owner) == null) { if (UUIDHandler.getName(plot.guessOwner()) == null) {
plots.add(plot); plots.add(plot);
} }
} }
@ -330,12 +329,7 @@ public class ListCmd extends SubCommand {
public void displayPlots(final PlotPlayer player, List<Plot> plots, int pageSize, int page, public void displayPlots(final PlotPlayer player, List<Plot> plots, int pageSize, int page,
PlotArea area, String[] args, boolean sort) { PlotArea area, String[] args, boolean sort) {
// Header // Header
Iterator<Plot> iterator = plots.iterator(); plots.removeIf(plot -> !plot.isBasePlot());
while (iterator.hasNext()) {
if (!iterator.next().isBasePlot()) {
iterator.remove();
}
}
if (sort) { if (sort) {
plots = PlotSquared.get().sortPlots(plots, SortType.CREATION_DATE, area); plots = PlotSquared.get().sortPlots(plots, SortType.CREATION_DATE, area);
} }
@ -343,7 +337,7 @@ public class ListCmd extends SubCommand {
new RunnableVal3<Integer, Plot, PlotMessage>() { new RunnableVal3<Integer, Plot, PlotMessage>() {
@Override public void run(Integer i, Plot plot, PlotMessage message) { @Override public void run(Integer i, Plot plot, PlotMessage message) {
String color; String color;
if (plot.owner == null) { if (plot.guessOwner() == null) {
color = "$3"; color = "$3";
} else if (plot.isOwner(player.getUUID())) { } else if (plot.isOwner(player.getUUID())) {
color = "$1"; color = "$1";

View File

@ -103,17 +103,15 @@ import java.util.List;
List<String> schematics = player.getMeta("plot_schematics"); List<String> schematics = player.getMeta("plot_schematics");
if (schematics == null) { if (schematics == null) {
plot.addRunning(); plot.addRunning();
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { List<String> schematics1 = SchematicHandler.manager.getSaves(player.getUUID());
List<String> schematics = SchematicHandler.manager.getSaves(player.getUUID()); plot.removeRunning();
plot.removeRunning(); if ((schematics1 == null) || schematics1.isEmpty()) {
if ((schematics == null) || schematics.isEmpty()) { MainUtil.sendMessage(player, C.LOAD_FAILED);
MainUtil.sendMessage(player, C.LOAD_FAILED); return;
return;
}
player.setMeta("plot_schematics", schematics);
displaySaves(player);
} }
player.setMeta("plot_schematics", schematics1);
displaySaves(player);
}); });
} else { } else {
displaySaves(player); displaySaves(player);
@ -151,30 +149,30 @@ import java.util.List;
if (time >= 33868800) { if (time >= 33868800) {
int years = (int) (time / 33868800); int years = (int) (time / 33868800);
time -= years * 33868800; time -= years * 33868800;
toreturn.append(years + "y "); toreturn.append(years).append("y ");
} }
if (time >= 604800) { if (time >= 604800) {
int weeks = (int) (time / 604800); int weeks = (int) (time / 604800);
time -= weeks * 604800; time -= weeks * 604800;
toreturn.append(weeks + "w "); toreturn.append(weeks).append("w ");
} }
if (time >= 86400) { if (time >= 86400) {
int days = (int) (time / 86400); int days = (int) (time / 86400);
time -= days * 86400; time -= days * 86400;
toreturn.append(days + "d "); toreturn.append(days).append("d ");
} }
if (time >= 3600) { if (time >= 3600) {
int hours = (int) (time / 3600); int hours = (int) (time / 3600);
time -= hours * 3600; time -= hours * 3600;
toreturn.append(hours + "h "); toreturn.append(hours).append("h ");
} }
if (time >= 60) { if (time >= 60) {
int minutes = (int) (time / 60); int minutes = (int) (time / 60);
time -= minutes * 60; time -= minutes * 60;
toreturn.append(minutes + "m "); toreturn.append(minutes).append("m ");
} }
if (toreturn.length() == 0 || (time > 0)) { if (toreturn.length() == 0 || (time > 0)) {
toreturn.append(time + "s "); toreturn.append(time).append("s ");
} }
return toreturn.toString().trim(); return toreturn.toString().trim();
} }

View File

@ -127,27 +127,23 @@ public class MainCommand extends Command {
@Override @Override
public void run(final Command cmd, final Runnable success, final Runnable failure) { public void run(final Command cmd, final Runnable success, final Runnable failure) {
if (cmd.hasConfirmation(player)) { if (cmd.hasConfirmation(player)) {
CmdConfirm.addPending(player, cmd.getUsage(), new Runnable() { CmdConfirm.addPending(player, cmd.getUsage(), () -> {
@Override public void run() { if (EconHandler.manager != null) {
if (EconHandler.manager != null) { PlotArea area = player.getApplicablePlotArea();
PlotArea area = player.getApplicablePlotArea(); if (area != null) {
if (area != null) { Expression<Double> priceEval = area.PRICES.get(cmd.getFullId());
Expression<Double> priceEval = Double price = priceEval != null ? priceEval.evaluate(0d) : 0d;
area.PRICES.get(cmd.getFullId()); if (price != null
Double price = && EconHandler.manager.getMoney(player) < price) {
priceEval != null ? priceEval.evaluate(0d) : 0d; if (failure != null) {
if (price != null failure.run();
&& EconHandler.manager.getMoney(player) < price) {
if (failure != null) {
failure.run();
}
return;
} }
return;
} }
} }
if (success != null) { }
success.run(); if (success != null) {
} success.run();
} }
}); });
return; return;

View File

@ -55,12 +55,11 @@ public class Merge extends SubCommand {
MainUtil.sendMessage(player, C.NO_PLOT_PERMS); MainUtil.sendMessage(player, C.NO_PLOT_PERMS);
return false; return false;
} else { } else {
uuid = plot.owner; uuid = plot.guessOwner();
} }
} }
final PlotArea plotArea = plot.getArea(); final PlotArea plotArea = plot.getArea();
Expression<Double> priceExr = Expression<Double> priceExr = plotArea.PRICES.getOrDefault("merge", null);
plotArea.PRICES.containsKey("merge") ? plotArea.PRICES.get("merge") : null;
final int size = plot.getConnectedPlots().size(); final int size = plot.getConnectedPlots().size();
final double price = priceExr == null ? 0d : priceExr.evaluate((double) size); final double price = priceExr == null ? 0d : priceExr.evaluate((double) size);
if (EconHandler.manager != null && plotArea.USE_ECONOMY && price > 0d if (EconHandler.manager != null && plotArea.USE_ECONOMY && price > 0d
@ -155,25 +154,23 @@ public class Merge extends SubCommand {
} }
isOnline = true; isOnline = true;
final int dir = direction; final int dir = direction;
Runnable run = new Runnable() { Runnable run = () -> {
@Override public void run() { MainUtil.sendMessage(accepter, C.MERGE_ACCEPTED);
MainUtil.sendMessage(accepter, C.MERGE_ACCEPTED); plot.autoMerge(dir, maxSize - size, owner, terrain);
plot.autoMerge(dir, maxSize - size, owner, terrain); PlotPlayer plotPlayer = UUIDHandler.getPlayer(player.getUUID());
PlotPlayer plotPlayer = UUIDHandler.getPlayer(player.getUUID()); if (plotPlayer == null) {
if (plotPlayer == null) { sendMessage(accepter, C.MERGE_NOT_VALID);
sendMessage(accepter, C.MERGE_NOT_VALID); return;
}
if (EconHandler.manager != null && plotArea.USE_ECONOMY && price > 0d) {
if (EconHandler.manager.getMoney(player) < price) {
sendMessage(player, C.CANNOT_AFFORD_MERGE, String.valueOf(price));
return; return;
} }
if (EconHandler.manager != null && plotArea.USE_ECONOMY && price > 0d) { EconHandler.manager.withdrawMoney(player, price);
if (EconHandler.manager.getMoney(player) < price) { sendMessage(player, C.REMOVED_BALANCE, String.valueOf(price));
sendMessage(player, C.CANNOT_AFFORD_MERGE, String.valueOf(price));
return;
}
EconHandler.manager.withdrawMoney(player, price);
sendMessage(player, C.REMOVED_BALANCE, String.valueOf(price));
}
MainUtil.sendMessage(player, C.SUCCESS_MERGE);
} }
MainUtil.sendMessage(player, C.SUCCESS_MERGE);
}; };
if (hasConfirmation(player)) { if (hasConfirmation(player)) {
CmdConfirm.addPending(accepter, CmdConfirm.addPending(accepter,

View File

@ -54,11 +54,7 @@ import com.github.intellectualsites.plotsquared.plot.util.Permissions;
C.PLOTWORLD_INCOMPATIBLE.send(player); C.PLOTWORLD_INCOMPATIBLE.send(player);
return false; return false;
} }
if (plot1.move(plot2, new Runnable() { if (plot1.move(plot2, () -> MainUtil.sendMessage(player, C.MOVE_SUCCESS), false)) {
@Override public void run() {
MainUtil.sendMessage(player, C.MOVE_SUCCESS);
}
}, false)) {
return true; return true;
} else { } else {
MainUtil.sendMessage(player, C.REQUIRES_UNOWNED); MainUtil.sendMessage(player, C.REQUIRES_UNOWNED);

View File

@ -71,20 +71,17 @@ import java.util.UUID;
final String finalName = name; final String finalName = name;
final UUID finalUUID = uuid; final UUID finalUUID = uuid;
final boolean removeDenied = plot.isDenied(finalUUID); final boolean removeDenied = plot.isDenied(finalUUID);
Runnable run = new Runnable() { Runnable run = () -> {
@Override public void run() { if (plot.setOwner(finalUUID, player)) {
if (plot.setOwner(finalUUID, player)) { if (removeDenied)
if (removeDenied) plot.removeDenied(finalUUID);
plot.removeDenied(finalUUID); plot.setSign(finalName);
plot.setSign(finalName); MainUtil.sendMessage(player, C.SET_OWNER);
MainUtil.sendMessage(player, C.SET_OWNER); if (other != null) {
if (other != null) { MainUtil.sendMessage(other, C.NOW_OWNER, plot.getArea() + ";" + plot.getId());
MainUtil }
.sendMessage(other, C.NOW_OWNER, plot.getArea() + ";" + plot.getId()); } else
} MainUtil.sendMessage(player, C.SET_OWNER_CANCELLED);
} else
MainUtil.sendMessage(player, C.SET_OWNER_CANCELLED);
}
}; };
if (hasConfirmation(player)) { if (hasConfirmation(player)) {
CmdConfirm.addPending(player, "/plot set owner " + value, run); CmdConfirm.addPending(player, "/plot set owner " + value, run);

View File

@ -13,18 +13,16 @@ import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
category = CommandCategory.INFO) public class PluginCmd extends SubCommand { category = CommandCategory.INFO) public class PluginCmd extends SubCommand {
@Override public boolean onCommand(final PlotPlayer player, String[] args) { @Override public boolean onCommand(final PlotPlayer player, String[] args) {
TaskManager.IMP.taskAsync(new Runnable() { TaskManager.IMP.taskAsync(() -> {
@Override public void run() { MainUtil.sendMessage(player, String.format(
MainUtil.sendMessage(player, String.format( "$2>> $1&l" + PlotSquared.get().IMP.getPluginName() + " $2($1Version$2: $1%s$2)",
"$2>> $1&l" + PlotSquared.imp().getPluginName() + " $2($1Version$2: $1%s$2)", PlotSquared.get().getVersion()));
PlotSquared.get().getVersion())); MainUtil.sendMessage(player,
MainUtil.sendMessage(player, "$2>> $1&lAuthors$2: $1Citymonstret $2& $1Empire92 $2& $1MattBDev $2& $1dordsor21");
"$2>> $1&lAuthors$2: $1Citymonstret $2& $1Empire92 $2& $1MattBDev $2& $1dordsor21"); MainUtil.sendMessage(player,
MainUtil.sendMessage(player, "$2>> $1&lWiki$2: $1https://github.com/IntellectualCrafters/PlotSquared/wiki");
"$2>> $1&lWiki$2: $1https://github.com/IntellectualCrafters/PlotSquared/wiki"); MainUtil
MainUtil.sendMessage(player, .sendMessage(player, "$2>> $1&lNewest Version$2: $1" + getNewestVersionString());
"$2>> $1&lNewest Version$2: $1" + getNewestVersionString());
}
}); });
return true; return true;
} }

View File

@ -105,12 +105,10 @@ import java.util.UUID;
if (added != null && !plot.isAdded(added)) { if (added != null && !plot.isAdded(added)) {
continue; continue;
} }
if (unknown && UUIDHandler.getName(plot.owner) != null) { if (unknown && UUIDHandler.getName(plot.guessOwner()) != null) {
continue; continue;
} }
for (Plot current : plot.getConnectedPlots()) { toDelete.addAll(plot.getConnectedPlots());
toDelete.add(current);
}
} }
if (PlotSquared.get().plots_tmp != null) { if (PlotSquared.get().plots_tmp != null) {
for (Entry<String, HashMap<PlotId, Plot>> entry : PlotSquared.get().plots_tmp for (Entry<String, HashMap<PlotId, Plot>> entry : PlotSquared.get().plots_tmp
@ -130,7 +128,7 @@ import java.util.UUID;
if (added != null && !plot.isAdded(added)) { if (added != null && !plot.isAdded(added)) {
continue; continue;
} }
if (unknown && UUIDHandler.getName(plot.owner) != null) { if (unknown && UUIDHandler.getName(plot.guessOwner()) != null) {
continue; continue;
} }
toDelete.add(plot); toDelete.add(plot);
@ -143,23 +141,21 @@ import java.util.UUID;
} }
String cmd = String cmd =
"/plot purge " + StringMan.join(args, " ") + " (" + toDelete.size() + " plots)"; "/plot purge " + StringMan.join(args, " ") + " (" + toDelete.size() + " plots)";
Runnable run = new Runnable() { Runnable run = () -> {
@Override public void run() { PlotSquared.debug("Calculating plots to purge, please wait...");
PlotSquared.debug("Calculating plots to purge, please wait..."); HashSet<Integer> ids = new HashSet<>();
HashSet<Integer> ids = new HashSet<>(); for (Plot plot : toDelete) {
for (Plot plot : toDelete) { if (plot.temp != Integer.MAX_VALUE) {
if (plot.temp != Integer.MAX_VALUE) { ids.add(plot.temp);
ids.add(plot.temp); plot.getArea().removePlot(plot.getId());
plot.getArea().removePlot(plot.getId()); for (PlotPlayer pp : plot.getPlayersInPlot()) {
for (PlotPlayer pp : plot.getPlayersInPlot()) { PlotListener.plotEntry(pp, plot);
PlotListener.plotEntry(pp, plot);
}
plot.removeSign();
} }
plot.removeSign();
} }
DBFunc.purgeIds(ids);
C.PURGE_SUCCESS.send(player, ids.size() + "/" + toDelete.size());
} }
DBFunc.purgeIds(ids);
C.PURGE_SUCCESS.send(player, ids.size() + "/" + toDelete.size());
}; };
if (hasConfirmation(player)) { if (hasConfirmation(player)) {
CmdConfirm.addPending(player, cmd, run); CmdConfirm.addPending(player, cmd, run);

View File

@ -10,8 +10,11 @@ import com.github.intellectualsites.plotsquared.plot.flag.Flags;
import com.github.intellectualsites.plotsquared.plot.object.*; import com.github.intellectualsites.plotsquared.plot.object.*;
import com.github.intellectualsites.plotsquared.plot.util.*; import com.github.intellectualsites.plotsquared.plot.util.*;
import java.util.*; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.UUID;
@CommandDeclaration(command = "rate", permission = "plots.rate", description = "Rate the plot", @CommandDeclaration(command = "rate", permission = "plots.rate", description = "Rate the plot",
usage = "/plot rate [#|next|purge]", aliases = "rt", category = CommandCategory.INFO, usage = "/plot rate [#|next|purge]", aliases = "rt", category = CommandCategory.INFO,
@ -22,25 +25,23 @@ import java.util.Map.Entry;
switch (args[0].toLowerCase()) { switch (args[0].toLowerCase()) {
case "next": { case "next": {
ArrayList<Plot> plots = new ArrayList<>(PlotSquared.get().getBasePlots()); ArrayList<Plot> plots = new ArrayList<>(PlotSquared.get().getBasePlots());
Collections.sort(plots, new Comparator<Plot>() { Collections.sort(plots, (p1, p2) -> {
@Override public int compare(Plot p1, Plot p2) { double v1 = 0;
double v1 = 0; if (!p1.getRatings().isEmpty()) {
if (!p1.getRatings().isEmpty()) { for (Entry<UUID, Rating> entry : p1.getRatings().entrySet()) {
for (Entry<UUID, Rating> entry : p1.getRatings().entrySet()) { v1 -= 11 - entry.getValue().getAverageRating();
v1 -= 11 - entry.getValue().getAverageRating();
}
} }
double v2 = 0;
if (!p2.getRatings().isEmpty()) {
for (Entry<UUID, Rating> entry : p2.getRatings().entrySet()) {
v2 -= 11 - entry.getValue().getAverageRating();
}
}
if (v1 == v2) {
return -0;
}
return v2 > v1 ? 1 : -1;
} }
double v2 = 0;
if (!p2.getRatings().isEmpty()) {
for (Entry<UUID, Rating> entry : p2.getRatings().entrySet()) {
v2 -= 11 - entry.getValue().getAverageRating();
}
}
if (v1 == v2) {
return -0;
}
return v2 > v1 ? 1 : -1;
}); });
UUID uuid = player.getUUID(); UUID uuid = player.getUUID();
for (Plot p : plots) { for (Plot p : plots) {
@ -123,25 +124,23 @@ import java.util.Map.Entry;
return true; return true;
} }
}; };
inventory.setItem(0, new PlotItemStack(35, (short) 12, 0, "0/8")); inventory.setItem(0, new PlotItemStack("brown_wool", 0, "0/8"));
inventory.setItem(1, new PlotItemStack(35, (short) 14, 1, "1/8")); inventory.setItem(1, new PlotItemStack("red_wool", 1, "1/8"));
inventory.setItem(2, new PlotItemStack(35, (short) 1, 2, "2/8")); inventory.setItem(2, new PlotItemStack("orange_wool", 2, "2/8"));
inventory.setItem(3, new PlotItemStack(35, (short) 4, 3, "3/8")); inventory.setItem(3, new PlotItemStack("yellow_wool", 3, "3/8"));
inventory.setItem(4, new PlotItemStack(35, (short) 5, 4, "4/8")); inventory.setItem(4, new PlotItemStack("lime_wool", 4, "4/8"));
inventory.setItem(5, new PlotItemStack(35, (short) 9, 5, "5/8")); inventory.setItem(5, new PlotItemStack("cyan_wool", 5, "5/8"));
inventory.setItem(6, new PlotItemStack(35, (short) 11, 6, "6/8")); inventory.setItem(6, new PlotItemStack("blue_wool", 6, "6/8"));
inventory.setItem(7, new PlotItemStack(35, (short) 10, 7, "7/8")); inventory.setItem(7, new PlotItemStack("purple_wool", 7, "7/8"));
inventory.setItem(8, new PlotItemStack(35, (short) 2, 8, "8/8")); inventory.setItem(8, new PlotItemStack("magenta_wool", 8, "8/8"));
inventory.openInventory(); inventory.openInventory();
} }
}; };
if (plot.getSettings().ratings == null) { if (plot.getSettings().ratings == null) {
if (!Settings.Enabled_Components.RATING_CACHE) { if (!Settings.Enabled_Components.RATING_CACHE) {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { plot.getSettings().ratings = DBFunc.getRatings(plot);
plot.getSettings().ratings = DBFunc.getRatings(plot); run.run();
run.run();
}
}); });
return true; return true;
} }
@ -167,26 +166,22 @@ import java.util.Map.Entry;
return false; return false;
} }
final UUID uuid = player.getUUID(); final UUID uuid = player.getUUID();
final Runnable run = new Runnable() { final Runnable run = () -> {
@Override public void run() { if (plot.getRatings().containsKey(uuid)) {
if (plot.getRatings().containsKey(uuid)) { sendMessage(player, C.RATING_ALREADY_EXISTS, plot.getId().toString());
sendMessage(player, C.RATING_ALREADY_EXISTS, plot.getId().toString()); return;
return; }
} Rating result = EventUtil.manager.callRating(player, plot, new Rating(rating));
Rating result = EventUtil.manager.callRating(player, plot, new Rating(rating)); if (result != null) {
if (result != null) { plot.addRating(uuid, result);
plot.addRating(uuid, result); sendMessage(player, C.RATING_APPLIED, plot.getId().toString());
sendMessage(player, C.RATING_APPLIED, plot.getId().toString());
}
} }
}; };
if (plot.getSettings().ratings == null) { if (plot.getSettings().ratings == null) {
if (!Settings.Enabled_Components.RATING_CACHE) { if (!Settings.Enabled_Components.RATING_CACHE) {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { plot.getSettings().ratings = DBFunc.getRatings(plot);
plot.getSettings().ratings = DBFunc.getRatings(plot); run.run();
run.run();
}
}); });
return true; return true;
} }

View File

@ -7,8 +7,6 @@ import com.github.intellectualsites.plotsquared.plot.object.*;
import com.github.intellectualsites.plotsquared.plot.util.ChunkManager; import com.github.intellectualsites.plotsquared.plot.util.ChunkManager;
import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue; import com.github.intellectualsites.plotsquared.plot.util.block.LocalBlockQueue;
import java.util.HashSet;
@CommandDeclaration(command = "relight", description = "Relight your plot", usage = "/plot relight", @CommandDeclaration(command = "relight", description = "Relight your plot", usage = "/plot relight",
category = CommandCategory.DEBUG) public class Relight extends Command { category = CommandCategory.DEBUG) public class Relight extends Command {
public Relight() { public Relight() {
@ -23,17 +21,14 @@ import java.util.HashSet;
C.NOT_IN_PLOT.send(player); C.NOT_IN_PLOT.send(player);
return; return;
} }
HashSet<RegionWrapper> regions = plot.getRegions();
final LocalBlockQueue queue = plot.getArea().getQueue(false); final LocalBlockQueue queue = plot.getArea().getQueue(false);
ChunkManager.chunkTask(plot, new RunnableVal<int[]>() { ChunkManager.chunkTask(plot, new RunnableVal<int[]>() {
@Override public void run(int[] value) { @Override public void run(int[] value) {
queue.fixChunkLighting(value[0], value[1]); queue.fixChunkLighting(value[0], value[1]);
} }
}, new Runnable() { }, () -> {
@Override public void run() { plot.refreshChunks();
plot.refreshChunks(); C.SET_BLOCK_ACTION_FINISHED.send(player);
C.SET_BLOCK_ACTION_FINISHED.send(player);
}
}, 5); }, 5);
} }
} }

View File

@ -189,7 +189,6 @@ public class SchematicCmd extends SubCommand {
MainUtil.sendMessage(player, C.NO_PLOT_PERMS); MainUtil.sendMessage(player, C.NO_PLOT_PERMS);
return false; return false;
} }
location.getWorld();
Collection<Plot> plots = new ArrayList<>(); Collection<Plot> plots = new ArrayList<>();
plots.add(plot); plots.add(plot);
boolean result = SchematicHandler.manager.exportAll(plots, null, null, () -> { boolean result = SchematicHandler.manager.exportAll(plots, null, null, () -> {

View File

@ -58,8 +58,6 @@ import java.util.HashSet;
MainUtil.sendMessage(player, C.NEED_BLOCK); MainUtil.sendMessage(player, C.NEED_BLOCK);
return true; return true;
} }
String[] split = material.split(",");
// blocks = Configuration.BLOCKLIST.parseString(material);
try { try {
bucket = Configuration.BLOCK_BUCKET.parseString(material); bucket = Configuration.BLOCK_BUCKET.parseString(material);
@ -100,11 +98,7 @@ import java.util.HashSet;
current.setComponent(component, bucket); current.setComponent(component, bucket);
} }
MainUtil.sendMessage(player, C.GENERATING_COMPONENT); MainUtil.sendMessage(player, C.GENERATING_COMPONENT);
GlobalBlockQueue.IMP.addTask(new Runnable() { GlobalBlockQueue.IMP.addTask(() -> plot.removeRunning());
@Override public void run() {
plot.removeRunning();
}
});
return true; return true;
} }
} }
@ -114,8 +108,8 @@ import java.util.HashSet;
} }
public boolean noArgs(PlotPlayer player) { public boolean noArgs(PlotPlayer player) {
ArrayList<String> newValues = new ArrayList<>(); ArrayList<String> newValues =
newValues.addAll(Arrays.asList("biome", "alias", "home", "flag")); new ArrayList<>(Arrays.asList("biome", "alias", "home", "flag"));
Plot plot = player.getCurrentPlot(); Plot plot = player.getCurrentPlot();
if (plot != null) { if (plot != null) {
newValues.addAll( newValues.addAll(

View File

@ -25,7 +25,7 @@ import java.util.Map.Entry;
StringBuilder message = new StringBuilder(); StringBuilder message = new StringBuilder();
message.append("&6What generator do you want?"); message.append("&6What generator do you want?");
for (Entry<String, GeneratorWrapper<?>> entry : SetupUtils.generators.entrySet()) { for (Entry<String, GeneratorWrapper<?>> entry : SetupUtils.generators.entrySet()) {
if (entry.getKey().equals(PlotSquared.imp().getPluginName())) { if (entry.getKey().equals(PlotSquared.get().IMP.getPluginName())) {
message.append("\n&8 - &2").append(entry.getKey()).append(" (Default Generator)"); message.append("\n&8 - &2").append(entry.getKey()).append(" (Default Generator)");
} else if (entry.getValue().isFull()) { } else if (entry.getValue().isFull()) {
message.append("\n&8 - &7").append(entry.getKey()).append(" (Plot Generator)"); message.append("\n&8 - &7").append(entry.getKey()).append(" (Plot Generator)");
@ -73,8 +73,8 @@ import java.util.Map.Entry;
MainUtil.sendMessage(player, MainUtil.sendMessage(player,
"&cYou must choose a generator!" + prefix + StringMan "&cYou must choose a generator!" + prefix + StringMan
.join(SetupUtils.generators.keySet(), prefix) .join(SetupUtils.generators.keySet(), prefix)
.replaceAll(PlotSquared.imp().getPluginName(), .replaceAll(PlotSquared.get().IMP.getPluginName(),
"&2" + PlotSquared.imp().getPluginName())); "&2" + PlotSquared.get().IMP.getPluginName()));
sendMessage(player, C.SETUP_INIT); sendMessage(player, C.SETUP_INIT);
return false; return false;
} }
@ -142,7 +142,7 @@ import java.util.Map.Entry;
SetupUtils.generators.get(object.plotManager).getPlotGenerator() SetupUtils.generators.get(object.plotManager).getPlotGenerator()
.processSetup(object); .processSetup(object);
} else { } else {
object.plotManager = PlotSquared.imp().getPluginName(); object.plotManager = PlotSquared.get().IMP.getPluginName();
MainUtil.sendMessage(player, MainUtil.sendMessage(player,
"&c[WARNING] The specified generator does not identify as BukkitPlotGenerator"); "&c[WARNING] The specified generator does not identify as BukkitPlotGenerator");
MainUtil.sendMessage(player, MainUtil.sendMessage(player,
@ -282,7 +282,7 @@ import java.util.Map.Entry;
} }
MainUtil.sendMessage(player, MainUtil.sendMessage(player,
"&cThe world you specified already exists. After restarting, new terrain will use " "&cThe world you specified already exists. After restarting, new terrain will use "
+ PlotSquared.imp().getPluginName() + ", however you may need to " + PlotSquared.get().IMP.getPluginName() + ", however you may need to "
+ "reset the world for it to generate correctly!"); + "reset the world for it to generate correctly!");
} }
object.world = args[0]; object.world = args[0];
@ -318,7 +318,7 @@ import java.util.Map.Entry;
messages.add(new PlotMessage("What generator do you want?").color("$6")); messages.add(new PlotMessage("What generator do you want?").color("$6"));
for (Entry<String, GeneratorWrapper<?>> entry : SetupUtils.generators.entrySet()) { for (Entry<String, GeneratorWrapper<?>> entry : SetupUtils.generators.entrySet()) {
final PlotMessage plotMessage = new PlotMessage(" - ").color("$8"); final PlotMessage plotMessage = new PlotMessage(" - ").color("$8");
if (entry.getKey().equals(PlotSquared.imp().getPluginName())) { if (entry.getKey().equals(PlotSquared.get().IMP.getPluginName())) {
plotMessage.text(entry.getKey()).color("$8").tooltip("Select this generator") plotMessage.text(entry.getKey()).color("$8").tooltip("Select this generator")
.color("$2").command("/plot setup generator " + entry.getKey()) .color("$2").command("/plot setup generator " + entry.getKey())
.text(" (Default Generator)").color("$7"); .text(" (Default Generator)").color("$7");

View File

@ -40,11 +40,7 @@ public class Swap extends SubCommand {
C.PLOTWORLD_INCOMPATIBLE.send(player); C.PLOTWORLD_INCOMPATIBLE.send(player);
return false; return false;
} }
if (plot1.move(plot2, new Runnable() { if (plot1.move(plot2, () -> MainUtil.sendMessage(player, C.SWAP_SUCCESS), true)) {
@Override public void run() {
MainUtil.sendMessage(player, C.SWAP_SUCCESS);
}
}, true)) {
return true; return true;
} else { } else {
MainUtil.sendMessage(player, C.SWAP_OVERLAP); MainUtil.sendMessage(player, C.SWAP_OVERLAP);

View File

@ -15,7 +15,10 @@ import com.github.intellectualsites.plotsquared.plot.util.TaskManager;
import com.github.intellectualsites.plotsquared.plot.util.WorldUtil; import com.github.intellectualsites.plotsquared.plot.util.WorldUtil;
import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue; import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue;
import java.io.*; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Set; import java.util.Set;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream; import java.util.zip.ZipInputStream;
@ -63,9 +66,6 @@ import java.util.zip.ZipOutputStream;
zis.closeEntry(); zis.closeEntry();
} }
return true; return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
return false; return false;
@ -147,8 +147,8 @@ import java.util.zip.ZipOutputStream;
} catch (InvalidConfigurationException | IOException e) { } catch (InvalidConfigurationException | IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
String manager = String manager = worldConfig
worldConfig.getString("generator.plugin", PlotSquared.imp().getPluginName()); .getString("generator.plugin", PlotSquared.get().IMP.getPluginName());
String generator = worldConfig.getString("generator.init", manager); String generator = worldConfig.getString("generator.init", manager);
int type = worldConfig.getInt("generator.type"); int type = worldConfig.getInt("generator.type");
int terrain = worldConfig.getInt("generator.terrain"); int terrain = worldConfig.getInt("generator.terrain");
@ -161,11 +161,9 @@ import java.util.zip.ZipOutputStream;
setup.step = new ConfigurationNode[0]; setup.step = new ConfigurationNode[0];
setup.world = world; setup.world = world;
SetupUtils.manager.setupWorld(setup); SetupUtils.manager.setupWorld(setup);
GlobalBlockQueue.IMP.addTask(new Runnable() { GlobalBlockQueue.IMP.addTask(() -> {
@Override public void run() { MainUtil.sendMessage(player, "Done!");
MainUtil.sendMessage(player, "Done!"); player.teleport(WorldUtil.IMP.getSpawn(world));
player.teleport(WorldUtil.IMP.getSpawn(world));
}
}); });
return true; return true;
} }
@ -180,17 +178,15 @@ import java.util.zip.ZipOutputStream;
return false; return false;
} }
final PlotManager manager = area.getPlotManager(); final PlotManager manager = area.getPlotManager();
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { try {
try { manager.exportTemplate(area);
manager.exportTemplate(area); } catch (Exception e) { // Must recover from any exception thrown a third party template manager
} catch (Exception e) { // Must recover from any exception thrown a third party template manager e.printStackTrace();
e.printStackTrace(); MainUtil.sendMessage(player, "Failed: " + e.getMessage());
MainUtil.sendMessage(player, "Failed: " + e.getMessage()); return;
return;
}
MainUtil.sendMessage(player, "Done!");
} }
MainUtil.sendMessage(player, "Done!");
}); });
return true; return true;
default: default:

View File

@ -70,7 +70,7 @@ import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
RunnableVal3<Command, Runnable, Runnable> confirm, RunnableVal3<Command, Runnable, Runnable> confirm,
RunnableVal2<Command, CommandResult> whenDone) { RunnableVal2<Command, CommandResult> whenDone) {
PlotArea area = player.getApplicablePlotArea(); PlotArea area = player.getApplicablePlotArea();
boolean chat = area == null ? false : area.PLOT_CHAT; boolean chat = area != null && area.PLOT_CHAT;
if (toggle(player, "disabletitles") != chat) { if (toggle(player, "disabletitles") != chat) {
MainUtil.sendMessage(player, C.TOGGLE_ENABLED, command.toString()); MainUtil.sendMessage(player, C.TOGGLE_ENABLED, command.toString());
} else { } else {

View File

@ -95,8 +95,7 @@ import java.util.Set;
return false; return false;
} }
MainUtil.sendMessage(null, "Collecting region data..."); MainUtil.sendMessage(null, "Collecting region data...");
ArrayList<Plot> plots = new ArrayList<>(); ArrayList<Plot> plots = new ArrayList<>(PlotSquared.get().getPlots(world));
plots.addAll(PlotSquared.get().getPlots(world));
if (ExpireManager.IMP != null) { if (ExpireManager.IMP != null) {
plots.removeAll(ExpireManager.IMP.getPendingExpired()); plots.removeAll(ExpireManager.IMP.getPendingExpired());
} }
@ -198,11 +197,9 @@ import java.util.Set;
} }
}; };
} else { } else {
regenTask = new Runnable() { regenTask = () -> {
@Override public void run() { Trim.TASK = false;
Trim.TASK = false; player.sendMessage("Trim done!");
player.sendMessage("Trim done!");
}
}; };
} }
ChunkManager.manager.deleteRegionFiles(world, viable, regenTask); ChunkManager.manager.deleteRegionFiles(world, viable, regenTask);

View File

@ -39,14 +39,12 @@ import com.github.intellectualsites.plotsquared.plot.util.*;
} else { } else {
createRoad = true; createRoad = true;
} }
Runnable runnable = new Runnable() { Runnable runnable = () -> {
@Override public void run() { if (!plot.unlinkPlot(createRoad, createRoad)) {
if (!plot.unlinkPlot(createRoad, createRoad)) { MainUtil.sendMessage(player, "&cUnlink has been cancelled");
MainUtil.sendMessage(player, "&cUnlink has been cancelled"); return;
return;
}
MainUtil.sendMessage(player, C.UNLINK_SUCCESS);
} }
MainUtil.sendMessage(player, C.UNLINK_SUCCESS);
}; };
if (hasConfirmation(player)) { if (hasConfirmation(player)) {
CmdConfirm.addPending(player, "/plot unlink " + plot.getId(), runnable); CmdConfirm.addPending(player, "/plot unlink " + plot.getId(), runnable);

View File

@ -915,18 +915,16 @@ public enum C {
return m; return m;
} }
Map<String, String> map = new LinkedHashMap<>(); Map<String, String> map = new LinkedHashMap<>();
if (args.length > 0) { for (int i = args.length - 1; i >= 0; i--) {
for (int i = args.length - 1; i >= 0; i--) { String arg = "" + args[i];
String arg = "" + args[i]; if (arg.isEmpty()) {
if (arg == null || arg.isEmpty()) { map.put("%s" + i, "");
map.put("%s" + i, ""); } else {
} else { arg = C.color(arg);
arg = C.color(arg); map.put("%s" + i, arg);
map.put("%s" + i, arg); }
} if (i == 0) {
if (i == 0) { map.put("%s", arg);
map.put("%s", arg);
}
} }
} }
m = StringMan.replaceFromMap(m, map); m = StringMan.replaceFromMap(m, map);

View File

@ -120,7 +120,8 @@ public class Config {
* @param clazz * @param clazz
* @return * @return
*/ */
public static Map<String, Object> getFields(Class clazz) { public static Map<String, Object> getFields(
Class<? extends Settings.Enabled_Components> clazz) {
HashMap<String, Object> map = new HashMap<>(); HashMap<String, Object> map = new HashMap<>();
for (Field field : clazz.getFields()) { for (Field field : clazz.getFields()) {
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) { if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
@ -142,7 +143,8 @@ public class Config {
} }
StringBuilder m = new StringBuilder(); StringBuilder m = new StringBuilder();
for (Object obj : listValue) { for (Object obj : listValue) {
m.append(System.lineSeparator() + spacing + "- " + toYamlString(obj, spacing)); m.append(System.lineSeparator()).append(spacing).append("- ")
.append(toYamlString(obj, spacing));
} }
return m.toString(); return m.toString();
} }
@ -176,7 +178,7 @@ public class Config {
if (value == null && field.getType() != ConfigBlock.class) { if (value == null && field.getType() != ConfigBlock.class) {
setAccessible(field); setAccessible(field);
Class<?>[] classes = clazz.getDeclaredClasses(); Class<?>[] classes = clazz.getDeclaredClasses();
for (Class current : classes) { for (Class<? extends Object> current : classes) {
if (StringMan.isEqual(current.getSimpleName(), field.getName())) { if (StringMan.isEqual(current.getSimpleName(), field.getName())) {
field.set(instance, current.newInstance()); field.set(instance, current.newInstance());
break; break;

View File

@ -45,7 +45,7 @@ public class MySQL extends Database {
return this.connection; return this.connection;
} }
@Override public Connection openConnection() throws SQLException, ClassNotFoundException { @Override public Connection openConnection() throws SQLException {
if (checkConnection()) { if (checkConnection()) {
return this.connection; return this.connection;
} }
@ -69,7 +69,7 @@ public class MySQL extends Database {
return true; return true;
} }
@Override public ResultSet querySQL(String query) throws SQLException, ClassNotFoundException { @Override public ResultSet querySQL(String query) throws SQLException {
if (checkConnection()) { if (checkConnection()) {
openConnection(); openConnection();
} }
@ -78,7 +78,7 @@ public class MySQL extends Database {
} }
} }
@Override public int updateSQL(String query) throws SQLException, ClassNotFoundException { @Override public int updateSQL(String query) throws SQLException {
if (checkConnection()) { if (checkConnection()) {
openConnection(); openConnection();
} }

View File

@ -121,42 +121,40 @@ import java.util.concurrent.atomic.AtomicInteger;
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { long last = System.currentTimeMillis();
long last = System.currentTimeMillis(); while (true) {
while (true) { if (SQLManager.this.closed) {
if (SQLManager.this.closed) { break;
break; }
boolean hasTask =
!globalTasks.isEmpty() || !playerTasks.isEmpty() || !plotTasks.isEmpty()
|| !clusterTasks.isEmpty();
if (hasTask) {
if (SQLManager.this.mySQL && System.currentTimeMillis() - last > 550000
|| !isValid()) {
last = System.currentTimeMillis();
reconnect();
} }
boolean hasTask = if (!sendBatch()) {
!globalTasks.isEmpty() || !playerTasks.isEmpty() || !plotTasks.isEmpty()
|| !clusterTasks.isEmpty();
if (hasTask) {
if (SQLManager.this.mySQL && System.currentTimeMillis() - last > 550000
|| !isValid()) {
last = System.currentTimeMillis();
reconnect();
}
if (!sendBatch()) {
try {
if (!getNotifyTasks().isEmpty()) {
for (Runnable task : getNotifyTasks()) {
TaskManager.runTask(task);
}
getNotifyTasks().clear();
}
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} else {
try { try {
Thread.sleep(1000); if (!getNotifyTasks().isEmpty()) {
for (Runnable task : getNotifyTasks()) {
TaskManager.runTask(task);
}
getNotifyTasks().clear();
}
Thread.sleep(50);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} else {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} }
} }
}); });
@ -515,92 +513,74 @@ import java.util.concurrent.atomic.AtomicInteger;
} }
@Override public void createPlotsAndData(final List<Plot> myList, final Runnable whenDone) { @Override public void createPlotsAndData(final List<Plot> myList, final Runnable whenDone) {
addGlobalTask(new Runnable() { addGlobalTask(() -> {
@Override public void run() { try {
try { // Create the plots
// Create the plots createPlots(myList, () -> {
createPlots(myList, new Runnable() { try {
@Override public void run() { // Creating datastructures
try { HashMap<PlotId, Plot> plotMap = new HashMap<>();
// Creating datastructures for (Plot plot : myList) {
HashMap<PlotId, Plot> plotMap = new HashMap<>(); plotMap.put(plot.getId(), plot);
for (Plot plot : myList) { }
plotMap.put(plot.getId(), plot); ArrayList<SettingsPair> settings = new ArrayList<>();
} final ArrayList<UUIDPair> helpers = new ArrayList<>();
ArrayList<SettingsPair> settings = new ArrayList<>(); final ArrayList<UUIDPair> trusted = new ArrayList<>();
final ArrayList<UUIDPair> helpers = new ArrayList<>(); final ArrayList<UUIDPair> denied = new ArrayList<>();
final ArrayList<UUIDPair> trusted = new ArrayList<>();
final ArrayList<UUIDPair> denied = new ArrayList<>();
// Populating structures // Populating structures
try (PreparedStatement stmt = SQLManager.this.connection try (PreparedStatement stmt = SQLManager.this.connection
.prepareStatement(SQLManager.this.GET_ALL_PLOTS); .prepareStatement(SQLManager.this.GET_ALL_PLOTS);
ResultSet result = stmt.executeQuery()) { ResultSet result = stmt.executeQuery()) {
while (result.next()) { while (result.next()) {
int id = result.getInt("id"); int id = result.getInt("id");
int x = result.getInt("plot_id_x"); int x = result.getInt("plot_id_x");
int y = result.getInt("plot_id_z"); int y = result.getInt("plot_id_z");
PlotId plotId = new PlotId(x, y); PlotId plotId = new PlotId(x, y);
Plot plot = plotMap.get(plotId); Plot plot = plotMap.get(plotId);
if (plot != null) { if (plot != null) {
settings.add(new SettingsPair(id, plot.getSettings())); settings.add(new SettingsPair(id, plot.getSettings()));
for (UUID uuid : plot.getDenied()) { for (UUID uuid : plot.getDenied()) {
denied.add(new UUIDPair(id, uuid)); denied.add(new UUIDPair(id, uuid));
}
for (UUID uuid : plot.getMembers()) {
trusted.add(new UUIDPair(id, uuid));
}
for (UUID uuid : plot.getTrusted()) {
helpers.add(new UUIDPair(id, uuid));
}
}
} }
} for (UUID uuid : plot.getMembers()) {
createSettings(settings, new Runnable() { trusted.add(new UUIDPair(id, uuid));
@Override public void run() { }
createTiers(helpers, "helpers", new Runnable() { for (UUID uuid : plot.getTrusted()) {
@Override public void run() { helpers.add(new UUIDPair(id, uuid));
createTiers(trusted, "trusted", new Runnable() {
@Override public void run() {
createTiers(denied, "denied",
new Runnable() {
@Override public void run() {
try {
SQLManager.this.connection
.commit();
} catch (SQLException e) {
e.printStackTrace();
}
if (whenDone != null) {
whenDone.run();
}
}
});
}
});
}
});
} }
});
} catch (SQLException e) {
e.printStackTrace();
PlotSquared.debug("&7[WARN] Failed to set all helpers for plots");
try {
SQLManager.this.connection.commit();
} catch (SQLException e1) {
e1.printStackTrace();
} }
} }
} }
}); createSettings(settings, () -> createTiers(helpers, "helpers",
} catch (Exception e) { () -> createTiers(trusted, "trusted",
e.printStackTrace(); () -> createTiers(denied, "denied", () -> {
PlotSquared.debug("&7[WARN] Failed to set all helpers for plots"); try {
try { SQLManager.this.connection.commit();
SQLManager.this.connection.commit(); } catch (SQLException e) {
} catch (SQLException e1) { e.printStackTrace();
e1.printStackTrace(); }
if (whenDone != null) {
whenDone.run();
}
}))));
} catch (SQLException e) {
e.printStackTrace();
PlotSquared.debug("&7[WARN] Failed to set all helpers for plots");
try {
SQLManager.this.connection.commit();
} catch (SQLException e1) {
e1.printStackTrace();
}
} }
});
} catch (Exception e) {
e.printStackTrace();
PlotSquared.debug("&7[WARN] Failed to set all helpers for plots");
try {
SQLManager.this.connection.commit();
} catch (SQLException e1) {
e1.printStackTrace();
} }
} }
}); });
@ -676,7 +656,7 @@ import java.util.concurrent.atomic.AtomicInteger;
stmt.setInt(i * 5 + 1, plot.getId().x); stmt.setInt(i * 5 + 1, plot.getId().x);
stmt.setInt(i * 5 + 2, plot.getId().y); stmt.setInt(i * 5 + 2, plot.getId().y);
try { try {
stmt.setString(i * 5 + 3, plot.owner.toString()); stmt.setString(i * 5 + 3, plot.guessOwner().toString());
} catch (SQLException ignored) { } catch (SQLException ignored) {
stmt.setString(i * 5 + 3, everyone.toString()); stmt.setString(i * 5 + 3, everyone.toString());
} }
@ -690,7 +670,7 @@ import java.util.concurrent.atomic.AtomicInteger;
stmt.setInt(i * 6 + 2, plot.getId().x); stmt.setInt(i * 6 + 2, plot.getId().x);
stmt.setInt(i * 6 + 3, plot.getId().y); stmt.setInt(i * 6 + 3, plot.getId().y);
try { try {
stmt.setString(i * 6 + 4, plot.owner.toString()); stmt.setString(i * 6 + 4, plot.guessOwner().toString());
} catch (SQLException ignored) { } catch (SQLException ignored) {
stmt.setString(i * 6 + 4, everyone.toString()); stmt.setString(i * 6 + 4, everyone.toString());
} }
@ -701,7 +681,7 @@ import java.util.concurrent.atomic.AtomicInteger;
@Override public void setSQL(PreparedStatement stmt, Plot plot) throws SQLException { @Override public void setSQL(PreparedStatement stmt, Plot plot) throws SQLException {
stmt.setInt(1, plot.getId().x); stmt.setInt(1, plot.getId().x);
stmt.setInt(2, plot.getId().y); stmt.setInt(2, plot.getId().y);
stmt.setString(3, plot.owner.toString()); stmt.setString(3, plot.guessOwner().toString());
stmt.setString(4, plot.getArea().toString()); stmt.setString(4, plot.getArea().toString());
stmt.setTimestamp(5, new Timestamp(plot.getTimestamp())); stmt.setTimestamp(5, new Timestamp(plot.getTimestamp()));
@ -929,11 +909,7 @@ import java.util.concurrent.atomic.AtomicInteger;
stmt.setInt(1, pair.id); stmt.setInt(1, pair.id);
} }
}; };
addGlobalTask(new Runnable() { addGlobalTask(() -> setBulk(myList, mod, whenDone));
@Override public void run() {
setBulk(myList, mod, whenDone);
}
});
} }
public void createEmptySettings(final ArrayList<Integer> myList, final Runnable whenDone) { public void createEmptySettings(final ArrayList<Integer> myList, final Runnable whenDone) {
@ -977,20 +953,15 @@ import java.util.concurrent.atomic.AtomicInteger;
stmt.setInt(1, id); stmt.setInt(1, id);
} }
}; };
addGlobalTask(new Runnable() { addGlobalTask(() -> setBulk(myList, mod, whenDone));
@Override public void run() {
setBulk(myList, mod, whenDone);
}
});
} }
public void createPlotSafe(final Plot plot, final Runnable success, final Runnable failure) { public void createPlotSafe(final Plot plot, final Runnable success, final Runnable failure) {
final long timestamp = plot.getTimestamp();
addPlotTask(plot, new UniqueStatement("createPlotSafe_" + plot.hashCode()) { addPlotTask(plot, new UniqueStatement("createPlotSafe_" + plot.hashCode()) {
@Override public void set(PreparedStatement stmt) throws SQLException { @Override public void set(PreparedStatement stmt) throws SQLException {
stmt.setInt(1, plot.getId().x); stmt.setInt(1, plot.getId().x);
stmt.setInt(2, plot.getId().y); stmt.setInt(2, plot.getId().y);
stmt.setString(3, plot.owner.toString()); stmt.setString(3, plot.guessOwner().toString());
stmt.setString(4, plot.getArea().toString()); stmt.setString(4, plot.getArea().toString());
stmt.setTimestamp(5, new Timestamp(plot.getTimestamp())); stmt.setTimestamp(5, new Timestamp(plot.getTimestamp()));
stmt.setString(6, plot.getArea().toString()); stmt.setString(6, plot.getArea().toString());
@ -1057,7 +1028,7 @@ import java.util.concurrent.atomic.AtomicInteger;
@Override public void set(PreparedStatement stmt) throws SQLException { @Override public void set(PreparedStatement stmt) throws SQLException {
stmt.setInt(1, plot.getId().x); stmt.setInt(1, plot.getId().x);
stmt.setInt(2, plot.getId().y); stmt.setInt(2, plot.getId().y);
stmt.setString(3, plot.owner.toString()); stmt.setString(3, plot.guessOwner().toString());
stmt.setString(4, plot.getArea().toString()); stmt.setString(4, plot.getArea().toString());
stmt.setTimestamp(5, new Timestamp(plot.getTimestamp())); stmt.setTimestamp(5, new Timestamp(plot.getTimestamp()));
} }
@ -1351,7 +1322,7 @@ import java.util.concurrent.atomic.AtomicInteger;
@Override public void delete(final Plot plot) { @Override public void delete(final Plot plot) {
PlotSquared.debug( PlotSquared.debug(
"Deleting plot... Id: " + plot.getId() + " World: " + plot.getWorldName() + " Owner: " "Deleting plot... Id: " + plot.getId() + " World: " + plot.getWorldName() + " Owner: "
+ plot.owner + " Index: " + plot.temp); + plot.guessOwner() + " Index: " + plot.temp);
deleteSettings(plot); deleteSettings(plot);
deleteDenied(plot); deleteDenied(plot);
deleteHelpers(plot); deleteHelpers(plot);
@ -1379,7 +1350,7 @@ import java.util.concurrent.atomic.AtomicInteger;
@Override public void createPlotSettings(final int id, Plot plot) { @Override public void createPlotSettings(final int id, Plot plot) {
PlotSquared.debug( PlotSquared.debug(
"Creating plot... Id: " + plot.getId() + " World: " + plot.getWorldName() + " Owner: " "Creating plot... Id: " + plot.getId() + " World: " + plot.getWorldName() + " Owner: "
+ plot.owner + " Index: " + id); + plot.guessOwner() + " Index: " + id);
addPlotTask(plot, new UniqueStatement("createPlotSettings") { addPlotTask(plot, new UniqueStatement("createPlotSettings") {
@Override public void set(PreparedStatement stmt) throws SQLException { @Override public void set(PreparedStatement stmt) throws SQLException {
stmt.setInt(1, id); stmt.setInt(1, id);
@ -1685,8 +1656,8 @@ import java.util.concurrent.atomic.AtomicInteger;
time = System.currentTimeMillis() + id; time = System.currentTimeMillis() + id;
} }
} }
Plot p = new Plot(plot_id, user, new HashSet<UUID>(), new HashSet<UUID>(), Plot p = new Plot(plot_id, user, new HashSet<>(), new HashSet<>(),
new HashSet<UUID>(), "", null, null, null, new HashSet<>(), "", null, null, null,
new boolean[] {false, false, false, false}, time, id); new boolean[] {false, false, false, false}, time, id);
HashMap<PlotId, Plot> map = newPlots.get(areaid); HashMap<PlotId, Plot> map = newPlots.get(areaid);
if (map != null) { if (map != null) {
@ -2036,103 +2007,96 @@ import java.util.concurrent.atomic.AtomicInteger;
* Purge all plots with the following database IDs * Purge all plots with the following database IDs
*/ */
@Override public void purgeIds(final Set<Integer> uniqueIds) { @Override public void purgeIds(final Set<Integer> uniqueIds) {
addGlobalTask(new Runnable() { addGlobalTask(() -> {
@Override public void run() { if (!uniqueIds.isEmpty()) {
if (!uniqueIds.isEmpty()) { try {
try { ArrayList<Integer> uniqueIdsList = new ArrayList<>(uniqueIds);
ArrayList<Integer> uniqueIdsList = new ArrayList<Integer>(uniqueIds); String stmt_prefix = "";
String stmt_prefix = ""; int size = uniqueIdsList.size();
int size = uniqueIdsList.size(); int packet = 990;
int packet = 990; int amount = size / packet;
int amount = size / packet; for (int j = 0; j <= amount; j++) {
int count = 0; PlotSquared.debug("Purging " + (j * packet) + " / " + size);
int last = -1; List<Integer> subList =
for (int j = 0; j <= amount; j++) { uniqueIdsList.subList(j * packet, Math.min(size, (j + 1) * packet));
PlotSquared.debug("Purging " + (j * packet) + " / " + size); if (subList.isEmpty()) {
List<Integer> subList = break;
uniqueIdsList.subList(j * packet, Math.min(size, (j + 1) * packet));
if (subList.isEmpty()) {
break;
}
StringBuilder idstr2 = new StringBuilder("");
stmt_prefix = "";
for (Integer id : subList) {
idstr2.append(stmt_prefix).append(id);
stmt_prefix = " OR `id` = ";
}
stmt_prefix = "";
StringBuilder idstr = new StringBuilder();
for (Integer id : subList) {
idstr.append(stmt_prefix).append(id);
stmt_prefix = " OR `plot_plot_id` = ";
}
PreparedStatement stmt = SQLManager.this.connection.prepareStatement(
"DELETE FROM `" + SQLManager.this.prefix
+ "plot_helpers` WHERE `plot_plot_id` = " + idstr);
stmt.executeUpdate();
stmt.close();
stmt = SQLManager.this.connection.prepareStatement(
"DELETE FROM `" + SQLManager.this.prefix
+ "plot_denied` WHERE `plot_plot_id` = " + idstr);
stmt.executeUpdate();
stmt.close();
stmt = SQLManager.this.connection.prepareStatement(
"DELETE FROM `" + SQLManager.this.prefix
+ "plot_settings` WHERE `plot_plot_id` = " + idstr);
stmt.executeUpdate();
stmt.close();
stmt = SQLManager.this.connection.prepareStatement(
"DELETE FROM `" + SQLManager.this.prefix
+ "plot_trusted` WHERE `plot_plot_id` = " + idstr);
stmt.executeUpdate();
stmt.close();
stmt = SQLManager.this.connection.prepareStatement(
"DELETE FROM `" + SQLManager.this.prefix + "plot` WHERE `id` = "
+ idstr2);
stmt.executeUpdate();
stmt.close();
commit();
} }
} catch (SQLException e) { StringBuilder idstr2 = new StringBuilder("");
e.printStackTrace(); stmt_prefix = "";
PlotSquared.debug("&c[ERROR] FAILED TO PURGE PLOTS!"); for (Integer id : subList) {
return; idstr2.append(stmt_prefix).append(id);
stmt_prefix = " OR `id` = ";
}
stmt_prefix = "";
StringBuilder idstr = new StringBuilder();
for (Integer id : subList) {
idstr.append(stmt_prefix).append(id);
stmt_prefix = " OR `plot_plot_id` = ";
}
PreparedStatement stmt = SQLManager.this.connection.prepareStatement(
"DELETE FROM `" + SQLManager.this.prefix
+ "plot_helpers` WHERE `plot_plot_id` = " + idstr);
stmt.executeUpdate();
stmt.close();
stmt = SQLManager.this.connection.prepareStatement(
"DELETE FROM `" + SQLManager.this.prefix
+ "plot_denied` WHERE `plot_plot_id` = " + idstr);
stmt.executeUpdate();
stmt.close();
stmt = SQLManager.this.connection.prepareStatement(
"DELETE FROM `" + SQLManager.this.prefix
+ "plot_settings` WHERE `plot_plot_id` = " + idstr);
stmt.executeUpdate();
stmt.close();
stmt = SQLManager.this.connection.prepareStatement(
"DELETE FROM `" + SQLManager.this.prefix
+ "plot_trusted` WHERE `plot_plot_id` = " + idstr);
stmt.executeUpdate();
stmt.close();
stmt = SQLManager.this.connection.prepareStatement(
"DELETE FROM `" + SQLManager.this.prefix + "plot` WHERE `id` = "
+ idstr2);
stmt.executeUpdate();
stmt.close();
commit();
} }
} catch (SQLException e) {
e.printStackTrace();
PlotSquared.debug("&c[ERROR] FAILED TO PURGE PLOTS!");
return;
} }
PlotSquared.debug("&6[INFO] SUCCESSFULLY PURGED " + uniqueIds.size() + " PLOTS!");
} }
PlotSquared.debug("&6[INFO] SUCCESSFULLY PURGED " + uniqueIds.size() + " PLOTS!");
}); });
} }
@Override public void purge(final PlotArea area, final Set<PlotId> plots) { @Override public void purge(final PlotArea area, final Set<PlotId> plots) {
addGlobalTask(new Runnable() { addGlobalTask(() -> {
@Override public void run() { try (PreparedStatement stmt = SQLManager.this.connection.prepareStatement(
try (PreparedStatement stmt = SQLManager.this.connection.prepareStatement( "SELECT `id`, `plot_id_x`, `plot_id_z` FROM `" + SQLManager.this.prefix
"SELECT `id`, `plot_id_x`, `plot_id_z` FROM `" + SQLManager.this.prefix + "plot` WHERE `world` = ?")) {
+ "plot` WHERE `world` = ?")) { stmt.setString(1, area.toString());
stmt.setString(1, area.toString()); Set<Integer> ids;
Set<Integer> ids; try (ResultSet r = stmt.executeQuery()) {
try (ResultSet r = stmt.executeQuery()) { ids = new HashSet<>();
ids = new HashSet<>(); while (r.next()) {
while (r.next()) { PlotId plot_id = new PlotId(r.getInt("plot_id_x"), r.getInt("plot_id_z"));
PlotId plot_id = if (plots.contains(plot_id)) {
new PlotId(r.getInt("plot_id_x"), r.getInt("plot_id_z")); ids.add(r.getInt("id"));
if (plots.contains(plot_id)) {
ids.add(r.getInt("id"));
}
} }
} }
purgeIds(ids);
} catch (SQLException e) {
e.printStackTrace();
PlotSquared.debug("&c[ERROR] FAILED TO PURGE AREA '" + area + "'!");
}
for (Iterator<PlotId> iterator = plots.iterator(); iterator.hasNext(); ) {
PlotId plotId = iterator.next();
iterator.remove();
PlotId id = new PlotId(plotId.x, plotId.y);
area.removePlot(id);
} }
purgeIds(ids);
} catch (SQLException e) {
e.printStackTrace();
PlotSquared.debug("&c[ERROR] FAILED TO PURGE AREA '" + area + "'!");
}
for (Iterator<PlotId> iterator = plots.iterator(); iterator.hasNext(); ) {
PlotId plotId = iterator.next();
iterator.remove();
PlotId id = new PlotId(plotId.x, plotId.y);
area.removePlot(id);
} }
}); });
} }
@ -2523,11 +2487,7 @@ import java.util.concurrent.atomic.AtomicInteger;
} }
resultSet.close(); resultSet.close();
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> result.run(metaMap));
@Override public void run() {
result.run(metaMap);
}
});
} }
}); });
@ -2591,11 +2551,8 @@ import java.util.concurrent.atomic.AtomicInteger;
} }
cluster = new PlotCluster(null, pos1, pos2, user, id); cluster = new PlotCluster(null, pos1, pos2, user, id);
clusters.put(id, cluster); clusters.put(id, cluster);
Set<PlotCluster> set = newClusters.get(areaid); Set<PlotCluster> set =
if (set == null) { newClusters.computeIfAbsent(areaid, k -> new HashSet<>());
set = new HashSet<>();
newClusters.put(areaid, set);
}
set.add(cluster); set.add(cluster);
} }
//Getting helpers //Getting helpers
@ -2973,10 +2930,10 @@ import java.util.concurrent.atomic.AtomicInteger;
continue; continue;
} }
// owner // owner
if (!plot.owner.equals(dataPlot.owner)) { if (!plot.guessOwner().equals(dataPlot.guessOwner())) {
PlotSquared PlotSquared.debug(
.debug("&8 - &7Setting owner: " + plot + " -> " + MainUtil.getName(plot.owner)); "&8 - &7Setting owner: " + plot + " -> " + MainUtil.getName(plot.guessOwner()));
setOwner(plot, plot.owner); setOwner(plot, plot.guessOwner());
} }
// trusted // trusted
if (!plot.getTrusted().equals(dataPlot.getTrusted())) { if (!plot.getTrusted().equals(dataPlot.getTrusted())) {
@ -3069,87 +3026,83 @@ import java.util.concurrent.atomic.AtomicInteger;
@Override @Override
public void replaceWorld(final String oldWorld, final String newWorld, final PlotId min, public void replaceWorld(final String oldWorld, final String newWorld, final PlotId min,
final PlotId max) { final PlotId max) {
addGlobalTask(new Runnable() { addGlobalTask(() -> {
@Override public void run() { if (min == null) {
if (min == null) { try (PreparedStatement stmt = SQLManager.this.connection.prepareStatement(
try (PreparedStatement stmt = SQLManager.this.connection.prepareStatement( "UPDATE `" + SQLManager.this.prefix
"UPDATE `" + SQLManager.this.prefix + "plot` SET `world` = ? WHERE `world` = ?")) {
+ "plot` SET `world` = ? WHERE `world` = ?")) { stmt.setString(1, newWorld);
stmt.setString(1, newWorld); stmt.setString(2, oldWorld);
stmt.setString(2, oldWorld); stmt.executeUpdate();
stmt.executeUpdate(); } catch (SQLException e) {
} catch (SQLException e) { e.printStackTrace();
e.printStackTrace(); }
} try (PreparedStatement stmt = SQLManager.this.connection.prepareStatement(
try (PreparedStatement stmt = SQLManager.this.connection.prepareStatement( "UPDATE `" + SQLManager.this.prefix
"UPDATE `" + SQLManager.this.prefix + "cluster` SET `world` = ? WHERE `world` = ?")) {
+ "cluster` SET `world` = ? WHERE `world` = ?")) { stmt.setString(1, newWorld);
stmt.setString(1, newWorld); stmt.setString(2, oldWorld);
stmt.setString(2, oldWorld); stmt.executeUpdate();
stmt.executeUpdate(); } catch (SQLException e) {
} catch (SQLException e) { e.printStackTrace();
e.printStackTrace(); }
} } else {
} else { try (PreparedStatement stmt = SQLManager.this.connection.prepareStatement(
try (PreparedStatement stmt = SQLManager.this.connection.prepareStatement( "UPDATE `" + SQLManager.this.prefix
"UPDATE `" + SQLManager.this.prefix + "plot` SET `world` = ? WHERE `world` = ? AND `plot_id_x` BETWEEN ? AND ? AND `plot_id_z` BETWEEN ? AND ?")) {
+ "plot` SET `world` = ? WHERE `world` = ? AND `plot_id_x` BETWEEN ? AND ? AND `plot_id_z` BETWEEN ? AND ?")) { stmt.setString(1, newWorld);
stmt.setString(1, newWorld); stmt.setString(2, oldWorld);
stmt.setString(2, oldWorld); stmt.setInt(3, min.x);
stmt.setInt(3, min.x); stmt.setInt(4, max.x);
stmt.setInt(4, max.x); stmt.setInt(5, min.y);
stmt.setInt(5, min.y); stmt.setInt(6, max.y);
stmt.setInt(6, max.y); stmt.executeUpdate();
stmt.executeUpdate(); } catch (SQLException e) {
} catch (SQLException e) { e.printStackTrace();
e.printStackTrace(); }
} try (PreparedStatement stmt = SQLManager.this.connection.prepareStatement(
try (PreparedStatement stmt = SQLManager.this.connection.prepareStatement( "UPDATE `" + SQLManager.this.prefix
"UPDATE `" + SQLManager.this.prefix + "cluster` SET `world` = ? WHERE `world` = ? AND `pos1_x` <= ? AND `pos1_z` <= ? AND `pos2_x` >= ? AND `pos2_z` >= ?")) {
+ "cluster` SET `world` = ? WHERE `world` = ? AND `pos1_x` <= ? AND `pos1_z` <= ? AND `pos2_x` >= ? AND `pos2_z` >= ?")) { stmt.setString(1, newWorld);
stmt.setString(1, newWorld); stmt.setString(2, oldWorld);
stmt.setString(2, oldWorld); stmt.setInt(3, max.x);
stmt.setInt(3, max.x); stmt.setInt(4, max.y);
stmt.setInt(4, max.y); stmt.setInt(5, min.x);
stmt.setInt(5, min.x); stmt.setInt(6, min.y);
stmt.setInt(6, min.y); stmt.executeUpdate();
stmt.executeUpdate(); } catch (SQLException e) {
} catch (SQLException e) { e.printStackTrace();
e.printStackTrace();
}
} }
} }
}); });
} }
@Override public void replaceUUID(final UUID old, final UUID now) { @Override public void replaceUUID(final UUID old, final UUID now) {
addGlobalTask(new Runnable() { addGlobalTask(() -> {
@Override public void run() { try (Statement stmt = SQLManager.this.connection.createStatement()) {
try (Statement stmt = SQLManager.this.connection.createStatement()) { stmt.executeUpdate(
stmt.executeUpdate( "UPDATE `" + SQLManager.this.prefix + "cluster` SET `owner` = '" + now
"UPDATE `" + SQLManager.this.prefix + "cluster` SET `owner` = '" + now .toString() + "' WHERE `owner` = '" + old.toString() + '\'');
.toString() + "' WHERE `owner` = '" + old.toString() + '\''); stmt.executeUpdate(
stmt.executeUpdate( "UPDATE `" + SQLManager.this.prefix + "cluster_helpers` SET `user_uuid` = '"
"UPDATE `" + SQLManager.this.prefix + "cluster_helpers` SET `user_uuid` = '" + now.toString() + "' WHERE `user_uuid` = '" + old.toString() + '\'');
+ now.toString() + "' WHERE `user_uuid` = '" + old.toString() + '\''); stmt.executeUpdate(
stmt.executeUpdate( "UPDATE `" + SQLManager.this.prefix + "cluster_invited` SET `user_uuid` = '"
"UPDATE `" + SQLManager.this.prefix + "cluster_invited` SET `user_uuid` = '" + now.toString() + "' WHERE `user_uuid` = '" + old.toString() + '\'');
+ now.toString() + "' WHERE `user_uuid` = '" + old.toString() + '\''); stmt.executeUpdate(
stmt.executeUpdate( "UPDATE `" + SQLManager.this.prefix + "plot` SET `owner` = '" + now.toString()
"UPDATE `" + SQLManager.this.prefix + "plot` SET `owner` = '" + now + "' WHERE `owner` = '" + old.toString() + '\'');
.toString() + "' WHERE `owner` = '" + old.toString() + '\''); stmt.executeUpdate(
stmt.executeUpdate( "UPDATE `" + SQLManager.this.prefix + "plot_denied` SET `user_uuid` = '" + now
"UPDATE `" + SQLManager.this.prefix + "plot_denied` SET `user_uuid` = '" .toString() + "' WHERE `user_uuid` = '" + old.toString() + '\'');
+ now.toString() + "' WHERE `user_uuid` = '" + old.toString() + '\''); stmt.executeUpdate(
stmt.executeUpdate( "UPDATE `" + SQLManager.this.prefix + "plot_helpers` SET `user_uuid` = '" + now
"UPDATE `" + SQLManager.this.prefix + "plot_helpers` SET `user_uuid` = '" .toString() + "' WHERE `user_uuid` = '" + old.toString() + '\'');
+ now.toString() + "' WHERE `user_uuid` = '" + old.toString() + '\''); stmt.executeUpdate(
stmt.executeUpdate( "UPDATE `" + SQLManager.this.prefix + "plot_trusted` SET `user_uuid` = '" + now
"UPDATE `" + SQLManager.this.prefix + "plot_trusted` SET `user_uuid` = '" .toString() + "' WHERE `user_uuid` = '" + old.toString() + '\'');
+ now.toString() + "' WHERE `user_uuid` = '" + old.toString() + '\''); } catch (SQLException e) {
} catch (SQLException e) { e.printStackTrace();
e.printStackTrace();
}
} }
}); });
} }

View File

@ -146,7 +146,7 @@ public class FlagManager {
* @return * @return
*/ */
public static <V> V getPlotFlagRaw(Plot plot, Flag<V> flag) { public static <V> V getPlotFlagRaw(Plot plot, Flag<V> flag) {
if (plot.owner == null) { if (plot.guessOwner() == null) {
return null; return null;
} }
return getSettingFlag(plot.getArea(), plot.getSettings(), flag); return getSettingFlag(plot.getArea(), plot.getSettings(), flag);

View File

@ -244,7 +244,6 @@ public class ClassicPlotManager extends SquarePlotManager {
Location bot = plot.getExtendedBottomAbs() Location bot = plot.getExtendedBottomAbs()
.subtract(plot.getMerged(3) ? 0 : 1, 0, plot.getMerged(0) ? 0 : 1); .subtract(plot.getMerged(3) ? 0 : 1, 0, plot.getMerged(0) ? 0 : 1);
Location top = plot.getExtendedTopAbs().add(1, 0, 1); Location top = plot.getExtendedTopAbs().add(1, 0, 1);
PseudoRandom random = new PseudoRandom();
LocalBlockQueue queue = plotArea.getQueue(false); LocalBlockQueue queue = plotArea.getQueue(false);
int y = dpw.WALL_HEIGHT + 1; int y = dpw.WALL_HEIGHT + 1;
if (!plot.getMerged(0)) { if (!plot.getMerged(0)) {

View File

@ -6,12 +6,10 @@ import com.github.intellectualsites.plotsquared.plot.util.MathMan;
import com.github.intellectualsites.plotsquared.plot.util.block.ScopedLocalBlockQueue; import com.github.intellectualsites.plotsquared.plot.util.block.ScopedLocalBlockQueue;
import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BaseBlock;
import java.util.HashMap;
public class HybridGen extends IndependentPlotGenerator { public class HybridGen extends IndependentPlotGenerator {
@Override public String getName() { @Override public String getName() {
return PlotSquared.imp().getPluginName(); return PlotSquared.get().IMP.getPluginName();
} }
private void placeSchem(HybridPlotWorld world, ScopedLocalBlockQueue result, short relativeX, private void placeSchem(HybridPlotWorld world, ScopedLocalBlockQueue result, short relativeX,
@ -41,8 +39,6 @@ public class HybridGen extends IndependentPlotGenerator {
} }
// Coords // Coords
Location min = result.getMin(); Location min = result.getMin();
int cx = min.getX() >> 4;
int cz = min.getZ() >> 4;
int bx = (min.getX()) - hpw.ROAD_OFFSET_X; int bx = (min.getX()) - hpw.ROAD_OFFSET_X;
int bz = (min.getZ()) - hpw.ROAD_OFFSET_Z; int bz = (min.getZ()) - hpw.ROAD_OFFSET_Z;
short rbx; short rbx;
@ -86,7 +82,6 @@ public class HybridGen extends IndependentPlotGenerator {
} }
} }
// generation // generation
HashMap<Integer, BaseBlock[]> sch = hpw.G_SCH;
for (short x = 0; x < 16; x++) { for (short x = 0; x < 16; x++) {
if (gx[x]) { if (gx[x]) {
for (short z = 0; z < 16; z++) { for (short z = 0; z < 16; z++) {

View File

@ -197,12 +197,10 @@ public class HybridPlotManager extends ClassicPlotManager {
// And finally set the schematic, the y value is unimportant for this function // And finally set the schematic, the y value is unimportant for this function
pastePlotSchematic(dpw, queue, bot, top); pastePlotSchematic(dpw, queue, bot, top);
} }
}, new Runnable() { }, () -> {
@Override public void run() { queue.enqueue();
queue.enqueue(); // And notify whatever called this when plot clearing is done
// And notify whatever called this when plot clearing is done GlobalBlockQueue.IMP.addTask(whenDone);
GlobalBlockQueue.IMP.addTask(whenDone);
}
}, 10); }, 10);
return true; return true;
} }

View File

@ -212,11 +212,7 @@ public abstract class HybridUtils {
PlotSquared.debug("&d - Potentially skipping 1024 chunks"); PlotSquared.debug("&d - Potentially skipping 1024 chunks");
PlotSquared.debug("&d - TODO: recommend chunkster if corrupt"); PlotSquared.debug("&d - TODO: recommend chunkster if corrupt");
} }
GlobalBlockQueue.IMP.addTask(new Runnable() { GlobalBlockQueue.IMP.addTask(() -> TaskManager.runTaskLater(task, 20));
@Override public void run() {
TaskManager.runTaskLater(task, 20);
}
});
} }
}); });
} }

View File

@ -158,23 +158,21 @@ public class PlotListener {
if (titles) { if (titles) {
if (!C.TITLE_ENTERED_PLOT.s().isEmpty() || !C.TITLE_ENTERED_PLOT_SUB.s() if (!C.TITLE_ENTERED_PLOT.s().isEmpty() || !C.TITLE_ENTERED_PLOT_SUB.s()
.isEmpty()) { .isEmpty()) {
TaskManager.runTaskLaterAsync(new Runnable() { TaskManager.runTaskLaterAsync(() -> {
@Override public void run() { Plot lastPlot = player.getMeta(PlotPlayer.META_LAST_PLOT);
Plot lastPlot = player.getMeta(PlotPlayer.META_LAST_PLOT); if ((lastPlot != null) && plot.getId().equals(lastPlot.getId())) {
if ((lastPlot != null) && plot.getId().equals(lastPlot.getId())) { Map<String, String> replacements = new HashMap<>();
Map<String, String> replacements = new HashMap<>(); replacements.put("%x%", String.valueOf(lastPlot.getId().x));
replacements.put("%x%", String.valueOf(lastPlot.getId().x)); replacements.put("%z%", lastPlot.getId().y + "");
replacements.put("%z%", lastPlot.getId().y + ""); replacements.put("%world%", plot.getArea().toString());
replacements.put("%world%", plot.getArea().toString()); replacements.put("%greeting%", greeting);
replacements.put("%greeting%", greeting); replacements.put("%alias", plot.toString());
replacements.put("%alias", plot.toString()); replacements.put("%s", MainUtil.getName(plot.guessOwner()));
replacements.put("%s", MainUtil.getName(plot.owner)); String main =
String main = StringMan StringMan.replaceFromMap(C.TITLE_ENTERED_PLOT.s(), replacements);
.replaceFromMap(C.TITLE_ENTERED_PLOT.s(), replacements); String sub = StringMan
String sub = StringMan .replaceFromMap(C.TITLE_ENTERED_PLOT_SUB.s(), replacements);
.replaceFromMap(C.TITLE_ENTERED_PLOT_SUB.s(), replacements); AbstractTitle.sendTitle(player, main, sub);
AbstractTitle.sendTitle(player, main, sub);
}
} }
}, 20); }, 20);
} }

View File

@ -805,14 +805,12 @@ public class Plot {
Runnable run = new Runnable() { Runnable run = new Runnable() {
@Override public void run() { @Override public void run() {
if (queue.isEmpty()) { if (queue.isEmpty()) {
Runnable run = new Runnable() { Runnable run = () -> {
@Override public void run() { for (RegionWrapper region : regions) {
for (RegionWrapper region : regions) { Location[] corners = region.getCorners(getWorldName());
Location[] corners = region.getCorners(getWorldName()); ChunkManager.manager.clearAllEntities(corners[0], corners[1]);
ChunkManager.manager.clearAllEntities(corners[0], corners[1]);
}
TaskManager.runTask(whenDone);
} }
TaskManager.runTask(whenDone);
}; };
for (Plot current : plots) { for (Plot current : plots) {
if (isDelete || current.owner == null) { if (isDelete || current.owner == null) {
@ -927,11 +925,9 @@ public class Plot {
current.setMerged(merged); current.setMerged(merged);
} }
if (createSign) { if (createSign) {
GlobalBlockQueue.IMP.addTask(new Runnable() { GlobalBlockQueue.IMP.addTask(() -> {
@Override public void run() { for (Plot current : plots) {
for (Plot current : plots) { current.setSign(MainUtil.getName(current.owner));
current.setSign(MainUtil.getName(current.owner));
}
} }
}); });
} }
@ -950,11 +946,7 @@ public class Plot {
if (!isLoaded()) if (!isLoaded())
return; return;
if (!PlotSquared.get().isMainThread(Thread.currentThread())) { if (!PlotSquared.get().isMainThread(Thread.currentThread())) {
TaskManager.runTask(new Runnable() { TaskManager.runTask(() -> Plot.this.setSign(name));
@Override public void run() {
Plot.this.setSign(name);
}
});
return; return;
} }
PlotManager manager = this.area.getPlotManager(); PlotManager manager = this.area.getPlotManager();
@ -1044,13 +1036,11 @@ public class Plot {
return false; return false;
} }
final Set<Plot> plots = this.getConnectedPlots(); final Set<Plot> plots = this.getConnectedPlots();
this.clear(false, true, new Runnable() { this.clear(false, true, () -> {
@Override public void run() { for (Plot current : plots) {
for (Plot current : plots) { current.unclaim();
current.unclaim();
}
TaskManager.runTask(whenDone);
} }
TaskManager.runTask(whenDone);
}); });
return true; return true;
} }
@ -1483,12 +1473,10 @@ public class Plot {
this.getDenied().clear(); this.getDenied().clear();
this.settings = new PlotSettings(); this.settings = new PlotSettings();
if (this.area.addPlot(this)) { if (this.area.addPlot(this)) {
DBFunc.createPlotAndSettings(this, new Runnable() { DBFunc.createPlotAndSettings(this, () -> {
@Override public void run() { PlotArea plotworld = Plot.this.area;
PlotArea plotworld = Plot.this.area; if (notify && plotworld.AUTO_MERGE) {
if (notify && plotworld.AUTO_MERGE) { Plot.this.autoMerge(-1, Integer.MAX_VALUE, uuid, true);
Plot.this.autoMerge(-1, Integer.MAX_VALUE, uuid, true);
}
} }
}); });
return true; return true;
@ -1837,16 +1825,14 @@ public class Plot {
TaskManager.runTask(whenDone); TaskManager.runTask(whenDone);
} }
} else { } else {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { String name = Plot.this.id + "," + Plot.this.area + ',' + MainUtil
String name = Plot.this.id + "," + Plot.this.area + ',' + MainUtil .getName(Plot.this.owner);
.getName(Plot.this.owner); boolean result = SchematicHandler.manager.save(value,
boolean result = SchematicHandler.manager.save(value, Settings.Paths.SCHEMATICS + File.separator + name + ".schematic");
Settings.Paths.SCHEMATICS + File.separator + name + ".schematic"); if (whenDone != null) {
if (whenDone != null) { whenDone.value = result;
whenDone.value = result; TaskManager.runTask(whenDone);
TaskManager.runTask(whenDone);
}
} }
}); });
} }
@ -2556,9 +2542,7 @@ public class Plot {
} }
Location gtopabs = this.area.getPlotAbs(top).getTopAbs(); Location gtopabs = this.area.getPlotAbs(top).getTopAbs();
Location gbotabs = this.area.getPlotAbs(bot).getBottomAbs(); Location gbotabs = this.area.getPlotAbs(bot).getBottomAbs();
for (PlotId id : MainUtil.getPlotSelectionIds(bot, top)) { visited.addAll(MainUtil.getPlotSelectionIds(bot, top));
visited.add(id);
}
for (int x = bot.x; x <= top.x; x++) { for (int x = bot.x; x <= top.x; x++) {
Plot plot = this.area.getPlotAbs(new PlotId(x, top.y)); Plot plot = this.area.getPlotAbs(new PlotId(x, top.y));
if (plot.getMerged(2)) { if (plot.getMerged(2)) {
@ -2625,12 +2609,10 @@ public class Plot {
* - Usually called when the plot state changes (unclaimed/claimed/flag change etc) * - Usually called when the plot state changes (unclaimed/claimed/flag change etc)
*/ */
public void reEnter() { public void reEnter() {
TaskManager.runTaskLater(new Runnable() { TaskManager.runTaskLater(() -> {
@Override public void run() { for (PlotPlayer pp : Plot.this.getPlayersInPlot()) {
for (PlotPlayer pp : Plot.this.getPlayersInPlot()) { PlotListener.plotExit(pp, Plot.this);
PlotListener.plotExit(pp, Plot.this); PlotListener.plotEntry(pp, Plot.this);
PlotListener.plotEntry(pp, Plot.this);
}
} }
}, 1); }, 1);
} }
@ -2686,17 +2668,15 @@ public class Plot {
MainUtil.sendMessage(player, C.TELEPORT_IN_SECONDS, Settings.Teleport.DELAY + ""); MainUtil.sendMessage(player, C.TELEPORT_IN_SECONDS, Settings.Teleport.DELAY + "");
final String name = player.getName(); final String name = player.getName();
TaskManager.TELEPORT_QUEUE.add(name); TaskManager.TELEPORT_QUEUE.add(name);
TaskManager.runTaskLater(new Runnable() { TaskManager.runTaskLater(() -> {
@Override public void run() { if (!TaskManager.TELEPORT_QUEUE.contains(name)) {
if (!TaskManager.TELEPORT_QUEUE.contains(name)) { MainUtil.sendMessage(player, C.TELEPORT_FAILED);
MainUtil.sendMessage(player, C.TELEPORT_FAILED); return;
return; }
} TaskManager.TELEPORT_QUEUE.remove(name);
TaskManager.TELEPORT_QUEUE.remove(name); if (player.isOnline()) {
if (player.isOnline()) { MainUtil.sendMessage(player, C.TELEPORTED_TO_PLOT);
MainUtil.sendMessage(player, C.TELEPORTED_TO_PLOT); player.teleport(location);
player.teleport(location);
}
} }
}, Settings.Teleport.DELAY * 20); }, Settings.Teleport.DELAY * 20);
return true; return true;
@ -2883,11 +2863,8 @@ public class Plot {
final Location pos2 = corners[1]; final Location pos2 = corners[1];
Location newPos = pos1.clone().add(offsetX, 0, offsetZ); Location newPos = pos1.clone().add(offsetX, 0, offsetZ);
newPos.setWorld(destination.getWorldName()); newPos.setWorld(destination.getWorldName());
ChunkManager.manager.copyRegion(pos1, pos2, newPos, new Runnable() { ChunkManager.manager.copyRegion(pos1, pos2, newPos,
@Override public void run() { () -> ChunkManager.manager.regenerateRegion(pos1, pos2, false, task));
ChunkManager.manager.regenerateRegion(pos1, pos2, false, task);
}
});
} }
}; };
Runnable swap = new Runnable() { Runnable swap = new Runnable() {

View File

@ -179,7 +179,7 @@ public abstract class PlotArea {
} }
public Set<PlotCluster> getClusters() { public Set<PlotCluster> getClusters() {
return this.clusters == null ? new HashSet<PlotCluster>() : this.clusters.getAll(); return this.clusters == null ? new HashSet<>() : this.clusters.getAll();
} }
/** /**
@ -496,7 +496,7 @@ public abstract class PlotArea {
final HashSet<Plot> myPlots = new HashSet<>(); final HashSet<Plot> myPlots = new HashSet<>();
foreachPlotAbs(new RunnableVal<Plot>() { foreachPlotAbs(new RunnableVal<Plot>() {
@Override public void run(Plot value) { @Override public void run(Plot value) {
if (uuid.equals(value.owner)) { if (uuid.equals(value.guessOwner())) {
myPlots.add(value); myPlots.add(value);
} }
} }
@ -657,12 +657,7 @@ public abstract class PlotArea {
public Set<Plot> getBasePlots() { public Set<Plot> getBasePlots() {
HashSet<Plot> myPlots = new HashSet<>(getPlots()); HashSet<Plot> myPlots = new HashSet<>(getPlots());
Iterator<Plot> iterator = myPlots.iterator(); myPlots.removeIf(plot -> !plot.isBasePlot());
while (iterator.hasNext()) {
if (!iterator.next().isBasePlot()) {
iterator.remove();
}
}
return myPlots; return myPlots;
} }

View File

@ -78,7 +78,7 @@ public abstract class PlotBlock implements ConfigurationSerializable {
public static PlotBlock get(@NonNull final Object type) { public static PlotBlock get(@NonNull final Object type) {
if (blockRegistry == null) { if (blockRegistry == null) {
blockRegistry = PlotSquared.imp().getBlockRegistry(); blockRegistry = PlotSquared.get().IMP.getBlockRegistry();
if (blockRegistry == null) { if (blockRegistry == null) {
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
"The PlotSquared implementation has not registered a custom block registry." "The PlotSquared implementation has not registered a custom block registry."
@ -99,7 +99,7 @@ public abstract class PlotBlock implements ConfigurationSerializable {
public <T> T to(@NonNull final Class<T> clazz) { public <T> T to(@NonNull final Class<T> clazz) {
if (blockRegistry == null) { if (blockRegistry == null) {
blockRegistry = PlotSquared.imp().getBlockRegistry(); blockRegistry = PlotSquared.get().IMP.getBlockRegistry();
if (blockRegistry == null) { if (blockRegistry == null) {
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
"The PlotSquared implementation has not registered a custom block registry." "The PlotSquared implementation has not registered a custom block registry."

View File

@ -5,7 +5,7 @@ import java.util.UUID;
public class PlotHandler { public class PlotHandler {
public static boolean sameOwners(final Plot plot1, final Plot plot2) { public static boolean sameOwners(final Plot plot1, final Plot plot2) {
if (plot1.owner == null || plot2.owner == null) { if (plot1.guessOwner() == null || plot2.guessOwner() == null) {
return false; return false;
} }
final Set<UUID> owners = plot1.getOwners(); final Set<UUID> owners = plot1.getOwners();

View File

@ -5,6 +5,8 @@ import com.github.intellectualsites.plotsquared.plot.config.C;
import com.github.intellectualsites.plotsquared.plot.object.chat.PlainChatManager; import com.github.intellectualsites.plotsquared.plot.object.chat.PlainChatManager;
import com.github.intellectualsites.plotsquared.plot.util.ChatManager; import com.github.intellectualsites.plotsquared.plot.util.ChatManager;
import java.util.Arrays;
public class PlotMessage { public class PlotMessage {
private Object builder; private Object builder;
@ -14,8 +16,8 @@ public class PlotMessage {
reset(ChatManager.manager); reset(ChatManager.manager);
} catch (Throwable e) { } catch (Throwable e) {
PlotSquared.debug( PlotSquared.debug(
PlotSquared.imp().getPluginName() + " doesn't support fancy chat for " + PlotSquared PlotSquared.imp().getPluginName() + " doesn't support fancy chat for " + Arrays
.get().IMP.getServerVersion()); .toString(PlotSquared.get().IMP.getServerVersion()));
ChatManager.manager = new PlainChatManager(); ChatManager.manager = new PlainChatManager();
reset(ChatManager.manager); reset(ChatManager.manager);
} }

View File

@ -222,7 +222,6 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
return getClusterCount(getLocation().getWorld()); return getClusterCount(getLocation().getWorld());
} }
final AtomicInteger count = new AtomicInteger(0); final AtomicInteger count = new AtomicInteger(0);
final UUID uuid = getUUID();
PlotSquared.get().foreachPlotArea(new RunnableVal<PlotArea>() { PlotSquared.get().foreachPlotArea(new RunnableVal<PlotArea>() {
@Override public void run(PlotArea value) { @Override public void run(PlotArea value) {
for (PlotCluster cluster : value.getClusters()) { for (PlotCluster cluster : value.getClusters()) {
@ -259,7 +258,6 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
} }
public int getClusterCount(String world) { public int getClusterCount(String world) {
UUID uuid = getUUID();
int count = 0; int count = 0;
for (PlotArea area : PlotSquared.get().getPlotAreas(world)) { for (PlotArea area : PlotSquared.get().getPlotAreas(world)) {
for (PlotCluster cluster : area.getClusters()) { for (PlotCluster cluster : area.getClusters()) {
@ -569,31 +567,27 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
final Location loc = final Location loc =
new Location(plot.getWorldName(), x, y, z); new Location(plot.getWorldName(), x, y, z);
if (plot.isLoaded()) { if (plot.isLoaded()) {
TaskManager.runTask(new Runnable() { TaskManager.runTask(() -> {
@Override public void run() { if (getMeta("teleportOnLogin", true)) {
if (getMeta("teleportOnLogin", true)) { teleport(loc);
teleport(loc); sendMessage(C.TELEPORTED_TO_PLOT.f()
sendMessage(C.TELEPORTED_TO_PLOT.f() + " (quitLoc) (" + plotX + ","
+ " (quitLoc) (" + plotX + "," + plotZ + ")");
+ plotZ + ")");
}
} }
}); });
} else if (!PlotSquared.get() } else if (!PlotSquared.get()
.isMainThread(Thread.currentThread())) { .isMainThread(Thread.currentThread())) {
if (getMeta("teleportOnLogin", true)) { if (getMeta("teleportOnLogin", true)) {
if (plot.teleportPlayer(PlotPlayer.this)) { if (plot.teleportPlayer(PlotPlayer.this)) {
TaskManager.runTask(new Runnable() { TaskManager.runTask(() -> {
@Override public void run() { if (getMeta("teleportOnLogin",
if (getMeta("teleportOnLogin", true)) {
true)) { teleport(loc);
teleport(loc); sendMessage(
sendMessage( C.TELEPORTED_TO_PLOT.f()
C.TELEPORTED_TO_PLOT.f() + " (quitLoc-unloaded) ("
+ " (quitLoc-unloaded) (" + plotX + "," + plotZ
+ plotX + "," + ")");
+ plotZ + ")");
}
} }
}); });
} }
@ -618,9 +612,7 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer {
} }
public void removePersistentMeta(String key) { public void removePersistentMeta(String key) {
if (this.metaMap.containsKey(key)) { this.metaMap.remove(key);
this.metaMap.remove(key);
}
if (Settings.Enabled_Components.PERSISTENT_META) { if (Settings.Enabled_Components.PERSISTENT_META) {
DBFunc.removePersistentMeta(getUUID(), key); DBFunc.removePersistentMeta(getUUID(), key);
} }

View File

@ -14,12 +14,6 @@ import java.util.*;
*/ */
public class PlotSettings { public class PlotSettings {
/**
* Merged plots.
*
* @deprecated Raw access
*/
@Deprecated public boolean[] merged = new boolean[] {false, false, false, false};
/** /**
* Plot alias. * Plot alias.
* *
@ -32,20 +26,24 @@ public class PlotSettings {
* @deprecated Raw access * @deprecated Raw access
*/ */
@Deprecated public List<PlotComment> comments = null; @Deprecated public List<PlotComment> comments = null;
/** /**
* The ratings for a plot. * The ratings for a plot.
* *
* @deprecated Raw access * @deprecated Raw access
*/ */
@Deprecated public HashMap<UUID, Integer> ratings; @Deprecated public HashMap<UUID, Integer> ratings;
/** /**
* Flags. * Flags.
* *
* @deprecated Raw access * @deprecated Raw access
*/ */
@Deprecated public HashMap<Flag<?>, Object> flags = new HashMap<>(); @Deprecated public HashMap<Flag<?>, Object> flags = new HashMap<>();
/**
* Merged plots.
*
* @deprecated Raw access
*/
@Deprecated private boolean[] merged = new boolean[] {false, false, false, false};
/** /**
* Home Position. * Home Position.
* *

View File

@ -14,10 +14,8 @@ public abstract class CommentInbox {
public boolean canRead(Plot plot, PlotPlayer player) { public boolean canRead(Plot plot, PlotPlayer player) {
if (Permissions.hasPermission(player, "plots.inbox.read." + toString(), true)) { if (Permissions.hasPermission(player, "plots.inbox.read." + toString(), true)) {
if (plot.isOwner(player.getUUID()) || Permissions return plot.isOwner(player.getUUID()) || Permissions
.hasPermission(player, "plots.inbox.read." + toString() + ".other", true)) { .hasPermission(player, "plots.inbox.read." + toString() + ".other", true);
return true;
}
} }
return false; return false;
} }
@ -33,10 +31,8 @@ public abstract class CommentInbox {
public boolean canModify(Plot plot, PlotPlayer player) { public boolean canModify(Plot plot, PlotPlayer player) {
if (Permissions.hasPermission(player, "plots.inbox.modify." + toString(), true)) { if (Permissions.hasPermission(player, "plots.inbox.modify." + toString(), true)) {
if (plot.isOwner(player.getUUID()) || Permissions return plot.isOwner(player.getUUID()) || Permissions
.hasPermission(player, "plots.inbox.modify." + toString() + ".other", true)) { .hasPermission(player, "plots.inbox.modify." + toString() + ".other", true);
return true;
}
} }
return false; return false;
} }

View File

@ -27,7 +27,7 @@ public class InboxOwner extends CommentInbox {
plot.getSettings().addComment(comment); plot.getSettings().addComment(comment);
} }
} else { } else {
plot.getSettings().setComments(new ArrayList<PlotComment>()); plot.getSettings().setComments(new ArrayList<>());
} }
TaskManager.runTask(whenDone); TaskManager.runTask(whenDone);
} }
@ -36,7 +36,7 @@ public class InboxOwner extends CommentInbox {
} }
@Override public boolean addComment(Plot plot, PlotComment comment) { @Override public boolean addComment(Plot plot, PlotComment comment) {
if (plot.owner == null) { if (plot.guessOwner() == null) {
return false; return false;
} }
plot.getSettings().addComment(comment); plot.getSettings().addComment(comment);

View File

@ -20,7 +20,7 @@ public class InboxReport extends CommentInbox {
} }
@Override public boolean addComment(Plot plot, PlotComment comment) { @Override public boolean addComment(Plot plot, PlotComment comment) {
if (plot.owner == null) { if (plot.guessOwner() == null) {
return false; return false;
} }
DBFunc.setComment(plot, comment); DBFunc.setComment(plot, comment);

View File

@ -104,7 +104,7 @@ public class DefaultPlotAreaManager implements PlotAreaManager {
} }
@Override public void removePlotArea(PlotArea area) { @Override public void removePlotArea(PlotArea area) {
ArrayList<PlotArea> globalAreas = new ArrayList<PlotArea>(Arrays.asList(plotAreas)); ArrayList<PlotArea> globalAreas = new ArrayList<>(Arrays.asList(plotAreas));
globalAreas.remove(area); globalAreas.remove(area);
this.plotAreas = globalAreas.toArray(new PlotArea[globalAreas.size()]); this.plotAreas = globalAreas.toArray(new PlotArea[globalAreas.size()]);
if (globalAreas.isEmpty()) { if (globalAreas.isEmpty()) {

View File

@ -113,8 +113,8 @@ public class SinglePlotArea extends GridPlotWorld {
return p; return p;
} }
PlotSettings s = p.getSettings(); PlotSettings s = p.getSettings();
p = new SinglePlot(p.getId(), p.owner, p.getTrusted(), p.getMembers(), p.getDenied(), p = new SinglePlot(p.getId(), p.guessOwner(), p.getTrusted(), p.getMembers(), p.getDenied(),
s.alias, s.getPosition(), null, this, s.merged, p.getTimestamp(), p.temp); s.alias, s.getPosition(), null, this, s.getMerged(), p.getTimestamp(), p.temp);
p.getSettings().flags = s.flags; p.getSettings().flags = s.flags;
return p; return p;
} }

View File

@ -35,8 +35,7 @@ public class SinglePlotAreaManager extends DefaultPlotAreaManager {
if (chars.length == 1 && chars[0] == '*') { if (chars.length == 1 && chars[0] == '*') {
return true; return true;
} }
for (int i = 0; i < chars.length; i++) { for (char c : chars) {
char c = chars[i];
switch (mode) { switch (mode) {
case 0: case 0:
mode = 1; mode = 1;
@ -62,7 +61,6 @@ public class SinglePlotAreaManager extends DefaultPlotAreaManager {
if ((c <= '/') || (c >= ':')) { if ((c <= '/') || (c >= ':')) {
return false; return false;
} }
continue;
} }
} }
return true; return true;

View File

@ -30,12 +30,10 @@ public class SinglePlotManager extends PlotManager {
SetupUtils.manager.unload(plot.getWorldName(), false); SetupUtils.manager.unload(plot.getWorldName(), false);
final File worldFolder = final File worldFolder =
new File(PlotSquared.get().IMP.getWorldContainer(), plot.getWorldName()); new File(PlotSquared.get().IMP.getWorldContainer(), plot.getWorldName());
TaskManager.IMP.taskAsync(new Runnable() { TaskManager.IMP.taskAsync(() -> {
@Override public void run() { MainUtil.deleteDirectory(worldFolder);
MainUtil.deleteDirectory(worldFolder); if (whenDone != null)
if (whenDone != null) whenDone.run();
whenDone.run();
}
}); });
return true; return true;
} }

View File

@ -71,41 +71,39 @@ public abstract class ChunkManager {
public static void largeRegionTask(final String world, final RegionWrapper region, public static void largeRegionTask(final String world, final RegionWrapper region,
final RunnableVal<ChunkLoc> task, final Runnable whenDone) { final RunnableVal<ChunkLoc> task, final Runnable whenDone) {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { HashSet<ChunkLoc> chunks = new HashSet<>();
HashSet<ChunkLoc> chunks = new HashSet<>(); Set<ChunkLoc> mcrs = manager.getChunkChunks(world);
Set<ChunkLoc> mcrs = manager.getChunkChunks(world); for (ChunkLoc mcr : mcrs) {
for (ChunkLoc mcr : mcrs) { int bx = mcr.x << 9;
int bx = mcr.x << 9; int bz = mcr.z << 9;
int bz = mcr.z << 9; int tx = bx + 511;
int tx = bx + 511; int tz = bz + 511;
int tz = bz + 511; if (bx <= region.maxX && tx >= region.minX && bz <= region.maxZ
if (bx <= region.maxX && tx >= region.minX && bz <= region.maxZ && tz >= region.minZ) {
&& tz >= region.minZ) { for (int x = bx >> 4; x <= (tx >> 4); x++) {
for (int x = bx >> 4; x <= (tx >> 4); x++) { int cbx = x << 4;
int cbx = x << 4; int ctx = cbx + 15;
int ctx = cbx + 15; if (cbx <= region.maxX && ctx >= region.minX) {
if (cbx <= region.maxX && ctx >= region.minX) { for (int z = bz >> 4; z <= (tz >> 4); z++) {
for (int z = bz >> 4; z <= (tz >> 4); z++) { int cbz = z << 4;
int cbz = z << 4; int ctz = cbz + 15;
int ctz = cbz + 15; if (cbz <= region.maxZ && ctz >= region.minZ) {
if (cbz <= region.maxZ && ctz >= region.minZ) { chunks.add(new ChunkLoc(x, z));
chunks.add(new ChunkLoc(x, z));
}
} }
} }
} }
} }
} }
TaskManager.objectTask(chunks, new RunnableVal<ChunkLoc>() {
@Override public void run(ChunkLoc value) {
if (manager.loadChunk(world, value, false)) {
task.run(value);
}
}
}, whenDone);
} }
TaskManager.objectTask(chunks, new RunnableVal<ChunkLoc>() {
@Override public void run(ChunkLoc value) {
if (manager.loadChunk(world, value, false)) {
task.run(value);
}
}
}, whenDone);
}); });
} }
@ -239,20 +237,18 @@ public abstract class ChunkManager {
public void deleteRegionFiles(final String world, final Collection<ChunkLoc> chunks, public void deleteRegionFiles(final String world, final Collection<ChunkLoc> chunks,
final Runnable whenDone) { final Runnable whenDone) {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(() -> {
@Override public void run() { for (ChunkLoc loc : chunks) {
for (ChunkLoc loc : chunks) { String directory =
String directory = world + File.separator + "region" + File.separator + "r." + loc.x + "." + loc.z
world + File.separator + "region" + File.separator + "r." + loc.x + "." + ".mca";
+ loc.z + ".mca"; File file = new File(PlotSquared.get().IMP.getWorldContainer(), directory);
File file = new File(PlotSquared.get().IMP.getWorldContainer(), directory); PlotSquared.log("&6 - Deleting file: " + file.getName() + " (max 1024 chunks)");
PlotSquared.log("&6 - Deleting file: " + file.getName() + " (max 1024 chunks)"); if (file.exists()) {
if (file.exists()) { file.delete();
file.delete();
}
} }
TaskManager.runTask(whenDone);
} }
TaskManager.runTask(whenDone);
}); });
} }

View File

@ -19,11 +19,9 @@ public class CmdConfirm {
removePending(player); removePending(player);
if (commandStr != null) if (commandStr != null)
MainUtil.sendMessage(player, C.REQUIRES_CONFIRM, commandStr); MainUtil.sendMessage(player, C.REQUIRES_CONFIRM, commandStr);
TaskManager.runTaskLater(new Runnable() { TaskManager.runTaskLater(() -> {
@Override public void run() { CmdInstance cmd = new CmdInstance(runnable);
CmdInstance cmd = new CmdInstance(runnable); player.setMeta("cmdConfirm", cmd);
player.setMeta("cmdConfirm", cmd);
}
}, 1); }, 1);
} }
} }

View File

@ -20,34 +20,31 @@ public class CommentManager {
if (!Settings.Enabled_Components.COMMENT_NOTIFIER || !plot.isOwner(player.getUUID())) { if (!Settings.Enabled_Components.COMMENT_NOTIFIER || !plot.isOwner(player.getUUID())) {
return; return;
} }
TaskManager.runTaskLaterAsync(new Runnable() { TaskManager.runTaskLaterAsync(() -> {
@Override public void run() { Collection<CommentInbox> boxes = CommentManager.inboxes.values();
Collection<CommentInbox> boxes = CommentManager.inboxes.values(); final AtomicInteger count = new AtomicInteger(0);
final AtomicInteger count = new AtomicInteger(0); final AtomicInteger size = new AtomicInteger(boxes.size());
final AtomicInteger size = new AtomicInteger(boxes.size()); for (final CommentInbox inbox : inboxes.values()) {
for (final CommentInbox inbox : inboxes.values()) { inbox.getComments(plot, new RunnableVal<List<PlotComment>>() {
inbox.getComments(plot, new RunnableVal<List<PlotComment>>() { @Override public void run(List<PlotComment> value) {
@Override public void run(List<PlotComment> value) { int total;
int total; if (value != null) {
if (value != null) { int num = 0;
int num = 0; for (PlotComment comment : value) {
for (PlotComment comment : value) { if (comment.timestamp > getTimestamp(player, inbox.toString())) {
if (comment.timestamp > getTimestamp(player, num++;
inbox.toString())) {
num++;
}
} }
total = count.addAndGet(num);
} else {
total = count.get();
}
if ((size.decrementAndGet() == 0) && (total > 0)) {
AbstractTitle.sendTitle(player, "",
C.INBOX_NOTIFICATION.s().replaceAll("%s", "" + total));
} }
total = count.addAndGet(num);
} else {
total = count.get();
} }
}); if ((size.decrementAndGet() == 0) && (total > 0)) {
} AbstractTitle.sendTitle(player, "",
C.INBOX_NOTIFICATION.s().replaceAll("%s", "" + total));
}
}
});
} }
}, 20); }, 20);
} }

Some files were not shown because too many files have changed in this diff Show More