From e28c68ee74c69081ad1e4adf41ad2978919a637f Mon Sep 17 00:00:00 2001 From: boy0001 Date: Sun, 9 Aug 2015 19:58:29 +1000 Subject: [PATCH] Fixes #524 --- .../com/intellectualcrafters/plot/PS.java | 20 +++++++++- .../plot/api/PlotAPI.java | 2 +- .../plot/commands/Info.java | 2 + .../plot/commands/Setup.java | 7 +++- .../intellectualcrafters/plot/config/C.java | 2 +- .../plot/database/SQLManager.java | 24 ++++-------- .../plot/generator/SquarePlotManager.java | 16 ++++---- .../plot/util/MathMan.java | 4 ++ .../com/plotsquared/bukkit/BukkitMain.java | 38 ++++++++++++++++++- .../bukkit/generator/AugmentedPopulator.java | 1 - .../bukkit/listeners/PlayerEvents.java | 17 ++++----- .../bukkit/util/BukkitSetupUtils.java | 20 ++++++++++ .../plotsquared/bukkit/util/BukkitUtil.java | 4 +- .../plotsquared/bukkit/util/SendChunk.java | 5 --- 14 files changed, 113 insertions(+), 49 deletions(-) diff --git a/src/main/java/com/intellectualcrafters/plot/PS.java b/src/main/java/com/intellectualcrafters/plot/PS.java index 008eb0077..260279ad3 100644 --- a/src/main/java/com/intellectualcrafters/plot/PS.java +++ b/src/main/java/com/intellectualcrafters/plot/PS.java @@ -254,13 +254,29 @@ public class PS { } // World generators: - ConfigurationSection section = config.getConfigurationSection("worlds"); + final ConfigurationSection section = config.getConfigurationSection("worlds"); if (section != null) { for (String world : section.getKeys(false)) { + if (world.equals("CheckingPlotSquaredGenerator")) { + continue; + } if (BlockManager.manager.isWorld(world)) { - break; + IMP.setGenerator(world); } } + TaskManager.runTaskLater(new Runnable() { + @Override + public void run() { + for (String world : section.getKeys(false)) { + if (world.equals("CheckingPlotSquaredGenerator")) { + continue; + } + if (!BlockManager.manager.isWorld(world)) { + IMP.setGenerator(world); + } + } + } + }, 1); } // Copy files diff --git a/src/main/java/com/intellectualcrafters/plot/api/PlotAPI.java b/src/main/java/com/intellectualcrafters/plot/api/PlotAPI.java index e0919431d..50921c19b 100644 --- a/src/main/java/com/intellectualcrafters/plot/api/PlotAPI.java +++ b/src/main/java/com/intellectualcrafters/plot/api/PlotAPI.java @@ -62,7 +62,7 @@ import com.plotsquared.bukkit.util.BukkitUtil; * */ -@SuppressWarnings("unused") public class PlotAPI { +public class PlotAPI { /** * Permission that allows for admin access, this permission node will allow the player to use any part of the diff --git a/src/main/java/com/intellectualcrafters/plot/commands/Info.java b/src/main/java/com/intellectualcrafters/plot/commands/Info.java index 26e0fab39..7665a3e52 100644 --- a/src/main/java/com/intellectualcrafters/plot/commands/Info.java +++ b/src/main/java/com/intellectualcrafters/plot/commands/Info.java @@ -25,6 +25,7 @@ import java.util.Collection; import java.util.UUID; import java.util.regex.Matcher; +import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.database.DBFunc; @@ -36,6 +37,7 @@ import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotInventory; import com.intellectualcrafters.plot.object.PlotItemStack; import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.util.BlockManager; import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.StringMan; diff --git a/src/main/java/com/intellectualcrafters/plot/commands/Setup.java b/src/main/java/com/intellectualcrafters/plot/commands/Setup.java index b92be1cbe..502d53491 100644 --- a/src/main/java/com/intellectualcrafters/plot/commands/Setup.java +++ b/src/main/java/com/intellectualcrafters/plot/commands/Setup.java @@ -25,6 +25,7 @@ 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; import com.intellectualcrafters.plot.config.Settings; @@ -220,7 +221,11 @@ public class Setup extends SubCommand { return false; } if (BlockManager.manager.isWorld(args[0])) { - MainUtil.sendMessage(plr, "&cThat world name is already taken!"); + if (PS.get().isPlotWorld(args[0])) { + MainUtil.sendMessage(plr, "&cThat world name is already taken!"); + return false; + } + MainUtil.sendMessage(plr, "&cThe world you specified already exists. After restarting, new terrain will use PlotSquared, however you may need to reset the world for it to generate correctly!"); } object.world = args[0]; SetupUtils.setupMap.remove(name); diff --git a/src/main/java/com/intellectualcrafters/plot/config/C.java b/src/main/java/com/intellectualcrafters/plot/config/C.java index ddb2fe4b4..1282fdc6b 100644 --- a/src/main/java/com/intellectualcrafters/plot/config/C.java +++ b/src/main/java/com/intellectualcrafters/plot/config/C.java @@ -197,7 +197,7 @@ public enum C { SETUP_STEP("$3[$1Step %s0$3] $1%s1 $2- $1Expecting: $2%s2 $1Default: $2%s3", "Setup"), SETUP_INVALID_ARG("$2%s0 is not a valid argument for step %s1. To cancel setup use: $1/plot setup cancel", "Setup"), SETUP_VALID_ARG("$2Value $1%s0 $2set to %s1", "Setup"), - SETUP_FINISHED("$3If you are using MULTIVERSE or MULTIWORLD the world should have just been created. Otherwise you will need to add the world manually through the bukkit.yml", "Setup"), + SETUP_FINISHED("$4You should have been teleported to the created world. Otherwise you will need to set the generator manually using the bukkit.yml or your chosen world management plugin.", "Setup"), SETUP_WORLD_TAKEN("$2%s is already a registered plotworld", "Setup"), SETUP_MISSING_WORLD("$2You need to specify a world name ($1/plot setup &l$1 $2)&-$1Additional commands:&-$2 - $1/plot setup &-$2 - $1/plot setup back&-$2 - $1/plot setup cancel", "Setup"), SETUP_MISSING_GENERATOR("$2You need to specify a generator ($1/plot setup &l&r$2)&-$1Additional commands:&-$2 - $1/plot setup &-$2 - $1/plot setup back&-$2 - $1/plot setup cancel", "Setup"), diff --git a/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java b/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java index 9886060ad..d66400097 100644 --- a/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java +++ b/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java @@ -81,23 +81,12 @@ public class SQLManager implements AbstractDB { public SQLManager(final Connection c, final String p) { // Private final this.connection = c; - try { - if (this.connection.getAutoCommit()) { - this.connection.setAutoCommit(false); + TaskManager.runTaskRepeat(new Runnable() { + @Override + public void run() { + commit(); } - TaskManager.runTaskRepeat(new Runnable() { - @Override - public void run() { - try { - SQLManager.this.connection.commit(); - } catch (SQLException e) { - e.printStackTrace(); - } - } - }, 200); - } catch (SQLException e) { - e.printStackTrace(); - } + }, 200); this.prefix = p; // Set timout // setTimout(); @@ -671,6 +660,9 @@ public class SQLManager implements AbstractDB { public void commit() { try { + if (this.connection.getAutoCommit()) { + this.connection.setAutoCommit(false); + } this.connection.commit(); } catch (SQLException e) { e.printStackTrace(); diff --git a/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotManager.java b/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotManager.java index a7710ce38..17a528189 100644 --- a/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotManager.java +++ b/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotManager.java @@ -53,16 +53,16 @@ public abstract class SquarePlotManager extends GridPlotManager { int idx; int idz; if (x < 0) { - idx = ((x - 1)/size); - x = size + ((x - 1) % size); + idx = (x/size); + x = size + (x % size); } else { idx = (x/size) + 1; x = (x % size); } if (z < 0) { - idz = ((z - 1)/size); - z = size + ((z - 1) % size); + idz = (z/size); + z = size + (z % size); } else { idz = (z/size) + 1; @@ -104,16 +104,16 @@ public abstract class SquarePlotManager extends GridPlotManager { int rx; int rz; if (x < 0) { - dx = ((x - 1) / size); - rx = size + ((x - 1) % size); + dx = (x / size); + rx = size + (x % size); } else { dx = (x/size) + 1; rx = (x % size); } if (z < 0) { - dz = ((z - 1)/size); - rz = size + ((z - 1) % size); + dz = (z/size); + rz = size + (z % size); } else { dz = (z/size) + 1; diff --git a/src/main/java/com/intellectualcrafters/plot/util/MathMan.java b/src/main/java/com/intellectualcrafters/plot/util/MathMan.java index aa162008a..899581fe2 100644 --- a/src/main/java/com/intellectualcrafters/plot/util/MathMan.java +++ b/src/main/java/com/intellectualcrafters/plot/util/MathMan.java @@ -32,6 +32,10 @@ public class MathMan { }; } + public static int roundInt(double value) { + return (int) (value < 0 ? value - 1 : value); + } + /** * Returns [ pitch, yaw ] * @param x diff --git a/src/main/java/com/plotsquared/bukkit/BukkitMain.java b/src/main/java/com/plotsquared/bukkit/BukkitMain.java index 02293598c..901f90e5b 100644 --- a/src/main/java/com/plotsquared/bukkit/BukkitMain.java +++ b/src/main/java/com/plotsquared/bukkit/BukkitMain.java @@ -19,16 +19,19 @@ import org.bukkit.generator.ChunkGenerator; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; +import com.intellectualcrafters.configuration.ConfigurationSection; import com.intellectualcrafters.plot.IPlotMain; import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.commands.MainCommand; import com.intellectualcrafters.plot.commands.WE_Anywhere; import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.config.ConfigurationNode; import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.generator.HybridUtils; import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; +import com.intellectualcrafters.plot.object.SetupObject; import com.intellectualcrafters.plot.util.AbstractTitle; import com.intellectualcrafters.plot.util.BlockManager; import com.intellectualcrafters.plot.util.BlockUpdateUtil; @@ -547,9 +550,40 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain { } @Override - public void setGenerator(String world) { + public void setGenerator(String worldname) { + World world = BukkitUtil.getWorld(worldname); + if (world == null) { + // create world + + System.out.print("CREATING WORLD: " + worldname); + System.out.print("CREATING WORLD: " + worldname); + System.out.print("CREATING WORLD: " + worldname); + System.out.print("CREATING WORLD: " + worldname); + + ConfigurationSection worldConfig = PS.get().config.getConfigurationSection("worlds." + worldname); + String manager = worldConfig.getString("generator.plugin"); + if (manager == null) { + manager = "PlotSquared"; + } + String generator = worldConfig.getString("generator.init"); + if (generator == null) { + generator = manager; + } + + int type = worldConfig.getInt("generator.type"); + int terrain = worldConfig.getInt("generator.terrain"); + SetupObject setup = new SetupObject(); + setup.plotManager = manager; + setup.setupGenerator = generator; + setup.type = type; + setup.terrain = terrain; + setup.step = new ConfigurationNode[0]; + setup.world = worldname; + SetupUtils.manager.setupWorld(setup); + return; + } try { - SetGenCB.setGenerator(BukkitUtil.getWorld(world)); + SetGenCB.setGenerator(BukkitUtil.getWorld(worldname)); } catch (Exception e) { log("Failed to reload world: " + world); Bukkit.getServer().unloadWorld(world, false); diff --git a/src/main/java/com/plotsquared/bukkit/generator/AugmentedPopulator.java b/src/main/java/com/plotsquared/bukkit/generator/AugmentedPopulator.java index af2719717..38a8f3ca4 100644 --- a/src/main/java/com/plotsquared/bukkit/generator/AugmentedPopulator.java +++ b/src/main/java/com/plotsquared/bukkit/generator/AugmentedPopulator.java @@ -99,7 +99,6 @@ public class AugmentedPopulator extends BlockPopulator { public void populate(final World world, final Random rand, final Chunk chunk) { final int cx = chunk.getX(); final int cz = chunk.getZ(); - PS.log("== POPULATING FOR: " + world + " | " + cx + "," + cz); final int bx = cx << 4; final int bz = cz << 4; final int tx = bx + 15; diff --git a/src/main/java/com/plotsquared/bukkit/listeners/PlayerEvents.java b/src/main/java/com/plotsquared/bukkit/listeners/PlayerEvents.java index 86e4da1ad..b7b87a963 100644 --- a/src/main/java/com/plotsquared/bukkit/listeners/PlayerEvents.java +++ b/src/main/java/com/plotsquared/bukkit/listeners/PlayerEvents.java @@ -134,6 +134,7 @@ import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.EventUtil; import com.intellectualcrafters.plot.util.ExpireManager; import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.MathMan; import com.intellectualcrafters.plot.util.Permissions; import com.intellectualcrafters.plot.util.RegExUtil; import com.intellectualcrafters.plot.util.StringMan; @@ -480,16 +481,12 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen plotEntry(pp, plot); } - public int getInt(double value) { - return (int) (value < 0 ? value - 1 : value); - } - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void PlayerMove(final PlayerMoveEvent event) { org.bukkit.Location from = event.getFrom(); org.bukkit.Location to = event.getTo(); int x2; - if (getInt(from.getX()) != (x2 = getInt(to.getX()))) { + if (MathMan.roundInt(from.getX()) != (x2 = MathMan.roundInt(to.getX()))) { Player player = event.getPlayer(); PlotPlayer pp = BukkitUtil.getPlayer(player); @@ -502,7 +499,7 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen return; } PlotManager plotManager = PS.get().getPlotManager(worldname); - PlotId id = plotManager.getPlotId(plotworld, x2, 0, getInt(to.getZ())); + PlotId id = plotManager.getPlotId(plotworld, x2, 0, MathMan.roundInt(to.getZ())); Plot lastPlot = (Plot) pp.getMeta("lastplot"); if (id == null) { if (lastPlot != null && !plotExit(pp, lastPlot)) { @@ -552,7 +549,7 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen return; } int z2; - if (getInt(from.getZ()) != (z2 = getInt(to.getZ())) ) { + if (MathMan.roundInt(from.getZ()) != (z2 = MathMan.roundInt(to.getZ())) ) { Player player = event.getPlayer(); PlotPlayer pp = BukkitUtil.getPlayer(player); @@ -1405,7 +1402,7 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen final org.bukkit.Location to = event.getTo(); int x2; - if (getInt(from.getX()) != (x2 = getInt(to.getX()))) { + if (MathMan.roundInt(from.getX()) != (x2 = MathMan.roundInt(to.getX()))) { Player player = event.getPlayer(); PlotPlayer pp = BukkitUtil.getPlayer(player); @@ -1418,7 +1415,7 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen return; } PlotManager plotManager = PS.get().getPlotManager(worldname); - PlotId id = plotManager.getPlotId(plotworld, x2, 0, getInt(to.getZ())); + PlotId id = plotManager.getPlotId(plotworld, x2, 0, MathMan.roundInt(to.getZ())); Plot lastPlot = (Plot) pp.getMeta("lastplot"); if (id == null) { if (lastPlot == null) { @@ -1471,7 +1468,7 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen return; } int z2; - if (getInt(from.getZ()) != (z2 = getInt(to.getZ())) ) { + if (MathMan.roundInt(from.getZ()) != (z2 = MathMan.roundInt(to.getZ())) ) { Player player = event.getPlayer(); PlotPlayer pp = BukkitUtil.getPlayer(player); diff --git a/src/main/java/com/plotsquared/bukkit/util/BukkitSetupUtils.java b/src/main/java/com/plotsquared/bukkit/util/BukkitSetupUtils.java index fd8b251ba..7690c0210 100644 --- a/src/main/java/com/plotsquared/bukkit/util/BukkitSetupUtils.java +++ b/src/main/java/com/plotsquared/bukkit/util/BukkitSetupUtils.java @@ -1,5 +1,6 @@ package com.plotsquared.bukkit.util; +import java.io.File; import java.io.IOException; import java.util.Map.Entry; @@ -10,6 +11,7 @@ import org.bukkit.WorldCreator; import org.bukkit.generator.ChunkGenerator; import org.bukkit.plugin.Plugin; +import com.intellectualcrafters.configuration.file.YamlConfiguration; import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.config.ConfigurationNode; import com.intellectualcrafters.plot.generator.PlotGenerator; @@ -69,14 +71,17 @@ public class BukkitSetupUtils extends SetupUtils { if (object.setupGenerator != null) { if ((Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) && Bukkit.getPluginManager().getPlugin("Multiverse-Core").isEnabled()) { Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv create " + world + " normal -g " + object.setupGenerator); + setGenerator(world, object.setupGenerator); } else { if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) && Bukkit.getPluginManager().getPlugin("MultiWorld").isEnabled()) { Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw create " + world + " plugin:" + object.setupGenerator); + setGenerator(world, object.setupGenerator); } else { final WorldCreator wc = new WorldCreator(object.world); wc.generator(object.setupGenerator); wc.environment(Environment.NORMAL); Bukkit.createWorld(wc); + setGenerator(world, object.setupGenerator); } } } else { @@ -92,6 +97,21 @@ public class BukkitSetupUtils extends SetupUtils { } return object.world; } + + public void setGenerator(String world, String generator) { + if (Bukkit.getWorlds().size() == 0 || !Bukkit.getWorlds().get(0).getName().equals(world)) { + return; + } + File file = new File("bukkit.yml").getAbsoluteFile(); + System.out.print(file.getAbsolutePath()); + YamlConfiguration yml = YamlConfiguration.loadConfiguration(file); + yml.set("worlds." + world + ".generator", generator); + try { + yml.save(file); + } catch (IOException e) { + e.printStackTrace(); + } + } @Override public String getGenerator(PlotWorld plotworld) { diff --git a/src/main/java/com/plotsquared/bukkit/util/BukkitUtil.java b/src/main/java/com/plotsquared/bukkit/util/BukkitUtil.java index b8d03d81c..9621a8c09 100644 --- a/src/main/java/com/plotsquared/bukkit/util/BukkitUtil.java +++ b/src/main/java/com/plotsquared/bukkit/util/BukkitUtil.java @@ -137,7 +137,7 @@ public class BukkitUtil extends BlockManager { } public static Location getLocation(final org.bukkit.Location loc) { - return new Location(loc.getWorld().getName(), (int) loc.getX(), (int) loc.getY(), (int) loc.getZ()); + return new Location(loc.getWorld().getName(), MathMan.roundInt(loc.getX()), MathMan.roundInt(loc.getY()), MathMan.roundInt(loc.getZ())); } public static org.bukkit.Location getLocation(final Location loc) { @@ -172,7 +172,7 @@ public class BukkitUtil extends BlockManager { public static Location getLocationFull(final Entity entity) { org.bukkit.Location loc = entity.getLocation(); - return new Location(loc.getWorld().getName(), (int) loc.getX(), (int) loc.getY(), (int) loc.getZ(), loc.getYaw(), loc.getPitch()); + return new Location(loc.getWorld().getName(), MathMan.roundInt(loc.getX()), MathMan.roundInt(loc.getY()), MathMan.roundInt(loc.getZ()), loc.getYaw(), loc.getPitch()); } //////////////////////////////////////////////////////////////////////// diff --git a/src/main/java/com/plotsquared/bukkit/util/SendChunk.java b/src/main/java/com/plotsquared/bukkit/util/SendChunk.java index 97bc28d02..96fbcec13 100644 --- a/src/main/java/com/plotsquared/bukkit/util/SendChunk.java +++ b/src/main/java/com/plotsquared/bukkit/util/SendChunk.java @@ -64,7 +64,6 @@ public class SendChunk { if (!chunk.isLoaded()) { continue; } - boolean unload = true; final Object c = methodGetHandle.of(chunk).call(); final Object w = world.of(c).get(); final Object p = players.of(w).get(); @@ -74,7 +73,6 @@ public class SendChunk { diffx = Math.abs(x - (chunk.getX() << 4)); diffz = Math.abs(z - (chunk.getZ() << 4)); if ((diffx <= view) && (diffz <= view)) { - unload = false; if (v1_7_10) { chunk.getWorld().refreshChunk(chunk.getX(), chunk.getZ()); chunk.load(true); @@ -86,9 +84,6 @@ public class SendChunk { } } } - if (unload) { - chunk.unload(true, true); - } } }