From 66da71bc9ff18b016c908319fec98a0e520c9fc1 Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Fri, 11 Mar 2016 15:33:18 +1100 Subject: [PATCH] Various Fixes a few typos Fixes #943 Fixes #944 Fixes metrics (broke in b69e31129df9f7455856d75d0578d39b8d989015) Fixes plot setup issue Fixes some lighting issues Fixes ChunkListener + cauldron Tweak some schematic stuff --- .../bukkit/listeners/ChunkListener.java | 35 ++++---- .../bukkit/titles/DefaultTitle.java | 5 +- .../plotsquared/bukkit/titles/HackTitle.java | 2 +- .../com/plotsquared/bukkit/util/Metrics.java | 81 ++++++++----------- .../bukkit/util/block/FastQueue_1_9.java | 80 +++++++++--------- .../plot/commands/Setup.java | 13 ++- .../plot/generator/AugmentedUtils.java | 37 +++++---- .../plot/generator/HybridPlotManager.java | 16 +--- .../plot/generator/HybridPlotWorld.java | 14 ++-- .../plot/generator/HybridUtils.java | 28 +------ .../plot/object/Plot.java | 11 ++- .../plot/util/BO3Handler.java | 2 +- .../plot/util/ExpireManager.java | 2 +- .../plot/util/MainUtil.java | 38 ++++----- .../plot/util/SchematicHandler.java | 4 +- 15 files changed, 170 insertions(+), 198 deletions(-) diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/ChunkListener.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/ChunkListener.java index 525783450..b7e62eef7 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/ChunkListener.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listeners/ChunkListener.java @@ -1,7 +1,5 @@ package com.plotsquared.bukkit.listeners; -import static com.intellectualcrafters.plot.util.ReflectionUtils.getRefClass; - import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.object.ChunkLoc; @@ -35,25 +33,30 @@ import java.util.ArrayDeque; import java.util.HashMap; import java.util.Map.Entry; +import static com.intellectualcrafters.plot.util.ReflectionUtils.getRefClass; + public class ChunkListener implements Listener { - - private final RefClass classChunk = getRefClass("{nms}.Chunk"); - private final RefClass classCraftChunk = getRefClass("{cb}.CraftChunk"); - private final RefField mustSave = classChunk.getField("mustSave"); - private Chunk lastChunk = null; + private RefMethod methodGetHandleChunk; - + private RefClass classChunk; + private RefClass classCraftChunk; + private RefField mustSave; + private Chunk lastChunk; + public ChunkListener() { - RefMethod method; - try { - method = classCraftChunk.getMethod("getHandle"); - } catch (final Exception e) { - method = null; - e.printStackTrace(); + if (Settings.CHUNK_PROCESSOR_GC || Settings.CHUNK_PROCESSOR_TRIM_ON_SAVE) { + try { + this.classChunk = getRefClass("{nms}.Chunk"); + this.classCraftChunk = getRefClass("{cb}.CraftChunk"); + this.mustSave = classChunk.getField("mustSave"); + this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle"); + } catch (Throwable e) { + PS.debug("PlotSquared/Server not compatible for chunk processor trim/gc"); + Settings.CHUNK_PROCESSOR_GC = false; + Settings.CHUNK_PROCESSOR_TRIM_ON_SAVE = false; + } } - methodGetHandleChunk = method; - if (!Settings.CHUNK_PROCESSOR_GC) { return; } diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/titles/DefaultTitle.java b/Bukkit/src/main/java/com/plotsquared/bukkit/titles/DefaultTitle.java index 9534b08d6..d817a4e28 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/titles/DefaultTitle.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/titles/DefaultTitle.java @@ -4,8 +4,6 @@ import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.util.AbstractTitle; import com.plotsquared.bukkit.object.BukkitPlayer; -import java.lang.reflect.InvocationTargetException; - public class DefaultTitle extends AbstractTitle { @Override @@ -13,8 +11,7 @@ public class DefaultTitle extends AbstractTitle { try { final DefaultTitleManager title = new DefaultTitleManager(head, sub, in, delay, out); title.send(((BukkitPlayer) player).player); - } catch (ClassNotFoundException | InvocationTargetException | SecurityException | NoSuchMethodException | InstantiationException | - IllegalArgumentException | IllegalAccessException e) { + } catch (Throwable e) { AbstractTitle.TITLE_CLASS = new DefaultTitle_183(); AbstractTitle.TITLE_CLASS.sendTitle(player, head, sub, in, delay, out); } diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/titles/HackTitle.java b/Bukkit/src/main/java/com/plotsquared/bukkit/titles/HackTitle.java index b7312bda4..c11beff45 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/titles/HackTitle.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/titles/HackTitle.java @@ -12,7 +12,7 @@ public class HackTitle extends AbstractTitle { try { final HackTitleManager title = new HackTitleManager(head, sub, in, delay, out); title.send(((BukkitPlayer) player).player); - } catch (Exception e) { + } catch (Throwable e) { PS.debug("&cYour server version does not support titles!"); Settings.TITLES = false; AbstractTitle.TITLE_CLASS = null; diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/Metrics.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/Metrics.java index 7048e0384..96fa1fc22 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/Metrics.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/Metrics.java @@ -20,7 +20,6 @@ //////////////////////////////////////////////////////////////////////////////////////////////////// package com.plotsquared.bukkit.util; -import com.intellectualcrafters.configuration.file.YamlConfiguration; import com.intellectualcrafters.plot.PS; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -64,14 +63,6 @@ public class Metrics { * All of the custom graphs to submit to metrics */ private final Set graphs = Collections.synchronizedSet(new HashSet()); - /** - * The plugin configuration file - */ - private final YamlConfiguration configuration; - /** - * The plugin configuration file - */ - private final File configurationFile; /** * Unique server id */ @@ -90,21 +81,8 @@ public class Metrics { throw new IllegalArgumentException("Plugin cannot be null"); } this.plugin = plugin; - // load the config - configurationFile = getConfigFile(); - configuration = YamlConfiguration.loadConfiguration(configurationFile); - // add some defaults - configuration.addDefault("opt-out", false); - configuration.addDefault("guid", UUID.randomUUID().toString()); - configuration.addDefault("debug", false); - // Do we need to create the file? - if (configuration.get("guid", null) == null) { - configuration.options().header("http://mcstats.org").copyDefaults(true); - configuration.save(configurationFile); - } - // Load the guid then - guid = configuration.getString("guid"); - debug = configuration.getBoolean("debug", false); + guid = UUID.randomUUID().toString(); + debug = false; } /** @@ -276,6 +254,7 @@ public class Metrics { // Each post thereafter will be a ping firstPost = false; } catch (final IOException e) { + e.printStackTrace(); if (debug) { Bukkit.getLogger().log(Level.INFO, "[Metrics] " + e.getMessage()); } @@ -350,6 +329,7 @@ public class Metrics { playersOnline = ((Player[]) Bukkit.class.getMethod("getOnlinePlayers", new Class[0]).invoke(null)).length; } } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ex) { + ex.printStackTrace(); } // END server software specific section -- all code below does not use // any code outside of this class / Java @@ -435,34 +415,43 @@ public class Metrics { if (debug) { PS.debug("[Metrics] Prepared request for " + pluginName + " uncompressed=" + uncompressed.length + " compressed=" + compressed.length); } - // Write the data - String response; - try (OutputStream os = connection.getOutputStream(); - BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { - os.write(compressed); - os.flush(); - // Now read the response - response = reader.readLine(); - } - if (response == null || response.startsWith("ERR") || response.startsWith("7")) { - if (response == null) { - response = "null"; - } else if (response.startsWith("7")) { - response = response.substring(response.startsWith("7,") ? 2 : 1); + try { + try (OutputStream os = connection.getOutputStream()) { + os.write(compressed); + os.flush(); } - throw new IOException(response); - } else { - // Is this the first update this hour? - if ("1".equals(response) || response.contains("This is your first update this hour")) { - synchronized (graphs) { - for (final Graph graph : graphs) { - for (final Plotter plotter : graph.getPlotters()) { - plotter.reset(); + String response; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { + response = reader.readLine(); + if (debug) { + PS.debug("[Metrics] Response for " + pluginName + ": " + response); + } + } + if (response == null || response.startsWith("ERR") || response.startsWith("7")) { + if (response == null) { + response = "null"; + } else if (response.startsWith("7")) { + response = response.substring(response.startsWith("7,") ? 2 : 1); + } + throw new IOException(response); + } else { + // Is this the first update this hour? + if ("1".equals(response) || response.contains("This is your first update this hour")) { + synchronized (graphs) { + for (final Graph graph : graphs) { + for (final Plotter plotter : graph.getPlotters()) { + plotter.reset(); + } } } } } } + catch (Exception e) { + if (debug) { + e.printStackTrace(); + } + } } /** diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_9.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_9.java index 3834797a6..8f62a6381 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_9.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_9.java @@ -338,45 +338,47 @@ public class FastQueue_1_9 extends SlowQueue { continue; } final int[] array = bc.getIdArray(j); - int l = PseudoRandom.random.random(2); - for (int k = 0; k < array.length; k++) { - final int i = array[k]; - if (i < 16) { - continue; - } - final short id = (short) (i >> 4); - switch (id) { // Lighting - default: - if (!fixAll) { - continue; - } - if ((k & 1) == l) { - l = 1 - l; - continue; - } - case 10: - case 11: - case 39: - case 40: - case 50: - case 51: - case 62: - case 74: - case 76: - case 89: - case 122: - case 124: - case 130: - case 138: - case 169: - final int x = MainUtil.x_loc[j][k]; - final int y = MainUtil.y_loc[j][k]; - final int z = MainUtil.z_loc[j][k]; - if (isSurrounded(bc.getIdArrays(), x, y, z)) { - continue; - } - final Object pos = classBlockPositionConstructor.create(X + x, y, Z + z); - relight.call(pos); + if (array != null) { + int l = PseudoRandom.random.random(2); + for (int k = 0; k < array.length; k++) { + final int i = array[k]; + if (i < 16) { + continue; + } + final short id = (short) (i >> 4); + switch (id) { // Lighting + default: + if (!fixAll) { + continue; + } + if ((k & 1) == l) { + l = 1 - l; + continue; + } + case 10: + case 11: + case 39: + case 40: + case 50: + case 51: + case 62: + case 74: + case 76: + case 89: + case 122: + case 124: + case 130: + case 138: + case 169: + final int x = MainUtil.x_loc[j][k]; + final int y = MainUtil.y_loc[j][k]; + final int z = MainUtil.z_loc[j][k]; + if (isSurrounded(bc.getIdArrays(), x, y, z)) { + continue; + } + final Object pos = classBlockPositionConstructor.create(X + x, y, Z + z); + relight.call(pos); + } } } } diff --git a/Core/src/main/java/com/intellectualcrafters/plot/commands/Setup.java b/Core/src/main/java/com/intellectualcrafters/plot/commands/Setup.java index de0055ea7..9f04cff40 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/commands/Setup.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/commands/Setup.java @@ -20,11 +20,6 @@ //////////////////////////////////////////////////////////////////////////////////////////////////// package com.intellectualcrafters.plot.commands; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map.Entry; - import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.ConfigurationNode; @@ -39,6 +34,11 @@ import com.intellectualcrafters.plot.util.StringMan; import com.intellectualcrafters.plot.util.WorldUtil; import com.plotsquared.general.commands.CommandDeclaration; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map.Entry; + @CommandDeclaration( command = "setup", permission = "plots.admin.command.setup", @@ -132,14 +132,13 @@ public class Setup extends SubCommand { object.type = allTypes.indexOf(args[0].toLowerCase()); final GeneratorWrapper gen = SetupUtils.generators.get(object.setupGenerator); if (object.type == 0) { - object.current = 7; + object.current = 6; if (object.step == null) { object.plotManager = object.setupGenerator; object.step = SetupUtils.generators.get(object.plotManager).getPlotGenerator().getNewPlotArea("CheckingPlotSquaredGenerator", null, null, null).getSettingNodes(); SetupUtils.generators.get(object.plotManager).getPlotGenerator().processSetup(object); } if (object.step.length == 0) { - object.current = 7; MainUtil.sendMessage(plr, "&6What do you want your world to be called?"); object.setup_index = 0; return true; diff --git a/Core/src/main/java/com/intellectualcrafters/plot/generator/AugmentedUtils.java b/Core/src/main/java/com/intellectualcrafters/plot/generator/AugmentedUtils.java index 86a63eb15..77c068d62 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/generator/AugmentedUtils.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/generator/AugmentedUtils.java @@ -1,18 +1,13 @@ package com.intellectualcrafters.plot.generator; -import java.util.Set; - import com.intellectualcrafters.plot.PS; -import com.intellectualcrafters.plot.object.LazyResult; -import com.intellectualcrafters.plot.object.PlotArea; -import com.intellectualcrafters.plot.object.PlotBlock; -import com.intellectualcrafters.plot.object.PlotManager; -import com.intellectualcrafters.plot.object.PseudoRandom; -import com.intellectualcrafters.plot.object.RegionWrapper; +import com.intellectualcrafters.plot.object.*; import com.intellectualcrafters.plot.util.PlotChunk; import com.intellectualcrafters.plot.util.SetQueue; import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper; +import java.util.Set; + public class AugmentedUtils { private static boolean enabled = true; @@ -23,9 +18,9 @@ public class AugmentedUtils { enabled = true; } - public static void generate(final String world, final int cx, final int cz, LazyResult> lazyChunk) { + public static boolean generate(final String world, final int cx, final int cz, LazyResult> lazyChunk) { if (!enabled) { - return; + return false; } if (lazyChunk == null) { lazyChunk = new LazyResult>() { @@ -40,14 +35,15 @@ public class AugmentedUtils { RegionWrapper region = new RegionWrapper(bx, bx + 15, bz, bz + 15); Set areas = PS.get().getPlotAreas(world, region); if (areas.isEmpty()) { - return; + return false; } final PseudoRandom r = new PseudoRandom(); - r.state = (cx << 16) | (cz & 0xFFFF);; + r.state = (cx << 16) | (cz & 0xFFFF); ChunkWrapper wrap = SetQueue.IMP.new ChunkWrapper(world, cx, cz); + boolean toReturn = false; for (final PlotArea area : areas) { if (area.TYPE == 0) { - return; + return false; } if (area.TERRAIN == 3) { continue; @@ -59,12 +55,13 @@ public class AugmentedUtils { final PlotChunk result = lazyChunk.getOrCreate(); final PlotChunk primaryMask; // coords - int bxx = Math.max(0, area.getRegion().minX - bx); - int bzz = Math.max(0, area.getRegion().minZ - bz); - int txx = Math.min(15, area.getRegion().maxX - bx); - int tzz = Math.min(15, area.getRegion().maxZ - bz); + int bxx,bzz,txx,tzz; // gen if (area.TYPE == 2) { + bxx = Math.max(0, area.getRegion().minX - bx); + bzz = Math.max(0, area.getRegion().minZ - bz); + txx = Math.min(15, area.getRegion().maxX - bx); + tzz = Math.min(15, area.getRegion().maxZ - bz); primaryMask = new PlotChunk(wrap) { @Override public Object getChunkAbs() { @@ -96,6 +93,8 @@ public class AugmentedUtils { } }; } else { + bxx = bzz = 0; + txx = tzz = 15; primaryMask = result; } PlotChunk secondaryMask; @@ -120,6 +119,8 @@ public class AugmentedUtils { } if (!has) { continue; + } else { + toReturn = true; } secondaryMask = new PlotChunk(wrap) { @Override @@ -156,6 +157,7 @@ public class AugmentedUtils { } } } + toReturn = true; } generator.generateChunk(secondaryMask, area, r); } @@ -163,5 +165,6 @@ public class AugmentedUtils { lazyChunk.get().addToQueue(); lazyChunk.get().flush(false); } + return toReturn; } } diff --git a/Core/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotManager.java b/Core/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotManager.java index 69272e951..19d4f38b9 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotManager.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotManager.java @@ -22,14 +22,7 @@ package com.intellectualcrafters.plot.generator; import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.commands.Template; -import com.intellectualcrafters.plot.object.ChunkLoc; -import com.intellectualcrafters.plot.object.FileBytes; -import com.intellectualcrafters.plot.object.Location; -import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.object.PlotArea; -import com.intellectualcrafters.plot.object.PlotBlock; -import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.object.RunnableVal; +import com.intellectualcrafters.plot.object.*; import com.intellectualcrafters.plot.util.*; import java.io.File; @@ -46,19 +39,18 @@ public class HybridPlotManager extends ClassicPlotManager { public void exportTemplate(final PlotArea plotworld) throws IOException { final HashSet files = new HashSet<>( Collections.singletonList(new FileBytes("templates/" + "tmp-data.yml", Template.getBytes(plotworld)))); - final String psRoot = PS.get().IMP.getDirectory() + File.separator; final String dir = "schematics" + File.separator + "GEN_ROAD_SCHEMATIC" + File.separator + plotworld.worldname + File.separator; final String newDir = "schematics" + File.separator + "GEN_ROAD_SCHEMATIC" + File.separator + "__TEMP_DIR__" + File.separator; try { - final File sideroad = new File(psRoot + dir + "sideroad.schematic"); + final File sideroad = MainUtil.getFile(PS.get().IMP.getDirectory(), dir + "sideroad.schematic"); if (sideroad.exists()) { files.add(new FileBytes(newDir + "sideroad.schematic", Files.readAllBytes(sideroad.toPath()))); } - final File intersection = new File(psRoot + dir + "intersection.schematic"); + final File intersection = MainUtil.getFile(PS.get().IMP.getDirectory(), "intersection.schematic"); if (intersection.exists()) { files.add(new FileBytes(newDir + "intersection.schematic", Files.readAllBytes(intersection.toPath()))); } - final File plot = new File(psRoot + dir + "plot.schematic"); + final File plot = MainUtil.getFile(PS.get().IMP.getDirectory(), dir + "plot.schematic"); if (plot.exists()) { files.add(new FileBytes(newDir + "plot.schematic", Files.readAllBytes(plot.toPath()))); } diff --git a/Core/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotWorld.java b/Core/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotWorld.java index d07c5acf2..a1e62add0 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotWorld.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotWorld.java @@ -27,11 +27,13 @@ import com.intellectualcrafters.plot.object.PlotArea; import com.intellectualcrafters.plot.object.PlotBlock; import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.schematic.PlotItem; +import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.MathMan; import com.intellectualcrafters.plot.util.SchematicHandler; import com.intellectualcrafters.plot.util.SchematicHandler.Dimension; import com.intellectualcrafters.plot.util.SchematicHandler.Schematic; +import java.io.File; import java.util.HashMap; import java.util.HashSet; @@ -191,12 +193,12 @@ public class HybridPlotWorld extends ClassicPlotWorld { public void setupSchematics() { G_SCH = new HashMap<>(); - final String schem1Str = "GEN_ROAD_SCHEMATIC/" + worldname + "/sideroad"; - final String schem2Str = "GEN_ROAD_SCHEMATIC/" + worldname + "/intersection"; - final String schem3Str = "GEN_ROAD_SCHEMATIC/" + worldname + "/plot"; - final Schematic schem1 = SchematicHandler.manager.getSchematic(schem1Str); - final Schematic schem2 = SchematicHandler.manager.getSchematic(schem2Str); - final Schematic schem3 = SchematicHandler.manager.getSchematic(schem3Str); + final File schem1File = MainUtil.getFile(PS.get().IMP.getDirectory(),"schematics/GEN_ROAD_SCHEMATIC/" + worldname + "/sideroad.schematic"); + final File schem2File = MainUtil.getFile(PS.get().IMP.getDirectory(), "schematics/GEN_ROAD_SCHEMATIC/" + worldname + "/intersection.schematic"); + final File schem3File = MainUtil.getFile(PS.get().IMP.getDirectory(), "schematics/GEN_ROAD_SCHEMATIC/" + worldname + "/plot.schematic"); + final Schematic schem1 = SchematicHandler.manager.getSchematic(schem1File); + final Schematic schem2 = SchematicHandler.manager.getSchematic(schem2File); + final Schematic schem3 = SchematicHandler.manager.getSchematic(schem3File); final int shift = ROAD_WIDTH / 2; int oddshift = 0; if ((ROAD_WIDTH & 1) != 0) { diff --git a/Core/src/main/java/com/intellectualcrafters/plot/generator/HybridUtils.java b/Core/src/main/java/com/intellectualcrafters/plot/generator/HybridUtils.java index 249963fa1..a9772792d 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/generator/HybridUtils.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/generator/HybridUtils.java @@ -5,32 +5,12 @@ import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; -import com.intellectualcrafters.plot.object.ChunkLoc; -import com.intellectualcrafters.plot.object.Location; -import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.object.PlotAnalysis; -import com.intellectualcrafters.plot.object.PlotArea; -import com.intellectualcrafters.plot.object.PlotBlock; -import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.object.PlotManager; -import com.intellectualcrafters.plot.object.RegionWrapper; -import com.intellectualcrafters.plot.object.RunnableVal; -import com.intellectualcrafters.plot.util.ChunkManager; -import com.intellectualcrafters.plot.util.MathMan; -import com.intellectualcrafters.plot.util.SchematicHandler; -import com.intellectualcrafters.plot.util.SetQueue; -import com.intellectualcrafters.plot.util.TaskManager; +import com.intellectualcrafters.plot.object.*; +import com.intellectualcrafters.plot.util.*; import java.io.File; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; +import java.util.*; import java.util.Map.Entry; -import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; public abstract class HybridUtils { @@ -313,7 +293,7 @@ public abstract class HybridUtils { final Set sideroad = new HashSet<>(Collections.singletonList(new RegionWrapper(sx, ex, sy, ey, sz, ez))); final Set intersection = new HashSet<>(Collections.singletonList(new RegionWrapper(sx, ex, sy, ty, bz, tz))); - final String dir = PS.get().IMP.getDirectory() + File.separator + "schematics" + File.separator + "GEN_ROAD_SCHEMATIC" + File.separator + plot + final String dir = "schematics" + File.separator + "GEN_ROAD_SCHEMATIC" + File.separator + plot .getArea().toString() + File.separator; SchematicHandler.manager.getCompoundTag(world, sideroad, new RunnableVal() { @Override diff --git a/Core/src/main/java/com/intellectualcrafters/plot/object/Plot.java b/Core/src/main/java/com/intellectualcrafters/plot/object/Plot.java index a6b1a5513..104ae2dff 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/object/Plot.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/object/Plot.java @@ -361,10 +361,11 @@ public class Plot { } if (isMerged()) { HashSet plots = getConnectedPlots(); - final HashSet owners = new HashSet(2); + Plot[] array = plots.toArray(new Plot[plots.size()]); + final HashSet owners = new HashSet(1); UUID last = owner; owners.add(owner); - for (Plot current : plots) { + for (Plot current : array) { if (last == null || current.owner.getMostSignificantBits() != last.getMostSignificantBits()) { owners.add(current.owner); last = current.owner; @@ -1953,7 +1954,11 @@ public class Plot { } else if (index < -1) { PS.debug("This should NEVER happen. Seriously, it's impossible."); } - final String name = lines[i - 1].substring(index); + String line = lines[i-1]; + if (line.length() <= index) { + return null; + } + final String name = line.substring(index); if (name.isEmpty()) { return null; } diff --git a/Core/src/main/java/com/intellectualcrafters/plot/util/BO3Handler.java b/Core/src/main/java/com/intellectualcrafters/plot/util/BO3Handler.java index e63faae92..aa211fe51 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/util/BO3Handler.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/util/BO3Handler.java @@ -205,4 +205,4 @@ public class BO3Handler { } return base; } -} +} \ No newline at end of file diff --git a/Core/src/main/java/com/intellectualcrafters/plot/util/ExpireManager.java b/Core/src/main/java/com/intellectualcrafters/plot/util/ExpireManager.java index 7e02232d9..d1da5b4a3 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/util/ExpireManager.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/util/ExpireManager.java @@ -52,7 +52,7 @@ public class ExpireManager { PlotMessage msg = new PlotMessage() .text(num + " " + (num > 1 ? "plots are" : "plot is") + " expired:").color("$1").command("/plot list expired").tooltip("/plot list expired") //.text("\n - ").color("$3").text("Delete all (/plot delete expired)").color("$2").command("/plot delete expired") - .text("\n - ").color("$3").text("Delete this (/plot expired)").color("$2").command("/plot delete").tooltip("/plot delete") + .text("\n - ").color("$3").text("Delete this (/plot delete)").color("$2").command("/plot delete").tooltip("/plot delete") .text("\n - ").color("$3").text("Remind later (/plot set keep 1d)").color("$2").command("/plot set keep 1d").tooltip("/plot set keep 1d") .text("\n - ").color("$3").text("Keep this (/plot set keep true)").color("$2").command("/plot set keep true").tooltip("/plot set keep true"); msg.send(pp); diff --git a/Core/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java b/Core/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java index 9ded120a4..75948b901 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java @@ -356,13 +356,15 @@ public class MainUtil { } return null; } - return player.getLocation().getPlotAbs(); + return player.getCurrentPlot(); } PlotArea area; if (player != null) { - area = player.getApplicablePlotArea(); - } - else { + area = PS.get().getPlotAreaByString(arg); + if (area == null) { + area = player.getApplicablePlotArea(); + } + } else { area = ConsolePlayer.getConsole().getApplicablePlotArea(); } final String[] split = arg.split(";|,"); @@ -376,24 +378,22 @@ public class MainUtil { } else if (split.length == 2) { id = PlotId.fromString(arg); } else { - PlotArea tmp = PS.get().getPlotAreaByString(arg); + Collection plots; if (area == null) { - if (message) { - MainUtil.sendMessage(player, C.NOT_VALID_PLOT_WORLD); - } - return null; + plots = PS.get().getPlots(); } else { - for (final Plot p : area.getPlots()) { - final String name = p.getAlias(); - if (!name.isEmpty() && StringMan.isEqualIgnoreCase(name, arg)) { - return p; - } - } - if (message) { - MainUtil.sendMessage(player, C.NOT_VALID_PLOT_ID); - } - return null; + plots = area.getPlots(); } + for (final Plot p : plots) { + final String name = p.getAlias(); + if (!name.isEmpty() && StringMan.isEqualIgnoreCase(name, arg)) { + return p; + } + } + if (message) { + MainUtil.sendMessage(player, C.NOT_VALID_PLOT_ID); + } + return null; } if (id == null) { if (message) { diff --git a/Core/src/main/java/com/intellectualcrafters/plot/util/SchematicHandler.java b/Core/src/main/java/com/intellectualcrafters/plot/util/SchematicHandler.java index 99db22e59..01cd4d757 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/util/SchematicHandler.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/util/SchematicHandler.java @@ -62,7 +62,7 @@ public abstract class SchematicHandler { if (outputDir == null) { directory = Settings.SCHEMATIC_SAVE_PATH; } else { - directory = outputDir.getPath(); + directory = outputDir.getAbsolutePath(); } final Runnable THIS = this; SchematicHandler.manager.getCompoundTag(plot, new RunnableVal() { @@ -827,7 +827,7 @@ public abstract class SchematicHandler { ids2[i] = (byte) ids[i]; } CompoundTag tag = createTag(ids2, datas, schematicDimension); - SchematicHandler.this.save(tag, file.toString()); + SchematicHandler.this.save(tag, file.getAbsolutePath()); } }