diff --git a/pom.xml b/pom.xml
index 6b8a9426..7ef86679 100644
--- a/pom.xml
+++ b/pom.xml
@@ -170,7 +170,7 @@
org.getspout
- spoutapi
+ spoutpluginapi
dev-SNAPSHOT
diff --git a/src/main/java/com/onarandombox/MultiverseCore/MVWorld.java b/src/main/java/com/onarandombox/MultiverseCore/MVWorld.java
index 659a03fe..e89ca9b5 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/MVWorld.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/MVWorld.java
@@ -61,7 +61,7 @@ public class MVWorld implements MultiverseWorld {
private boolean canSave = false; // Prevents all the setters from constantly saving to the config when being called from the constructor.
private Map propertyAliases;
- public MVWorld(World world, FileConfiguration config, MultiverseCore instance, Long seed, String generatorString) {
+ public MVWorld(World world, FileConfiguration config, MultiverseCore instance, Long seed, String generatorString, boolean fixSpawn) {
this.config = config;
this.plugin = instance;
@@ -111,6 +111,9 @@ public class MVWorld implements MultiverseWorld {
this.propertyList.put("hunger", fac.getNewProperty("hunger", true, "Sorry, 'hunger' must either be:" + ChatColor.GREEN + " true " + ChatColor.WHITE + "or" + ChatColor.RED + " false" + ChatColor.WHITE + "."));
this.propertyList.put("autoheal", fac.getNewProperty("autoheal", true, "Sorry, 'autoheal' must either be:" + ChatColor.GREEN + " true " + ChatColor.WHITE + "or" + ChatColor.RED + " false" + ChatColor.WHITE + "."));
this.propertyList.put("adjustspawn", fac.getNewProperty("adjustspawn", true, "Sorry, 'adjustspawn' must either be:" + ChatColor.GREEN + " true " + ChatColor.WHITE + "or" + ChatColor.RED + " false" + ChatColor.WHITE + "."));
+ if(!fixSpawn) {
+ this.setAdjustSpawn(false);
+ }
this.propertyList.put("gamemode", fac.getNewProperty("gamemode", GameMode.SURVIVAL, "GameMode must be set as one of the following: " + ChatColor.RED + "survival " + ChatColor.GREEN + "creative "));
this.propertyList.put("memory", fac.getNewProperty("keepspawninmemory", true, "keepspawninmemory", "Sorry, 'memory' must either be:" + ChatColor.GREEN + " true " + ChatColor.WHITE + "or" + ChatColor.RED + " false" + ChatColor.WHITE + "."));
this.propertyList.put("spawn", fac.getNewProperty("spawn", this.world.getSpawnLocation(), "There is no help available for this variable. Go bug Rigby90 about it."));
diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
index 0d05ac89..1684a21f 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
@@ -50,7 +50,7 @@ import java.util.logging.Logger;
* The implementation of the Multiverse-{@link Core}.
*/
public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
- private final static int Protocol = 9;
+ private final static int Protocol = 10;
// Global Multiverse config variable, states whether or not
// Multiverse should stop other plugins from teleporting players
// to worlds.
@@ -282,11 +282,11 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
*/
private void registerEvents() {
PluginManager pm = getServer().getPluginManager();
- // pm.registerEvent(Event.Type.PLAYER_MOVE, playerListener, Priority.Highest, this); // Low so it acts above any other.
pm.registerEvent(Event.Type.PLAYER_TELEPORT, this.playerListener, Priority.Highest, this); // Cancel Teleports if needed.
pm.registerEvent(Event.Type.PLAYER_JOIN, this.playerListener, Priority.Normal, this); // To create the Player Session
pm.registerEvent(Event.Type.PLAYER_QUIT, this.playerListener, Priority.Normal, this); // To remove Player Sessions
pm.registerEvent(Event.Type.PLAYER_RESPAWN, this.playerListener, Priority.Low, this); // Let plugins which specialize in (re)spawning carry more weight.
+ pm.registerEvent(Event.Type.PLAYER_LOGIN, this.playerListener, Priority.Low, this); // Let plugins which specialize in (re)spawning carry more weight.
pm.registerEvent(Event.Type.PLAYER_CHAT, this.playerListener, Priority.Normal, this); // To prepend the world name
pm.registerEvent(Event.Type.PLAYER_PORTAL, this.playerListener, Priority.Lowest, this); // To switch gamemode
pm.registerEvent(Event.Type.PLAYER_CHANGED_WORLD, this.playerListener, Priority.Monitor, this); // To switch gamemode
@@ -324,11 +324,27 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
EnforceGameModes = this.multiverseConfig.getBoolean("enforcegamemodes", true);
PrefixChat = this.multiverseConfig.getBoolean("worldnameprefix", true);
DisplayPermErrors = this.multiverseConfig.getBoolean("displaypermerrors", true);
+ // Default as the server.props world.
+ this.worldManager.setFirstSpawnWorld(this.multiverseConfig.getString("firstspawnworld", getDefaultWorldName()));
+ DisplayPermErrors = this.multiverseConfig.getBoolean("displaypermerrors", true);
this.messaging = new MVMessaging(this);
this.messaging.setCooldown(this.multiverseConfig.getInt("messagecooldown", 5000));
this.saveMVConfigs();
}
+ /**
+ * Safely return a world name
+ * (The tests call this with no worlds loaded)
+ *
+ * @return The default world name.
+ */
+ private String getDefaultWorldName() {
+ if (this.getServer().getWorlds().size() > 0) {
+ return this.getServer().getWorlds().get(0).getName();
+ }
+ return "";
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/src/main/java/com/onarandombox/MultiverseCore/api/MVDestination.java b/src/main/java/com/onarandombox/MultiverseCore/api/MVDestination.java
index 66dfb2fd..94d02313 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/api/MVDestination.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/api/MVDestination.java
@@ -15,8 +15,6 @@ import org.bukkit.util.Vector;
/**
* A destination API for Multiverse
* Any plugin can add these to MV and when they are, any action that uses them (portals, MVTP, etc.) can use them!
- *
- * @author fernferret
*/
public interface MVDestination {
/**
diff --git a/src/main/java/com/onarandombox/MultiverseCore/api/MVWorldManager.java b/src/main/java/com/onarandombox/MultiverseCore/api/MVWorldManager.java
index 2b925bde..dc7b2e45 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/api/MVWorldManager.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/api/MVWorldManager.java
@@ -37,6 +37,20 @@ public interface MVWorldManager {
*/
public boolean addWorld(String name, Environment env, String seedString, String generator);
+ /**
+ * Add a new World to the Multiverse Setup.
+ *
+ * @param name World Name
+ * @param env Environment Type
+ * @param seedString The seed in the form of a string.
+ * If the seed is a Long,
+ * it will be interpreted as such.
+ * @param generator The Custom generator plugin to use.
+ * @param useSpawnAdjust If true, multiverse will search for a safe spawn. If not, It will not modify the level.dat.
+ * @return True if the world is added, false if not.
+ */
+ public boolean addWorld(String name, Environment env, String seedString, String generator, boolean useSpawnAdjust);
+
/**
* Remove the world from the Multiverse list, from the
* config and deletes the folder.
@@ -196,4 +210,18 @@ public interface MVWorldManager {
* @return True if success, false if failure.
*/
public boolean removeWorldFromConfig(String name);
+
+ /**
+ * Sets the initial spawn world for new players.
+ *
+ * @param world The World new players should spawn in.
+ */
+ public void setFirstSpawnWorld(String world);
+
+ /**
+ * Gets the world players should spawn in first.
+ *
+ * @return The {@link MultiverseWorld} new players should spawn in.
+ */
+ public MultiverseWorld getFirstSpawnWorld();
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/ConfigCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/ConfigCommand.java
index baccc0ec..159092aa 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/ConfigCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/ConfigCommand.java
@@ -54,7 +54,11 @@ public class ConfigCommand extends MultiverseCommand {
sender.sendMessage(currentvals.substring(0, currentvals.length() - 2));
return;
}
- if (args.get(0).equalsIgnoreCase("messagecooldown") || args.get(0).equalsIgnoreCase("teleportcooldown") || args.get(0).equalsIgnoreCase("debug")) {
+ if (args.get(0).equalsIgnoreCase("firstspawnworld")) {
+ this.plugin.getMVConfiguration().set(args.get(0).toLowerCase(), args.get(1));
+ // Don't forget to set the world!
+ this.plugin.getMVWorldManager().setFirstSpawnWorld(args.get(1));
+ } else if (args.get(0).equalsIgnoreCase("messagecooldown") || args.get(0).equalsIgnoreCase("teleportcooldown") || args.get(0).equalsIgnoreCase("debug")) {
try {
this.plugin.getMVConfiguration().set(args.get(0).toLowerCase(), Integer.parseInt(args.get(1)));
} catch (NumberFormatException e) {
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/CreateCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/CreateCommand.java
index 9b990d3b..a99697e9 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/CreateCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/CreateCommand.java
@@ -25,8 +25,8 @@ public class CreateCommand extends MultiverseCommand {
public CreateCommand(MultiverseCore plugin) {
super(plugin);
this.setName("Create World");
- this.setCommandUsage("/mv create" + ChatColor.GREEN + " {NAME} {ENV}" + ChatColor.GOLD + " -s [SEED] -g [GENERATOR[:ID]]");
- this.setArgRange(2, 6);
+ this.setCommandUsage("/mv create" + ChatColor.GREEN + " {NAME} {ENV}" + ChatColor.GOLD + " -s [SEED] -g [GENERATOR[:ID]] [-n]");
+ this.setArgRange(2, 7);
this.addKey("mvcreate");
this.addKey("mvc");
this.addKey("mv create");
@@ -41,16 +41,17 @@ public class CreateCommand extends MultiverseCommand {
@Override
public void runCommand(CommandSender sender, List args) {
- if (args.size() % 2 != 0) {
- sender.sendMessage("You must preface your SEED with -s OR your GENERATOR with -g. Type /mv for help");
- return;
- }
String worldName = args.get(0);
File worldFile = new File(this.plugin.getServer().getWorldContainer(), worldName);
String env = args.get(1);
String seed = CommandHandler.getFlag("-s", args);
String generator = CommandHandler.getFlag("-g", args);
-
+ boolean useSpawnAdjust = true;
+ for(String s : args) {
+ if(s.equalsIgnoreCase("-n")) {
+ useSpawnAdjust = false;
+ }
+ }
if (worldFile.exists() || this.worldManager.isMVWorld(worldName)) {
sender.sendMessage(ChatColor.RED + "A Folder/World already exists with this name!");
sender.sendMessage(ChatColor.RED + "If you are confident it is a world you can import with /mvimport");
@@ -66,7 +67,7 @@ public class CreateCommand extends MultiverseCommand {
Command.broadcastCommandMessage(sender, "Starting creation of world '" + worldName + "'...");
- if (this.worldManager.addWorld(worldName, environment, seed, generator)) {
+ if (this.worldManager.addWorld(worldName, environment, seed, generator, useSpawnAdjust)) {
Command.broadcastCommandMessage(sender, "Complete!");
} else {
Command.broadcastCommandMessage(sender, "FAILED.");
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/ImportCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/ImportCommand.java
index 1edf1828..cb76f1a7 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/ImportCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/ImportCommand.java
@@ -10,6 +10,7 @@ package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
+import com.pneumaticraft.commandhandler.CommandHandler;
import org.bukkit.ChatColor;
import org.bukkit.World.Environment;
import org.bukkit.command.Command;
@@ -28,7 +29,7 @@ public class ImportCommand extends MultiverseCommand {
public ImportCommand(MultiverseCore plugin) {
super(plugin);
this.setName("Import World");
- this.setCommandUsage("/mv import" + ChatColor.GREEN + " {NAME} {ENV} " + ChatColor.GOLD + "[GENERATOR[:ID]]");
+ this.setCommandUsage("/mv import" + ChatColor.GREEN + " {NAME} {ENV} " + ChatColor.GOLD + " -g [GENERATOR[:ID]] [-n]");
this.setArgRange(1, 3);
this.addKey("mvimport");
this.addKey("mvim");
@@ -97,24 +98,35 @@ public class ImportCommand extends MultiverseCommand {
if (worldName.toLowerCase().equals("--list") || worldName.toLowerCase().equals("-l")) {
String worldList = this.getPotentialWorlds();
- sender.sendMessage(ChatColor.AQUA + "====[ These look like worlds ]====");
- sender.sendMessage(worldList);
+ if (worldList.length() > 2) {
+ sender.sendMessage(ChatColor.AQUA + "====[ These look like worlds ]====");
+ sender.sendMessage(worldList);
+ } else {
+ sender.sendMessage(ChatColor.RED + "No potential worlds found. Sorry!");
+ }
return;
}
// Since we made an exception for the list, we have to make sure they have at least 2 params:
+ // Note the exception is --list, which is covered above.
if (args.size() == 1) {
this.showHelp(sender);
return;
}
- File worldFile = new File(this.plugin.getServer().getWorldContainer(), worldName);
- if (this.worldManager.isMVWorld(worldName) && worldFile.exists()) {
- sender.sendMessage(ChatColor.RED + "Multiverse already knows about this world!");
+
+ // Make sure we don't already know about this world.
+ if (this.worldManager.isMVWorld(worldName)) {
+ sender.sendMessage(ChatColor.GREEN + "Multiverse" + ChatColor.WHITE + " already knows about '" + ChatColor.AQUA + worldName + ChatColor.WHITE + "'!");
return;
}
- String generator = null;
- if (args.size() == 3) {
- generator = args.get(2);
+ File worldFile = new File(this.plugin.getServer().getWorldContainer(), worldName);
+
+ String generator = CommandHandler.getFlag("-g", args);
+ boolean useSpawnAdjust = true;
+ for(String s : args) {
+ if(s.equalsIgnoreCase("-n")) {
+ useSpawnAdjust = false;
+ }
}
String env = args.get(1);
@@ -127,7 +139,7 @@ public class ImportCommand extends MultiverseCommand {
if (worldFile.exists() && env != null) {
Command.broadcastCommandMessage(sender, "Starting import of world '" + worldName + "'...");
- this.worldManager.addWorld(worldName, environment, null, generator);
+ this.worldManager.addWorld(worldName, environment, null, generator, useSpawnAdjust);
Command.broadcastCommandMessage(sender, "Complete!");
} else if (env == null) {
sender.sendMessage(ChatColor.RED + "FAILED.");
diff --git a/src/main/java/com/onarandombox/MultiverseCore/enums/ConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/enums/ConfigProperty.java
index 96d1fee0..f0e85aa6 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/enums/ConfigProperty.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/enums/ConfigProperty.java
@@ -8,8 +8,7 @@
package com.onarandombox.MultiverseCore.enums;
public enum ConfigProperty {
- messagecooldown, teleportcooldown, worldnameprefix, enforcegamemodes, enforceaccess, displaypermerrors, debug;
-
+ messagecooldown, teleportcooldown, worldnameprefix, enforcegamemodes, enforceaccess, displaypermerrors, debug, firstworldspawn;
public static String getAllValues() {
String buffer = "";
diff --git a/src/main/java/com/onarandombox/MultiverseCore/event/MVTeleportEvent.java b/src/main/java/com/onarandombox/MultiverseCore/event/MVTeleportEvent.java
index 11923c68..daeb55e8 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/event/MVTeleportEvent.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/event/MVTeleportEvent.java
@@ -16,8 +16,6 @@ import org.bukkit.event.Event;
/**
* Event that gets called when a player use the /mvtp command.
- *
- * @author fernferret
*/
public class MVTeleportEvent extends Event implements Cancellable {
private Player teleportee;
diff --git a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerListener.java b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerListener.java
index 3ae52495..7dcc5f70 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerListener.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerListener.java
@@ -13,21 +13,12 @@ import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.event.MVRespawnEvent;
import com.onarandombox.MultiverseCore.utils.PermissionTools;
import com.onarandombox.MultiverseCore.utils.SafeTTeleporter;
-
import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
-import org.bukkit.event.player.PlayerChangedWorldEvent;
-import org.bukkit.event.player.PlayerChatEvent;
-import org.bukkit.event.player.PlayerJoinEvent;
-import org.bukkit.event.player.PlayerListener;
-import org.bukkit.event.player.PlayerPortalEvent;
-import org.bukkit.event.player.PlayerQuitEvent;
-import org.bukkit.event.player.PlayerRespawnEvent;
-import org.bukkit.event.player.PlayerTeleportEvent;
+import org.bukkit.event.player.*;
import java.util.logging.Level;
@@ -70,6 +61,8 @@ public class MVPlayerListener extends PlayerListener {
@Override
public void onPlayerRespawn(PlayerRespawnEvent event) {
+
+
World world = event.getPlayer().getWorld();
MultiverseWorld mvWorld = this.worldManager.getMVWorld(world.getName());
// If it's not a World MV manages we stop.
@@ -77,6 +70,7 @@ public class MVPlayerListener extends PlayerListener {
return;
}
+
if (mvWorld.getBedRespawn() && event.isBedSpawn()) {
this.plugin.log(Level.FINE, "Spawning " + event.getPlayer().getName() + " at their bed");
return;
@@ -111,11 +105,15 @@ public class MVPlayerListener extends PlayerListener {
@Override
public void onPlayerJoin(PlayerJoinEvent event) {
- if (this.worldManager.getMVWorlds().size() == 0 && this.plugin.getMVPerms().hasPermission(event.getPlayer(), "multiverse.core.import", true)) {
- event.getPlayer().sendMessage("You don't have any worlds imported into Multiverse!");
- event.getPlayer().sendMessage("You can import your current worlds with " + ChatColor.AQUA + "/mvimport");
- event.getPlayer().sendMessage("or you can create new ones with " + ChatColor.GOLD + "/mvcreate");
- event.getPlayer().sendMessage("If you just wanna see all of the Multiverse Help, type: " + ChatColor.GREEN + "/mv");
+ Player p = event.getPlayer();
+ if (!p.hasPlayedBefore()) {
+ this.plugin.log(Level.WARNING, "Player joined first!");
+ this.plugin.log(Level.WARNING, "Loc: " + worldManager.getFirstSpawnWorld().getSpawnLocation());
+ // This will override other spawn plugins atm :(
+ this.spawnNewPlayer(p);
+ return;
+ } else {
+ this.plugin.log(Level.WARNING, "Player joined AGAIN!");
}
// Handle the Players GameMode setting for the new world.
if (MultiverseCore.EnforceGameModes) {
@@ -127,6 +125,8 @@ public class MVPlayerListener extends PlayerListener {
public void onPlayerChangedWorld(PlayerChangedWorldEvent event) {
// Handle the Players GameMode setting for the new world.
if (MultiverseCore.EnforceGameModes) {
+ // Not yet implemented, but eventually we'll switch to this!
+ //if (this.plugin.getMVWorldManager().getMVWorld(event.getPlayer().getWorld()).getEnforceGameMode())
this.handleGameMode(event.getPlayer(), event.getPlayer().getWorld());
}
}
@@ -216,7 +216,10 @@ public class MVPlayerListener extends PlayerListener {
}
}
-
+ private void spawnNewPlayer(Player player) {
+ // Spawn the player 1 tick after the login. I'm sure there's GOT to be a better way to do this...
+ this.plugin.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new SpawnNewbie(player, this.plugin.getMVWorldManager().getFirstSpawnWorld().getSpawnLocation()), 1L);
+ }
// FOLLOWING 2 Methods and Private class handle Per Player GameModes.
private void handleGameMode(Player player, World world) {
this.plugin.log(Level.FINE, "Handeling gamemode for player: " + player.getName());
@@ -229,7 +232,21 @@ public class MVPlayerListener extends PlayerListener {
public void handleGameMode(Player player, MultiverseWorld world) {
// We perform this task one tick later to MAKE SURE that the player actually reaches the
// destination world, otherwise we'd be changing the player mode if they havent moved anywhere.
- Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new HandleGameMode(player, world), 1L);
+ this.plugin.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new HandleGameMode(player, world), 1L);
+ }
+
+ private class SpawnNewbie implements Runnable {
+ private Player player;
+ private Location spawn;
+
+ private SpawnNewbie(Player player, Location spawn) {
+ this.player = player;
+ this.spawn = spawn;
+ }
+ @Override
+ public void run() {
+ this.player.teleport(this.spawn);
+ }
}
/**
diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/PurgeWorlds.java b/src/main/java/com/onarandombox/MultiverseCore/utils/PurgeWorlds.java
index 3aff8f64..529686d5 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/utils/PurgeWorlds.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/utils/PurgeWorlds.java
@@ -9,16 +9,9 @@ package com.onarandombox.MultiverseCore.utils;
import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
-
import org.bukkit.World;
import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Animals;
-import org.bukkit.entity.EnderDragon;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.Ghast;
-import org.bukkit.entity.Monster;
-import org.bukkit.entity.Slime;
-import org.bukkit.entity.Squid;
+import org.bukkit.entity.*;
import java.util.ArrayList;
import java.util.List;
@@ -32,7 +25,12 @@ public class PurgeWorlds {
this.plugin = plugin;
}
- /** Synchronizes the given world with it's settings. */
+ /**
+ * Synchronizes the given world with it's settings.
+ *
+ * @param sender The {@link CommandSender} who is requesting the world be purged.
+ * @param worlds A list of {@link MultiverseWorld}
+ */
public void purgeWorlds(CommandSender sender, List worlds) {
if (worlds == null || worlds.isEmpty()) {
return;
@@ -110,7 +108,6 @@ public class PurgeWorlds {
* @param e
* @param creaturesToKill
* @param negate
- *
* @return
*/
private boolean killMonster(MultiverseWorld mvworld, Entity e, List creaturesToKill, boolean negate) {
diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java b/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java
index b1698ade..34324037 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java
@@ -26,19 +26,11 @@ import org.bukkit.plugin.Plugin;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.logging.Level;
/**
* Public facing API to add/remove Multiverse worlds.
- *
- * @author fernferret, Rigby90
*/
public class WorldManager implements MVWorldManager {
private MultiverseCore plugin;
@@ -47,6 +39,7 @@ public class WorldManager implements MVWorldManager {
private List unloadedWorlds;
private FileConfiguration configWorlds = null;
private Map defaultGens;
+ private String firstSpawn;
public WorldManager(MultiverseCore core) {
this.plugin = core;
@@ -83,6 +76,14 @@ public class WorldManager implements MVWorldManager {
*/
@Override
public boolean addWorld(String name, Environment env, String seedString, String generator) {
+ return this.addWorld(name, env, seedString, generator, true);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean addWorld(String name, Environment env, String seedString, String generator, boolean useSpawnAdjust) {
plugin.log(Level.FINE, "Adding world with: " + name + ", " + env.toString() + ", " + seedString + ", " + generator);
Long seed = null;
WorldCreator c = new WorldCreator(name);
@@ -130,7 +131,7 @@ public class WorldManager implements MVWorldManager {
return false;
}
- MultiverseWorld mvworld = new MVWorld(world, this.configWorlds, this.plugin, this.plugin.getServer().getWorld(name).getSeed(), generator);
+ MultiverseWorld mvworld = new MVWorld(world, this.configWorlds, this.plugin, this.plugin.getServer().getWorld(name).getSeed(), generator, useSpawnAdjust);
this.worldPurger.purgeWorld(null, mvworld);
this.worlds.put(name, mvworld);
if (this.unloadedWorlds.contains(name)) {
@@ -192,6 +193,32 @@ public class WorldManager implements MVWorldManager {
return false;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setFirstSpawnWorld(String world) {
+ if (world == null) {
+ this.firstSpawn = this.plugin.getServer().getWorlds().get(0).getName();
+ } else {
+ this.firstSpawn = world;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public MultiverseWorld getFirstSpawnWorld() {
+ MultiverseWorld world = this.getMVWorld(this.firstSpawn);
+ if (world == null) {
+ // If the spawn world was unloaded, get the default world
+ this.plugin.log(Level.WARNING, "The world specified as the spawn world (" + this.firstSpawn + ") did not exist!!");
+ return this.getMVWorld(this.plugin.getServer().getWorlds().get(0));
+ }
+ return world;
+ }
+
/**
* {@inheritDoc}
*/
@@ -498,7 +525,7 @@ public class WorldManager implements MVWorldManager {
// Grab the initial values from the config file.
String environment = this.configWorlds.getString("worlds." + worldKey + ".environment", "NORMAL"); // Grab the Environment as a String.
String seedString = this.configWorlds.getString("worlds." + worldKey + ".seed", null);
- if(seedString == null) {
+ if (seedString == null) {
seedString = this.configWorlds.getLong("worlds." + worldKey + ".seed") + "";
}
diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldStuff.java b/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldStuff.java
index 5076d8f5..22ac387c 100644
--- a/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldStuff.java
+++ b/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldStuff.java
@@ -206,7 +206,6 @@ public class TestWorldStuff {
plugin.onCommand(mockCommandSender, mockCommand, "", new String[]{ "modify", "set", "blah", "fish", "world" });
verify(mockCommandSender).sendMessage(ChatColor.RED + "Sorry, You can't set: '"+ChatColor.GRAY+ "blah" + ChatColor.RED + "'");
-
}
private void createInitialWorlds(Plugin plugin, Command command) {
diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/utils/MVTestLogFormatter.java b/src/test/java/com/onarandombox/MultiverseCore/test/utils/MVTestLogFormatter.java
index 8691997d..a26c235e 100644
--- a/src/test/java/com/onarandombox/MultiverseCore/test/utils/MVTestLogFormatter.java
+++ b/src/test/java/com/onarandombox/MultiverseCore/test/utils/MVTestLogFormatter.java
@@ -16,8 +16,7 @@ import java.util.logging.LogRecord;
/**
* Formatter to format log-messages in tests
- *
- * @author main()
+ *
*/
public class MVTestLogFormatter extends Formatter {
private static final DateFormat df = new SimpleDateFormat("HH:mm:ss");
@@ -40,4 +39,4 @@ public class MVTestLogFormatter extends Formatter {
return ret.toString();
}
-}
\ No newline at end of file
+}
diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/utils/MockBlock.java b/src/test/java/com/onarandombox/MultiverseCore/test/utils/MockBlock.java
index 9519f29b..b5d12199 100644
--- a/src/test/java/com/onarandombox/MultiverseCore/test/utils/MockBlock.java
+++ b/src/test/java/com/onarandombox/MultiverseCore/test/utils/MockBlock.java
@@ -15,8 +15,6 @@ import org.bukkit.block.*;
/**
* Multiverse 2
- *
- * @author fernferret
*/
public class MockBlock implements Block{
private Material type;