diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java index 78cf61f14..1c8c0fece 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java @@ -583,20 +583,24 @@ public class SQLManager implements AbstractDB { public void updateTables() { try { final DatabaseMetaData data = this.connection.getMetaData(); - ResultSet rs = data.getColumns(null, null, this.prefix + "plot_comments", "hashcode"); - if (!rs.next()) { - rs.close(); - final Statement statement = this.connection.createStatement(); - statement.addBatch("DROP TABLE `" + this.prefix + "plot_comments`"); - if (PlotSquared.getMySQL() != null) { - statement.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot_comments` (" + "`world` VARCHAR(40) NOT NULL, `hashcode` INT(11) NOT NULL," + "`comment` VARCHAR(40) NOT NULL," + "`inbox` VARCHAR(40) NOT NULL," + "`timestamp` INT(11) NOT NULL," + "`sender` VARCHAR(40) NOT NULL" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8"); + ResultSet rs = data.getColumns(null, null, this.prefix + "plot_comments", "plot"); + if (rs.next()) { + rs = data.getColumns(null, null, this.prefix + "plot_comments", "hashcode"); + if (!rs.next()) { + rs.close(); + final Statement statement = this.connection.createStatement(); + statement.addBatch("DROP TABLE `" + this.prefix + "plot_comments`"); + if (PlotSquared.getMySQL() != null) { + statement.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot_comments` (" + "`world` VARCHAR(40) NOT NULL, `hashcode` INT(11) NOT NULL," + "`comment` VARCHAR(40) NOT NULL," + "`inbox` VARCHAR(40) NOT NULL," + "`timestamp` INT(11) NOT NULL," + "`sender` VARCHAR(40) NOT NULL" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8"); + } + else { + statement.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot_comments` (" + "`world` VARCHAR(40) NOT NULL, `hashcode` INT(11) NOT NULL," + "`comment` VARCHAR(40) NOT NULL," + "`inbox` VARCHAR(40) NOT NULL, `timestamp` INT(11) NOT NULL," + "`sender` VARCHAR(40) NOT NULL" + ")"); + } + statement.executeBatch(); + statement.close(); } - else { - statement.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot_comments` (" + "`world` VARCHAR(40) NOT NULL, `hashcode` INT(11) NOT NULL," + "`comment` VARCHAR(40) NOT NULL," + "`inbox` VARCHAR(40) NOT NULL, `timestamp` INT(11) NOT NULL," + "`sender` VARCHAR(40) NOT NULL" + ")"); - } - statement.executeBatch(); - statement.close(); } + rs.close(); } catch (SQLException e) { e.printStackTrace(); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java index b204492be..a5305e1ee 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java @@ -89,6 +89,8 @@ public abstract class PlotWorld { public boolean WORLD_BORDER; public int TYPE = 0; public int TERRAIN = 0; + public boolean HOME_ALLOW_NONMEMBER; + public PlotLoc DEFAULT_HOME; public PlotWorld(final String worldname) { this.worldname = worldname; @@ -143,6 +145,25 @@ public abstract class PlotWorld { this.SELL_PRICE = config.getDouble("economy.prices.sell"); this.PLOT_CHAT = config.getBoolean("chat.enabled"); this.WORLD_BORDER = config.getBoolean("world.border"); + + this.HOME_ALLOW_NONMEMBER = config.getBoolean("home.allow-nonmembers"); + String homeDefault = config.getString("home.default"); + if (homeDefault.equalsIgnoreCase("side")) { + DEFAULT_HOME = null; + } + else if (homeDefault.equalsIgnoreCase("center")) { + DEFAULT_HOME = new PlotLoc(Integer.MAX_VALUE, Integer.MAX_VALUE); + } + else { + try { + String[] split = homeDefault.split(","); + DEFAULT_HOME = new PlotLoc(Integer.parseInt(split[0]), Integer.parseInt(split[1])); + } + catch (Exception e) { + DEFAULT_HOME = null; + } + } + List flags = config.getStringList("flags.default"); if (flags == null || flags.size() == 0) { flags = config.getStringList("flags"); @@ -201,6 +222,10 @@ public abstract class PlotWorld { options.put("event.spawn.custom", PlotWorld.SPAWN_CUSTOM_DEFAULT); options.put("event.spawn.breeding", PlotWorld.SPAWN_BREEDING_DEFAULT); options.put("world.border", PlotWorld.WORLD_BORDER_DEFAULT); + + options.put("home.default", "side"); + options.put("home.allow-nonmembers", false); + if (Settings.ENABLE_CLUSTERS && (this.TYPE != 0)) { options.put("generator.terrain", this.TERRAIN); options.put("generator.type", this.TYPE); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java index 0981e0b10..eb56cfe9f 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java @@ -97,7 +97,25 @@ public class MainUtil { return count; } - public static Location getPlotFront(Plot plot) { + public static Location getDefaultHome(Plot plot) { + PlotWorld plotworld = PlotSquared.getPlotWorld(plot.world); + if (plotworld.DEFAULT_HOME != null) { + final Location bot = getPlotBottomLoc(plot.world, plot.id); + final PlotManager manager = PlotSquared.getPlotManager(plot.world); + final int x; + final int z; + if (plotworld.DEFAULT_HOME.x == Integer.MAX_VALUE && plotworld.DEFAULT_HOME.z == Integer.MAX_VALUE) { + final Location top = getPlotTopLoc(plot.world, plot.id); + x = ((top.getX() - bot.getX()) / 2) + bot.getX(); + z = ((top.getZ() - bot.getZ()) / 2) + bot.getZ(); + } + else { + x = bot.getX() + plotworld.DEFAULT_HOME.x; + z = bot.getZ() + plotworld.DEFAULT_HOME.z; + } + final int y = Math.max(getHeighestBlock(plot.world, x, z), manager.getSignLoc(PlotSquared.getPlotWorld(plot.world), plot).getY()); + return new Location(plot.world, x, y, z); + } final Location top = getPlotTopLoc(plot.world, plot.id); final Location bot = getPlotBottomLoc(plot.world, plot.id); final int x = ((top.getX() - bot.getX()) / 2) + bot.getX(); @@ -110,18 +128,15 @@ public class MainUtil { public static boolean teleportPlayer(final PlotPlayer player, final Location from, final Plot plot) { final Plot bot = MainUtil.getBottomPlot(plot); - // TODO - // boolean result = PlotSquared.IMP.callPlayerTeleportToPlotEvent(player, from, plot); boolean result = EventUtil.manager.callTeleport(player, from, plot); - // TOOD ^ remove that if (result) { final Location location; - if (plot.isAdded(player.getUUID())) { + if (PlotSquared.getPlotWorld(plot.world).HOME_ALLOW_NONMEMBER || plot.isAdded(player.getUUID())) { location = MainUtil.getPlotHome(bot.world, bot); } else { - location = getPlotFront(plot); + location = getDefaultHome(plot); } if ((Settings.TELEPORT_DELAY == 0) || Permissions.hasPermission(player, "plots.teleport.delay.bypass")) { sendMessage(player, C.TELEPORTED_TO_PLOT); @@ -531,7 +546,6 @@ public class MainUtil { h = (prime * h) + pos1.getZ(); state = h; System.currentTimeMillis(); - final Location location = MainUtil.getPlotHomeDefault(plot); final PlotWorld plotworld = PlotSquared.getPlotWorld(world); runners.put(plot, 1); if (plotworld.TERRAIN != 0 || Settings.FAST_CLEAR) { @@ -622,16 +636,6 @@ public class MainUtil { return 64; } return result; - // for (int i = 1; i < world.getMaxHeight(); i++) { - // id = world.getBlockAt(x, i, z).getTypeId(); - // if (id == 0) { - // if (safe) { - // return i; - // } - // safe = true; - // } - // } - // return 64; } /** @@ -648,30 +652,13 @@ public class MainUtil { final Location bot = getPlotBottomLoc(w, plotid); final PlotManager manager = PlotSquared.getPlotManager(w); if ((home == null) || ((home.x == 0) && (home.z == 0))) { - final Location top = getPlotTopLoc(w, plotid); - final int x = ((top.getX() - bot.getX()) / 2) + bot.getX(); - final int z = ((top.getZ() - bot.getZ()) / 2) + bot.getZ(); - final int y = Math.max(getHeighestBlock(w, x, z), manager.getSignLoc(PlotSquared.getPlotWorld(w), plot).getY()); - return new Location(w, x, y, z); + return getDefaultHome(plot); } else { final int y = Math.max(getHeighestBlock(w, home.x, home.z), home.y); return bot.add(home.x, y, home.z); } } - /** - * Retrieve the location of the default plot home position - * - * @param plot Plot - * - * @return the location - */ - public static Location getPlotHomeDefault(final Plot plot) { - final Location l = getPlotBottomLoc(plot.world, plot.getId()).subtract(0, 0, 0); - l.setY(getHeighestBlock(plot.world, l.getX(), l.getZ())); - return l; - } - /** * Get the plot home * diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitChunkManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitChunkManager.java index 4235c01e1..1cea1bed0 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitChunkManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitChunkManager.java @@ -770,7 +770,7 @@ public class BukkitChunkManager extends ChunkManager { if (plot.id.equals(id)) { if (entity instanceof Player) { final Player player = (Player) entity; - BukkitUtil.getPlayer(player).teleport(MainUtil.getPlotFront(plot)); + BukkitUtil.getPlayer(player).teleport(MainUtil.getDefaultHome(plot)); PlotListener.plotExit(player, plot); } else { entity.remove();