From 2a8415502e589ca7d19de84f5a57e1e3be8dcb5f Mon Sep 17 00:00:00 2001 From: boy0001 Date: Wed, 18 Feb 2015 23:09:30 +1100 Subject: [PATCH] More generator work --- .../intellectualcrafters/plot/PlotMain.java | 10 +- .../plot/commands/Setup.java | 6 +- .../plot/commands/Unlink.java | 9 + .../plot/generator/ClassicPlotManager.java | 215 +----------------- .../plot/generator/ClassicPlotWorld.java | 17 -- .../plot/generator/GridPlotWorld.java | 3 + .../plot/generator/HybridPlotManager.java | 5 +- .../plot/generator/HybridPlotWorld.java | 12 +- .../plot/generator/SquarePlotManager.java | 210 +++++++++++++++++ .../plot/generator/SquarePlotWorld.java | 21 ++ 10 files changed, 269 insertions(+), 239 deletions(-) diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotMain.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotMain.java index 6467c70d5..f06269307 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotMain.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotMain.java @@ -38,6 +38,7 @@ import com.intellectualcrafters.plot.flag.FlagValue; import com.intellectualcrafters.plot.generator.AugmentedPopulator; import com.intellectualcrafters.plot.generator.HybridGen; import com.intellectualcrafters.plot.generator.HybridPlotWorld; +import com.intellectualcrafters.plot.generator.SquarePlotManager; import com.intellectualcrafters.plot.listeners.*; import com.intellectualcrafters.plot.object.*; import com.intellectualcrafters.plot.titles.AbstractTitle; @@ -48,8 +49,10 @@ import com.intellectualcrafters.plot.uuid.DefaultUUIDWrapper; import com.intellectualcrafters.plot.uuid.OfflineUUIDWrapper; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; + import me.confuser.barapi.BarAPI; import net.milkbowl.vault.economy.Economy; + import org.bukkit.*; import org.bukkit.Location; import org.bukkit.command.PluginCommand; @@ -594,7 +597,6 @@ public class PlotMain extends JavaPlugin implements Listener { * * @param c message */ - @SuppressWarnings("unused") public static void sendConsoleSenderMessage(final C c) { sendConsoleSenderMessage(c.s()); } @@ -661,7 +663,6 @@ public class PlotMain extends JavaPlugin implements Listener { /** * Load configuration files */ - @SuppressWarnings("deprecation") public static void configs() { final File folder = new File(getMain().getDataFolder() + File.separator + "config"); if (!folder.exists() && !folder.mkdirs()) { @@ -758,7 +759,6 @@ public class PlotMain extends JavaPlugin implements Listener { /** * Kill all entities on roads */ - @SuppressWarnings("deprecation") public static void killAllEntities() { Bukkit.getScheduler().scheduleSyncRepeatingTask(getMain(), new Runnable() { long ticked = 0l; @@ -1000,8 +1000,8 @@ public class PlotMain extends JavaPlugin implements Listener { } catch (final IOException e) { e.printStackTrace(); } - if (plotWorld.TYPE == 2 && !Settings.ENABLE_CLUSTERS) { - sendConsoleSenderMessage("&c[ERROR] World '" + world + "' in settings.yml is not using PlotSquared generator! Please enable plot custers or delete this world from your settings.yml!"); + if ((plotWorld.TYPE == 2 && !Settings.ENABLE_CLUSTERS) || !(plotManager instanceof SquarePlotManager)) { + sendConsoleSenderMessage("&c[ERROR] World '" + world + "' in settings.yml is not using PlotSquared generator! Please set the generator correctly or delete the world from the 'settings.yml'!"); return; } addPlotWorld(world, plotWorld, plotManager); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Setup.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Setup.java index a59bde4ac..71dfc9dcb 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Setup.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Setup.java @@ -40,6 +40,7 @@ import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.ConfigurationNode; import com.intellectualcrafters.plot.config.Settings; +import com.intellectualcrafters.plot.generator.SquarePlotManager; import com.intellectualcrafters.plot.object.PlotGenerator; import com.intellectualcrafters.plot.util.PlayerFunctions; @@ -74,7 +75,10 @@ public class Setup extends SubCommand { PlotMain.removePlotWorld(testWorld); final String name = plugin.getDescription().getName(); if (generator instanceof PlotGenerator) { - generators.put(name, (PlotGenerator) generator); + PlotGenerator pgen = (PlotGenerator) generator; + if (pgen.getPlotManager() instanceof SquarePlotManager) { + generators.put(name, pgen); + } } } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unlink.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unlink.java index c23431314..27afe382c 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unlink.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unlink.java @@ -140,6 +140,15 @@ public class Unlink extends SubCommand { } } manager.finishPlotUnlink(world, plotworld, ids); + for (PlotId id : ids) { + Plot myPlot = PlotHelper.getPlot(world, id); + if (plot.hasOwner()) { + String name = UUIDHandler.getName(myPlot.owner); + if (name != null) { + PlotHelper.setSign(world, name, myPlot); + } + } + } return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotManager.java index 01972dd77..4309b6234 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotManager.java @@ -121,37 +121,6 @@ public abstract class ClassicPlotManager extends SquarePlotManager { return true; } - /** - * Set a plot biome - */ - @Override - public boolean setBiome(final World world, final Plot plot, final Biome biome) { - - final int bottomX = PlotHelper.getPlotBottomLoc(world, plot.id).getBlockX() - 1; - final int topX = PlotHelper.getPlotTopLoc(world, plot.id).getBlockX() + 1; - final int bottomZ = PlotHelper.getPlotBottomLoc(world, plot.id).getBlockZ() - 1; - final int topZ = PlotHelper.getPlotTopLoc(world, plot.id).getBlockZ() + 1; - - final Block block = world.getBlockAt(PlotHelper.getPlotBottomLoc(world, plot.id).add(1, 1, 1)); - final Biome current = block.getBiome(); - if (biome.equals(current)) { - return false; - } - - for (int x = bottomX; x <= topX; x++) { - for (int z = bottomZ; z <= topZ; z++) { - final Block blk = world.getBlockAt(x, 0, z); - final Biome c = blk.getBiome(); - if (c.equals(biome)) { - x += 15; - continue; - } - blk.setBiome(biome); - } - } - return true; - } - /** * PLOT MERGING */ @@ -292,14 +261,6 @@ public abstract class ClassicPlotManager extends SquarePlotManager { return true; } - @Override - public boolean clearPlot(final World world, final PlotWorld plotworld, final Plot plot, final boolean isDelete, Runnable whendone) { - final Location pos1 = PlotHelper.getPlotBottomLoc(world, plot.id).add(1, 0, 1); - final Location pos2 = PlotHelper.getPlotTopLoc(world, plot.id); - ChunkManager.regenerateRegion(pos1, pos2, whendone); - return true; - } - /** * Finishing off plot merging by adding in the walls surrounding the plot (OPTIONAL)(UNFINISHED) */ @@ -316,17 +277,11 @@ public abstract class ClassicPlotManager extends SquarePlotManager { @Override public boolean finishPlotUnlink(final World world, final PlotWorld plotworld, final ArrayList plotIds) { - PlotBlock block = ((ClassicPlotWorld) plotworld).WALL_BLOCK; - if (block.id != 0) { - for (PlotId id : plotIds) { - setWall(world, plotworld, id, new PlotBlock[] {(( ClassicPlotWorld) plotworld).WALL_BLOCK }); - Plot plot = PlotHelper.getPlot(world, id); - if (plot.hasOwner()) { - String name = UUIDHandler.getName(plot.owner); - if (name != null) { - PlotHelper.setSign(world, name, plot); - } - } + PlotBlock block = ((ClassicPlotWorld) plotworld).CLAIMED_WALL_BLOCK; + PlotBlock unclaim = ((ClassicPlotWorld) plotworld).WALL_BLOCK; + for (PlotId id : plotIds) { + if (block.equals(unclaim)) { + setWall(world, plotworld, id, new PlotBlock[] {block }); } } return true; @@ -346,7 +301,7 @@ public abstract class ClassicPlotManager extends SquarePlotManager { public boolean claimPlot(World world, final PlotWorld plotworld, Plot plot) { PlotBlock unclaim = ((ClassicPlotWorld) plotworld).WALL_BLOCK; PlotBlock claim = ((ClassicPlotWorld) plotworld).CLAIMED_WALL_BLOCK; - if (claim != unclaim) { + if (claim.equals(unclaim)) { setWall(world, plotworld, plot.id, new PlotBlock[] {claim}); } return true; @@ -371,19 +326,6 @@ public abstract class ClassicPlotManager extends SquarePlotManager { }; } - @Override - public Location getPlotTopLocAbs(final PlotWorld plotworld, final PlotId plotid) { - final ClassicPlotWorld dpw = ((ClassicPlotWorld) plotworld); - - final int px = plotid.x; - final int pz = plotid.y; - - final int x = (px * (dpw.ROAD_WIDTH + dpw.PLOT_WIDTH)) - ((int) Math.floor(dpw.ROAD_WIDTH / 2)) - 1; - final int z = (pz * (dpw.ROAD_WIDTH + dpw.PLOT_WIDTH)) - ((int) Math.floor(dpw.ROAD_WIDTH / 2)) - 1; - - return new Location(Bukkit.getWorld(plotworld.worldname), x, 256, z); - } - /** * Remove sign for a plot */ @@ -392,149 +334,4 @@ public abstract class ClassicPlotManager extends SquarePlotManager { final ClassicPlotWorld dpw = (ClassicPlotWorld) plotworld; return new Location(world, PlotHelper.getPlotBottomLoc(world, plot.id).getBlockX(), dpw.ROAD_HEIGHT + 1, PlotHelper.getPlotBottomLoc(world, plot.id).getBlockZ() - 1); } - - @Override - public PlotId getPlotIdAbs(final PlotWorld plotworld, final Location loc) { - final ClassicPlotWorld dpw = ((ClassicPlotWorld) plotworld); - - // get x,z loc - int x = loc.getBlockX(); - int z = loc.getBlockZ(); - - // get plot size - final int size = dpw.PLOT_WIDTH + dpw.ROAD_WIDTH; - - // get size of path on bottom part, and top part of plot - // (As 0,0 is in the middle of a road, not the very start) - int pathWidthLower; - if ((dpw.ROAD_WIDTH % 2) == 0) { - pathWidthLower = (int) (Math.floor(dpw.ROAD_WIDTH / 2) - 1); - } else { - pathWidthLower = (int) Math.floor(dpw.ROAD_WIDTH / 2); - } - - // calulating how many shifts need to be done - int dx = x / size; - int dz = z / size; - if (x < 0) { - dx--; - x += ((-dx) * size); - } - if (z < 0) { - dz--; - z += ((-dz) * size); - } - - // reducing to first plot - final int rx = (x) % size; - final int rz = (z) % size; - - // checking if road (return null if so) - final int end = pathWidthLower + dpw.PLOT_WIDTH; - final boolean northSouth = (rz <= pathWidthLower) || (rz > end); - final boolean eastWest = (rx <= pathWidthLower) || (rx > end); - if (northSouth || eastWest) { - return null; - } - // returning the plot id (based on the number of shifts required) - return new PlotId(dx + 1, dz + 1); - } - - @Override - public PlotId getPlotId(final PlotWorld plotworld, final Location loc) { - final ClassicPlotWorld dpw = ((ClassicPlotWorld) plotworld); - - int x = loc.getBlockX(); - int z = loc.getBlockZ(); - - if (plotworld == null) { - return null; - } - final int size = dpw.PLOT_WIDTH + dpw.ROAD_WIDTH; - int pathWidthLower; - if ((dpw.ROAD_WIDTH % 2) == 0) { - pathWidthLower = (int) (Math.floor(dpw.ROAD_WIDTH / 2) - 1); - } else { - pathWidthLower = (int) Math.floor(dpw.ROAD_WIDTH / 2); - } - - int dx = x / size; - int dz = z / size; - - if (x < 0) { - dx--; - x += ((-dx) * size); - } - if (z < 0) { - dz--; - z += ((-dz) * size); - } - - final int rx = (x) % size; - final int rz = (z) % size; - - final int end = pathWidthLower + dpw.PLOT_WIDTH; - - final boolean northSouth = (rz <= pathWidthLower) || (rz > end); - final boolean eastWest = (rx <= pathWidthLower) || (rx > end); - if (northSouth && eastWest) { - // This means you are in the intersection - final PlotId id = PlayerFunctions.getPlotAbs(loc.add(dpw.ROAD_WIDTH, 0, dpw.ROAD_WIDTH)); - final Plot plot = PlotMain.getPlots(loc.getWorld()).get(id); - if (plot == null) { - return null; - } - if ((plot.settings.getMerged(0) && plot.settings.getMerged(3))) { - return PlayerFunctions.getBottomPlot(loc.getWorld(), plot).id; - } - return null; - } - if (northSouth) { - // You are on a road running West to East (yeah, I named the var - // poorly) - final PlotId id = PlayerFunctions.getPlotAbs(loc.add(0, 0, dpw.ROAD_WIDTH)); - final Plot plot = PlotMain.getPlots(loc.getWorld()).get(id); - if (plot == null) { - return null; - } - if (plot.settings.getMerged(0)) { - return PlayerFunctions.getBottomPlot(loc.getWorld(), plot).id; - } - return null; - } - if (eastWest) { - // This is the road separating an Eastern and Western plot - final PlotId id = PlayerFunctions.getPlotAbs(loc.add(dpw.ROAD_WIDTH, 0, 0)); - final Plot plot = PlotMain.getPlots(loc.getWorld()).get(id); - if (plot == null) { - return null; - } - if (plot.settings.getMerged(3)) { - return PlayerFunctions.getBottomPlot(loc.getWorld(), plot).id; - } - return null; - } - final PlotId id = new PlotId(dx + 1, dz + 1); - final Plot plot = PlotMain.getPlots(loc.getWorld()).get(id); - if (plot == null) { - return id; - } - return PlayerFunctions.getBottomPlot(loc.getWorld(), plot).id; - } - - /** - * Get the bottom plot loc (some basic math) - */ - @Override - public Location getPlotBottomLocAbs(final PlotWorld plotworld, final PlotId plotid) { - final ClassicPlotWorld dpw = ((ClassicPlotWorld) plotworld); - - final int px = plotid.x; - final int pz = plotid.y; - - final int x = (px * (dpw.ROAD_WIDTH + dpw.PLOT_WIDTH)) - dpw.PLOT_WIDTH - ((int) Math.floor(dpw.ROAD_WIDTH / 2)) - 1; - final int z = (pz * (dpw.ROAD_WIDTH + dpw.PLOT_WIDTH)) - dpw.PLOT_WIDTH - ((int) Math.floor(dpw.ROAD_WIDTH / 2)) - 1; - - return new Location(Bukkit.getWorld(plotworld.worldname), x, 1, z); - } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotWorld.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotWorld.java index 37f16b9dd..5513c6742 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotWorld.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotWorld.java @@ -12,8 +12,6 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld { public static int ROAD_HEIGHT_DEFAULT = 64; public static int PLOT_HEIGHT_DEFAULT = 64; public static int WALL_HEIGHT_DEFAULT = 64; - public static int PLOT_WIDTH_DEFAULT = 32; - public static int ROAD_WIDTH_DEFAULT = 7; public static PlotBlock[] MAIN_BLOCK_DEFAULT = new PlotBlock[] { new PlotBlock((short) 1, (byte) 0) }; public static PlotBlock[] TOP_BLOCK_DEFAULT = new PlotBlock[] { new PlotBlock((short) 2, (byte) 0) }; public static PlotBlock WALL_BLOCK_DEFAULT = new PlotBlock((short) 44, (byte) 0); @@ -24,8 +22,6 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld { public int ROAD_HEIGHT; public int PLOT_HEIGHT; public int WALL_HEIGHT; - public int PLOT_WIDTH; - public int ROAD_WIDTH; public PlotBlock[] MAIN_BLOCK; public PlotBlock[] TOP_BLOCK; public PlotBlock WALL_BLOCK; @@ -34,11 +30,6 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld { public PlotBlock ROAD_BLOCK; public boolean PLOT_BEDROCK; - public short PATH_WIDTH_LOWER; - public short PATH_WIDTH_UPPER; - public short SIZE; - public short OFFSET; - /** * CONFIG NODE | DEFAULT VALUE | DESCRIPTION | CONFIGURATION TYPE | REQUIRED FOR INITIAL SETUP *

@@ -75,14 +66,6 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld { this.CLAIMED_WALL_BLOCK = (PlotBlock) Configuration.BLOCK.parseString(config.getString("wall.block_claimed")); this.SIZE = (short) (this.PLOT_WIDTH + this.ROAD_WIDTH); - - if ((this.ROAD_WIDTH % 2) == 0) { - PATH_WIDTH_LOWER = (short) (Math.floor(this.ROAD_WIDTH / 2) - 1); - } else { - PATH_WIDTH_LOWER = (short) (Math.floor(this.ROAD_WIDTH / 2)); - } - - this.PATH_WIDTH_UPPER = (short) (this.PATH_WIDTH_LOWER + this.PLOT_WIDTH + 1); } public ClassicPlotWorld(String worldname) { diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/GridPlotWorld.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/GridPlotWorld.java index ff68efd78..64e925706 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/GridPlotWorld.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/GridPlotWorld.java @@ -3,6 +3,9 @@ package com.intellectualcrafters.plot.generator; import com.intellectualcrafters.plot.object.PlotWorld; public abstract class GridPlotWorld extends PlotWorld { + + public short SIZE; + public GridPlotWorld(String worldname) { super(worldname); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotManager.java index 428866266..187ae8c37 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotManager.java @@ -304,7 +304,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; else { condition = (!gx || !gz || !lx || !lz); } if (condition) { - int sy = plotworld.ROAD_HEIGHT + plotworld.OFFSET; + int sy = plotworld.ROAD_HEIGHT; ChunkLoc loc = new ChunkLoc(absX, absZ); HashMap blocks = plotworld.G_SCH.get(loc); for (short y = (short) (plotworld.ROAD_HEIGHT + 1); y <= plotworld.ROAD_HEIGHT + plotworld.SCHEMATIC_HEIGHT; y++) { @@ -344,7 +344,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; Location bottom = getPlotBottomLocAbs(plotworld, id); int sx = bottom.getBlockX() - hpw.PATH_WIDTH_LOWER; int sz = bottom.getBlockZ() - hpw.PATH_WIDTH_LOWER; - int sy = hpw.ROAD_HEIGHT + hpw.OFFSET; + int sy = hpw.ROAD_HEIGHT; for (ChunkLoc loc : hpw.G_SCH.keySet()) { HashMap blocks = hpw.G_SCH.get(loc); HashMap datas = hpw.G_SCH_DATA.get(loc); @@ -420,6 +420,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; final PlotBlock wall_filling = dpw.WALL_FILLING; final Block block = world.getBlockAt(new Location(world, pos1.getBlockX() - 1, 1, pos1.getBlockZ())); + if ((block.getTypeId() != wall_filling.id) || (block.getData() != wall_filling.data)) { setWallFilling(world, dpw, plot.id, new PlotBlock[] {wall_filling}); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotWorld.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotWorld.java index 92c1b0bda..14b18d9e2 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotWorld.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotWorld.java @@ -42,6 +42,9 @@ public class HybridPlotWorld extends ClassicPlotWorld { public boolean PLOT_SCHEMATIC = false; public short REQUIRED_CHANGES = 0; + public short PATH_WIDTH_LOWER; + public short PATH_WIDTH_UPPER; + /* * Here we are just calling the super method, nothing special */ @@ -94,7 +97,6 @@ public class HybridPlotWorld extends ClassicPlotWorld { public void setupSchematics() { G_SCH_DATA = new HashMap<>(); G_SCH = new HashMap<>(); - this.OFFSET = -1 + 1; String schem1Str = "GEN_ROAD_SCHEMATIC/" + worldname + "/sideroad"; String schem2Str = "GEN_ROAD_SCHEMATIC/" + worldname + "/intersection"; String schem3Str = "GEN_ROAD_SCHEMATIC/" + worldname + "/plot"; @@ -123,7 +125,7 @@ public class HybridPlotWorld extends ClassicPlotWorld { short id = blocks3[index].getBlock(); byte data = blocks3[index].getData(); if (id != 0) { - addOverlayBlock((short) (x + shift + oddshift), (short) (y + this.OFFSET), (short) (z + shift + oddshift), id, data, false); + addOverlayBlock((short) (x + shift + oddshift), (short) (y), (short) (z + shift + oddshift), id, data, false); } } } @@ -160,8 +162,8 @@ public class HybridPlotWorld extends ClassicPlotWorld { byte data = blocks1[index].getData(); if (id != 0) { - addOverlayBlock((short) (x - (shift)), (short) (y + this.OFFSET), (short) (z + shift + oddshift), id, data, false); - addOverlayBlock((short) (z + shift + oddshift), (short) (y + this.OFFSET), (short) (x - shift), id, data, true); + addOverlayBlock((short) (x - (shift)), (short) (y), (short) (z + shift + oddshift), id, data, false); + addOverlayBlock((short) (z + shift + oddshift), (short) (y), (short) (x - shift), id, data, true); } } } @@ -174,7 +176,7 @@ public class HybridPlotWorld extends ClassicPlotWorld { short id = blocks2[index].getBlock(); byte data = blocks2[index].getData(); if (id != 0) { - addOverlayBlock((short) (x - shift), (short) (y + this.OFFSET), (short) (z - shift), id, data, false); + addOverlayBlock((short) (x - shift), (short) (y), (short) (z - shift), id, data, false); } } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotManager.java index 056ed2ade..259bef52e 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotManager.java @@ -1,8 +1,218 @@ package com.intellectualcrafters.plot.generator; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.Biome; +import org.bukkit.block.Block; + +import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.PlotWorld; +import com.intellectualcrafters.plot.util.ChunkManager; +import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.util.PlotHelper; + /** * A plot manager with a square grid layout, with square shaped plots */ public abstract class SquarePlotManager extends GridPlotManager { + @Override + public boolean clearPlot(final World world, final PlotWorld plotworld, final Plot plot, final boolean isDelete, Runnable whendone) { + final Location pos1 = PlotHelper.getPlotBottomLoc(world, plot.id).add(1, 0, 1); + final Location pos2 = PlotHelper.getPlotTopLoc(world, plot.id); + ChunkManager.regenerateRegion(pos1, pos2, whendone); + return true; + } + + @Override + public Location getPlotTopLocAbs(final PlotWorld plotworld, final PlotId plotid) { + final SquarePlotWorld dpw = ((SquarePlotWorld) plotworld); + + final int px = plotid.x; + final int pz = plotid.y; + + final int x = (px * (dpw.ROAD_WIDTH + dpw.PLOT_WIDTH)) - ((int) Math.floor(dpw.ROAD_WIDTH / 2)) - 1; + final int z = (pz * (dpw.ROAD_WIDTH + dpw.PLOT_WIDTH)) - ((int) Math.floor(dpw.ROAD_WIDTH / 2)) - 1; + + return new Location(Bukkit.getWorld(plotworld.worldname), x, 256, z); + } + + @Override + public PlotId getPlotIdAbs(final PlotWorld plotworld, final Location loc) { + final SquarePlotWorld dpw = ((SquarePlotWorld) plotworld); + + // get x,z loc + int x = loc.getBlockX(); + int z = loc.getBlockZ(); + + // get plot size + final int size = dpw.PLOT_WIDTH + dpw.ROAD_WIDTH; + + // get size of path on bottom part, and top part of plot + // (As 0,0 is in the middle of a road, not the very start) + int pathWidthLower; + if ((dpw.ROAD_WIDTH % 2) == 0) { + pathWidthLower = (int) (Math.floor(dpw.ROAD_WIDTH / 2) - 1); + } else { + pathWidthLower = (int) Math.floor(dpw.ROAD_WIDTH / 2); + } + + // calulating how many shifts need to be done + int dx = x / size; + int dz = z / size; + if (x < 0) { + dx--; + x += ((-dx) * size); + } + if (z < 0) { + dz--; + z += ((-dz) * size); + } + + // reducing to first plot + final int rx = (x) % size; + final int rz = (z) % size; + + // checking if road (return null if so) + final int end = pathWidthLower + dpw.PLOT_WIDTH; + final boolean northSouth = (rz <= pathWidthLower) || (rz > end); + final boolean eastWest = (rx <= pathWidthLower) || (rx > end); + if (northSouth || eastWest) { + return null; + } + // returning the plot id (based on the number of shifts required) + return new PlotId(dx + 1, dz + 1); + } + + @Override + public PlotId getPlotId(final PlotWorld plotworld, final Location loc) { + final SquarePlotWorld dpw = ((SquarePlotWorld) plotworld); + + int x = loc.getBlockX(); + int z = loc.getBlockZ(); + + if (plotworld == null) { + return null; + } + final int size = dpw.PLOT_WIDTH + dpw.ROAD_WIDTH; + int pathWidthLower; + if ((dpw.ROAD_WIDTH % 2) == 0) { + pathWidthLower = (int) (Math.floor(dpw.ROAD_WIDTH / 2) - 1); + } else { + pathWidthLower = (int) Math.floor(dpw.ROAD_WIDTH / 2); + } + + int dx = x / size; + int dz = z / size; + + if (x < 0) { + dx--; + x += ((-dx) * size); + } + if (z < 0) { + dz--; + z += ((-dz) * size); + } + + final int rx = (x) % size; + final int rz = (z) % size; + + final int end = pathWidthLower + dpw.PLOT_WIDTH; + + final boolean northSouth = (rz <= pathWidthLower) || (rz > end); + final boolean eastWest = (rx <= pathWidthLower) || (rx > end); + if (northSouth && eastWest) { + // This means you are in the intersection + final PlotId id = PlayerFunctions.getPlotAbs(loc.add(dpw.ROAD_WIDTH, 0, dpw.ROAD_WIDTH)); + final Plot plot = PlotMain.getPlots(loc.getWorld()).get(id); + if (plot == null) { + return null; + } + if ((plot.settings.getMerged(0) && plot.settings.getMerged(3))) { + return PlayerFunctions.getBottomPlot(loc.getWorld(), plot).id; + } + return null; + } + if (northSouth) { + // You are on a road running West to East (yeah, I named the var + // poorly) + final PlotId id = PlayerFunctions.getPlotAbs(loc.add(0, 0, dpw.ROAD_WIDTH)); + final Plot plot = PlotMain.getPlots(loc.getWorld()).get(id); + if (plot == null) { + return null; + } + if (plot.settings.getMerged(0)) { + return PlayerFunctions.getBottomPlot(loc.getWorld(), plot).id; + } + return null; + } + if (eastWest) { + // This is the road separating an Eastern and Western plot + final PlotId id = PlayerFunctions.getPlotAbs(loc.add(dpw.ROAD_WIDTH, 0, 0)); + final Plot plot = PlotMain.getPlots(loc.getWorld()).get(id); + if (plot == null) { + return null; + } + if (plot.settings.getMerged(3)) { + return PlayerFunctions.getBottomPlot(loc.getWorld(), plot).id; + } + return null; + } + final PlotId id = new PlotId(dx + 1, dz + 1); + final Plot plot = PlotMain.getPlots(loc.getWorld()).get(id); + if (plot == null) { + return id; + } + return PlayerFunctions.getBottomPlot(loc.getWorld(), plot).id; + } + + /** + * Get the bottom plot loc (some basic math) + */ + @Override + public Location getPlotBottomLocAbs(final PlotWorld plotworld, final PlotId plotid) { + final SquarePlotWorld dpw = ((SquarePlotWorld) plotworld); + + final int px = plotid.x; + final int pz = plotid.y; + + final int x = (px * (dpw.ROAD_WIDTH + dpw.PLOT_WIDTH)) - dpw.PLOT_WIDTH - ((int) Math.floor(dpw.ROAD_WIDTH / 2)) - 1; + final int z = (pz * (dpw.ROAD_WIDTH + dpw.PLOT_WIDTH)) - dpw.PLOT_WIDTH - ((int) Math.floor(dpw.ROAD_WIDTH / 2)) - 1; + + return new Location(Bukkit.getWorld(plotworld.worldname), x, 1, z); + } + + /** + * Set a plot biome + */ + @Override + public boolean setBiome(final World world, final Plot plot, final Biome biome) { + + final int bottomX = PlotHelper.getPlotBottomLoc(world, plot.id).getBlockX() - 1; + final int topX = PlotHelper.getPlotTopLoc(world, plot.id).getBlockX() + 1; + final int bottomZ = PlotHelper.getPlotBottomLoc(world, plot.id).getBlockZ() - 1; + final int topZ = PlotHelper.getPlotTopLoc(world, plot.id).getBlockZ() + 1; + + final Block block = world.getBlockAt(PlotHelper.getPlotBottomLoc(world, plot.id).add(1, 1, 1)); + final Biome current = block.getBiome(); + if (biome.equals(current)) { + return false; + } + + for (int x = bottomX; x <= topX; x++) { + for (int z = bottomZ; z <= topZ; z++) { + final Block blk = world.getBlockAt(x, 0, z); + final Biome c = blk.getBiome(); + if (c.equals(biome)) { + x += 15; + continue; + } + blk.setBiome(biome); + } + } + return true; + } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotWorld.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotWorld.java index df33f1426..b48222d6e 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotWorld.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotWorld.java @@ -1,6 +1,27 @@ package com.intellectualcrafters.plot.generator; +import org.bukkit.configuration.ConfigurationSection; + +import com.intellectualcrafters.plot.PlotMain; + public abstract class SquarePlotWorld extends GridPlotWorld { + + public static int PLOT_WIDTH_DEFAULT = 42; + public static int ROAD_WIDTH_DEFAULT = 7; + + public int PLOT_WIDTH; + public int ROAD_WIDTH; + + @Override + public void loadConfiguration(final ConfigurationSection config) { + if (!config.contains("plot.height")) { + PlotMain.sendConsoleSenderMessage(" - &cConfiguration is null? (" + config.getCurrentPath() + ")"); + } + this.PLOT_WIDTH = config.getInt("plot.size"); + this.ROAD_WIDTH = config.getInt("road.width"); + this.SIZE = (short) (this.PLOT_WIDTH + this.ROAD_WIDTH); + } + public SquarePlotWorld(String worldname) { super(worldname); }