From 3265545dd2f6a35d6d81d49b7c571c3db1ffb097 Mon Sep 17 00:00:00 2001 From: space_fountain Date: Sat, 14 Feb 2015 16:20:27 -0500 Subject: [PATCH 1/5] added new config options --- .../com/wimbli/WorldBorder/BorderData.java | 39 ++++++++++++++++++- .../java/com/wimbli/WorldBorder/Config.java | 16 ++++++++ src/main/main.iml | 11 ++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/main/main.iml diff --git a/src/main/java/com/wimbli/WorldBorder/BorderData.java b/src/main/java/com/wimbli/WorldBorder/BorderData.java index 325189cc..378bf499 100644 --- a/src/main/java/com/wimbli/WorldBorder/BorderData.java +++ b/src/main/java/com/wimbli/WorldBorder/BorderData.java @@ -5,6 +5,7 @@ import org.bukkit.Chunk; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; @@ -275,9 +276,45 @@ else if (zLoc >= maxZ) if (!tChunk.isLoaded()) tChunk.load(); + double originalY = yLoc; + yLoc = getSafeY(loc.getWorld(), ixLoc, Location.locToBlock(yLoc), izLoc, flying); + int searchArea = Config.getSearchArea(); if (yLoc == -1) - return null; + { + for (int cX = ixLoc - searchArea; cX <= ixLoc + searchArea; ++cX) + { + for (int cZ = izLoc - searchArea; cZ <= izLoc + searchArea; ++cZ) + { + if (cX == ixLoc && cZ == izLoc) + return null; + ixLoc = cX; + izLoc = cZ; + + if (insideBorder(new CoordXZ(ixLoc, izLoc))) + continue; + + // Make sure the chunk we're checking in is actually loaded + tChunk = loc.getWorld().getChunkAt(CoordXZ.blockToChunk(ixLoc), CoordXZ.blockToChunk(izLoc)); + if (!tChunk.isLoaded()) + tChunk.load(); + + yLoc = getSafeY(loc.getWorld(), ixLoc, Location.locToBlock(yLoc), izLoc, flying); + if (yLoc != -1) + break; + } + if (yLoc != -1) + break; + } + if (!Config.getFixTpTarget()) + ixLoc = Location.locToBlock(xLoc); + izLoc = Location.locToBlock(zLoc); + + loc.getWorld().getBlockAt(ixLoc, Location.locToBlock(originalY) - 1, izLoc).setType(Material.STONE); + loc.getWorld().getBlockAt(ixLoc, Location.locToBlock(originalY), izLoc).setType(Material.AIR); + loc.getWorld().getBlockAt(ixLoc, Location.locToBlock(originalY) + 1, izLoc).setType(Material.AIR); + return new Location(loc.getWorld(), Math.floor(xLoc) + 0.5, originalY, Math.floor(zLoc) + 0.5, loc.getYaw(), loc.getPitch()); + } return new Location(loc.getWorld(), Math.floor(xLoc) + 0.5, yLoc, Math.floor(zLoc) + 0.5, loc.getYaw(), loc.getPitch()); } diff --git a/src/main/java/com/wimbli/WorldBorder/Config.java b/src/main/java/com/wimbli/WorldBorder/Config.java index 5a6216aa..2ee7974b 100644 --- a/src/main/java/com/wimbli/WorldBorder/Config.java +++ b/src/main/java/com/wimbli/WorldBorder/Config.java @@ -55,6 +55,8 @@ public class Config private static int fillAutosaveFrequency = 30; private static int fillMemoryTolerance = 500; private static boolean preventBlockPlace = false; + private static int searchArea = 0; + private static boolean fixTpTarget = false; // for monitoring plugin efficiency // public static long timeUsed = 0; @@ -283,6 +285,16 @@ public static boolean getDenyEnderpearl() return denyEnderpearl; } + public static boolean getFixTpTarget() + { + return fixTpTarget; + } + + public static int getSearchArea() + { + return searchArea; + } + public static void setDenyEnderpearl(boolean enable) { denyEnderpearl = enable; @@ -580,6 +592,8 @@ public static void load(WorldBorder master, boolean logIt) importBypassStringList(cfg.getStringList("bypass-list-uuids")); fillMemoryTolerance = cfg.getInt("fill-memory-tolerance", 500); preventBlockPlace = cfg.getBoolean("prevent-block-place"); + searchArea = cfg.getInt("search-area", 0); + fixTpTarget = cfg.getBoolean("fix-tp-target"); StartBorderTimer(); @@ -687,6 +701,8 @@ public static void save(boolean logIt, boolean storeFillTask) cfg.set("bypass-list-uuids", exportBypassStringList()); cfg.set("fill-memory-tolerance", fillMemoryTolerance); cfg.set("prevent-block-place", preventBlockPlace); + cfg.set("search-area", searchArea); + cfg.set("fix-tp-target", fixTpTarget); cfg.set("worlds", null); for(Entry stringBorderDataEntry : borders.entrySet()) diff --git a/src/main/main.iml b/src/main/main.iml new file mode 100644 index 00000000..908ad4f5 --- /dev/null +++ b/src/main/main.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file From 6b22a24c2b1b83b6c65800e65477ce32f29226b5 Mon Sep 17 00:00:00 2001 From: spaceFountain Date: Sat, 14 Feb 2015 16:22:42 -0500 Subject: [PATCH 2/5] not sure how this got added --- src/main/main.iml | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 src/main/main.iml diff --git a/src/main/main.iml b/src/main/main.iml deleted file mode 100644 index 908ad4f5..00000000 --- a/src/main/main.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file From bd5bd5b0b4f83ed51bfbdc02cb590bba0b8ecdde Mon Sep 17 00:00:00 2001 From: spaceFountain Date: Sat, 14 Feb 2015 16:23:54 -0500 Subject: [PATCH 3/5] Updated version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c84f63ec..47d51661 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.wimbli.WorldBorder WorldBorder - 1.8.2_dev + 1.8.3_dev WorldBorder https://github.com/Brettflan/WorldBorder From 741308239af5185511816854adb406c2c95e050a Mon Sep 17 00:00:00 2001 From: spaceFountain Date: Thu, 26 Feb 2015 09:45:48 -0500 Subject: [PATCH 4/5] Fix bugs with config implementation --- .../com/wimbli/WorldBorder/BorderData.java | 45 +++++++++++-------- src/main/resources/plugin.yml | 2 +- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/wimbli/WorldBorder/BorderData.java b/src/main/java/com/wimbli/WorldBorder/BorderData.java index 378bf499..7249bad4 100644 --- a/src/main/java/com/wimbli/WorldBorder/BorderData.java +++ b/src/main/java/com/wimbli/WorldBorder/BorderData.java @@ -279,20 +279,20 @@ else if (zLoc >= maxZ) double originalY = yLoc; yLoc = getSafeY(loc.getWorld(), ixLoc, Location.locToBlock(yLoc), izLoc, flying); - int searchArea = Config.getSearchArea(); if (yLoc == -1) { - for (int cX = ixLoc - searchArea; cX <= ixLoc + searchArea; ++cX) - { - for (int cZ = izLoc - searchArea; cZ <= izLoc + searchArea; ++cZ) - { + int searchArea = Config.getSearchArea(); + for (int cX = ixLoc - searchArea; cX <= ixLoc + searchArea; ++cX) { + for (int cZ = izLoc - searchArea; cZ <= izLoc + searchArea; ++cZ) { if (cX == ixLoc && cZ == izLoc) - return null; + continue; // Skips the block that was already checked + + if (insideBorder(new CoordXZ(cX, cZ))) + continue; + ixLoc = cX; izLoc = cZ; - if (insideBorder(new CoordXZ(ixLoc, izLoc))) - continue; // Make sure the chunk we're checking in is actually loaded tChunk = loc.getWorld().getChunkAt(CoordXZ.blockToChunk(ixLoc), CoordXZ.blockToChunk(izLoc)); @@ -300,20 +300,27 @@ else if (zLoc >= maxZ) tChunk.load(); yLoc = getSafeY(loc.getWorld(), ixLoc, Location.locToBlock(yLoc), izLoc, flying); - if (yLoc != -1) + if (yLoc != -1) { + xLoc = cX; + zLoc = cZ; + ixLoc = Location.locToBlock(xLoc); + izLoc = Location.locToBlock(zLoc); break; + } + } + } + + if (yLoc == -1) + { + if (Config.getFixTpTarget()) { + loc.getWorld().getBlockAt(ixLoc, Location.locToBlock(originalY) - 1, izLoc).setType(Material.STONE); + loc.getWorld().getBlockAt(ixLoc, Location.locToBlock(originalY), izLoc).setType(Material.AIR); + loc.getWorld().getBlockAt(ixLoc, Location.locToBlock(originalY) + 1, izLoc).setType(Material.AIR); + return new Location(loc.getWorld(), Math.floor(xLoc) + 0.5, originalY, Math.floor(zLoc) + 0.5, loc.getYaw(), loc.getPitch()); } - if (yLoc != -1) - break; + return null; } - if (!Config.getFixTpTarget()) - ixLoc = Location.locToBlock(xLoc); - izLoc = Location.locToBlock(zLoc); - - loc.getWorld().getBlockAt(ixLoc, Location.locToBlock(originalY) - 1, izLoc).setType(Material.STONE); - loc.getWorld().getBlockAt(ixLoc, Location.locToBlock(originalY), izLoc).setType(Material.AIR); - loc.getWorld().getBlockAt(ixLoc, Location.locToBlock(originalY) + 1, izLoc).setType(Material.AIR); - return new Location(loc.getWorld(), Math.floor(xLoc) + 0.5, originalY, Math.floor(zLoc) + 0.5, loc.getYaw(), loc.getPitch()); + return new Location(loc.getWorld(), Math.floor(xLoc) + 0.5, yLoc, Math.floor(zLoc) + 0.5, loc.getYaw(), loc.getPitch()); } return new Location(loc.getWorld(), Math.floor(xLoc) + 0.5, yLoc, Math.floor(zLoc) + 0.5, loc.getYaw(), loc.getPitch()); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 05fb0ae5..790bfda5 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: WorldBorder author: Brettflan description: Efficient, feature-rich plugin for limiting the size of your worlds. -version: 1.8.1 +version: 1.8.2 main: com.wimbli.WorldBorder.WorldBorder softdepend: - dynmap From aa6ac4425eddb7aa39d814b709cbb542b780e681 Mon Sep 17 00:00:00 2001 From: spaceFountain Date: Thu, 26 Feb 2015 09:47:35 -0500 Subject: [PATCH 5/5] Fix bugs with config implementation --- pom.xml | 2 +- src/main/resources/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 47d51661..206f7f27 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.wimbli.WorldBorder WorldBorder - 1.8.3_dev + 1.8.4_dev WorldBorder https://github.com/Brettflan/WorldBorder diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 790bfda5..e794a86f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: WorldBorder author: Brettflan description: Efficient, feature-rich plugin for limiting the size of your worlds. -version: 1.8.2 +version: 1.8.4 main: com.wimbli.WorldBorder.WorldBorder softdepend: - dynmap