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 e67a98ce3..9136cb6d1 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/object/Plot.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/object/Plot.java @@ -1202,8 +1202,8 @@ public class Plot { x = bot.getX() + loc.x; z = bot.getZ() + loc.z; } - int y = isLoaded() ? WorldUtil.IMP.getHighestBlock(plot.getWorldName(), x, z) : 64; - return new Location(plot.getWorldName(), x, y + 1, z); + int y = loc.y < 1 ? (isLoaded() ? WorldUtil.IMP.getHighestBlock(plot.getWorldName(), x, z) + 1 : 63) : loc.y; + return new Location(plot.getWorldName(), x, y, z); } // Side return plot.getSide(); diff --git a/Core/src/main/java/com/intellectualcrafters/plot/object/PlotArea.java b/Core/src/main/java/com/intellectualcrafters/plot/object/PlotArea.java index 33bd9385d..94472ed59 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/object/PlotArea.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/object/PlotArea.java @@ -10,28 +10,15 @@ import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.flag.Flags; import com.intellectualcrafters.plot.generator.GridPlotWorld; import com.intellectualcrafters.plot.generator.IndependentPlotGenerator; -import com.intellectualcrafters.plot.util.EconHandler; -import com.intellectualcrafters.plot.util.EventUtil; -import com.intellectualcrafters.plot.util.MainUtil; -import com.intellectualcrafters.plot.util.MathMan; -import com.intellectualcrafters.plot.util.PlotGameMode; -import com.intellectualcrafters.plot.util.StringMan; +import com.intellectualcrafters.plot.util.*; import com.intellectualcrafters.plot.util.area.QuadMap; import com.intellectualcrafters.plot.util.block.GlobalBlockQueue; import com.intellectualcrafters.plot.util.block.LocalBlockQueue; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; + import javax.annotation.Nullable; +import java.util.*; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; /** * @author Jesse Boyd @@ -283,8 +270,7 @@ public abstract class PlotArea { this.DEFAULT_HOME = new PlotLoc(Integer.MAX_VALUE, Integer.MAX_VALUE); } else { try { - String[] split = homeDefault.split(","); - this.DEFAULT_HOME = new PlotLoc(Integer.parseInt(split[0]), Integer.parseInt(split[1])); + this.DEFAULT_HOME = PlotLoc.fromString(homeDefault); } catch (NumberFormatException ignored) { this.DEFAULT_HOME = null; } diff --git a/Core/src/main/java/com/intellectualcrafters/plot/object/PlotLoc.java b/Core/src/main/java/com/intellectualcrafters/plot/object/PlotLoc.java index e2d737147..ec8a81112 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/object/PlotLoc.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/object/PlotLoc.java @@ -3,11 +3,20 @@ package com.intellectualcrafters.plot.object; import com.intellectualcrafters.plot.util.StringMan; public class PlotLoc { + public int x; + public int y; public int z; public PlotLoc(int x, int z) { this.x = x; + this.y = -1; + this.z = z; + } + + public PlotLoc(int x, int y, int z) { + this.x = x; + this.y = y; this.z = z; } @@ -19,7 +28,13 @@ public class PlotLoc { } else { try { String[] split = input.split(","); - return new PlotLoc(Integer.parseInt(split[0]), Integer.parseInt(split[1])); + if (split.length == 2) { + return new PlotLoc(Integer.parseInt(split[0]), Integer.parseInt(split[1])); + } else if (split.length == 3) { + return new PlotLoc(Integer.parseInt(split[0]), Integer.parseInt(split[1]), Integer.parseInt(split[2])); + } else { + throw new IllegalArgumentException(String.format("Unable to deserialize: %s", input)); + } } catch (NumberFormatException ignored) { return null; } @@ -31,13 +46,17 @@ public class PlotLoc { int prime = 31; int result = 1; result = (prime * result) + this.x; + result = (prime * result) + this.y; result = (prime * result) + this.z; return result; } @Override public String toString() { - return this.x + "," + this.z; + if (this.y == -1) { + return String.format("%d,%d", x, z); + } + return String.format("%d,%d,%d", x, y, z); } @Override @@ -52,6 +71,6 @@ public class PlotLoc { return false; } PlotLoc other = (PlotLoc) obj; - return (this.x == other.x) && (this.z == other.z); + return (this.x == other.x) && (this.y == other.y) && (this.z == other.z); } }