Fix seeds (Closes #266), Allow Regeneration of map (Closes #202)

Fixed long seeds not loading properly (this happened with the new
config), Add Regenning of worlds. This works for the same seed, but new
seeds are still in the works.
This commit is contained in:
Eric Stokes 2011-11-26 11:28:44 -07:00
parent fa0c843f39
commit d2a5898e53
21 changed files with 255 additions and 62 deletions

View File

@ -60,6 +60,7 @@ public class MVWorld implements MultiverseWorld {
// Set local values that CANNOT be changed by user // Set local values that CANNOT be changed by user
this.world = world; this.world = world;
this.name = world.getName(); this.name = world.getName();
System.out.println("MVWorld recieved seed: " + seed);
this.seed = seed; this.seed = seed;
this.environment = world.getEnvironment(); this.environment = world.getEnvironment();

View File

@ -11,6 +11,8 @@ import com.fernferret.allpay.AllPay;
import com.fernferret.allpay.GenericBank; import com.fernferret.allpay.GenericBank;
import com.onarandombox.MultiverseCore.api.Core; import com.onarandombox.MultiverseCore.api.Core;
import com.onarandombox.MultiverseCore.api.MVPlugin; import com.onarandombox.MultiverseCore.api.MVPlugin;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.commands.*; import com.onarandombox.MultiverseCore.commands.*;
import com.onarandombox.MultiverseCore.destination.*; import com.onarandombox.MultiverseCore.destination.*;
import com.onarandombox.MultiverseCore.listeners.MVEntityListener; import com.onarandombox.MultiverseCore.listeners.MVEntityListener;
@ -37,6 +39,7 @@ import java.io.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Random;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -92,7 +95,7 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
// Configurations // Configurations
private FileConfiguration multiverseConfig = null; private FileConfiguration multiverseConfig = null;
private WorldManager worldManager = new WorldManager(this); private MVWorldManager worldManager = new WorldManager(this);
// Setup the block/player/entity listener. // Setup the block/player/entity listener.
private MVPlayerListener playerListener = new MVPlayerListener(this); private MVPlayerListener playerListener = new MVPlayerListener(this);
@ -234,7 +237,9 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
this.destFactory.registerDestinationType(BedDestination.class, "b"); this.destFactory.registerDestinationType(BedDestination.class, "b");
} }
/** Function to Register all the Events needed. */ /**
* Function to Register all the Events needed.
*/
private void registerEvents() { private void registerEvents() {
PluginManager pm = getServer().getPluginManager(); 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_MOVE, playerListener, Priority.Highest, this); // Low so it acts above any other.
@ -258,7 +263,9 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
pm.registerEvent(Event.Type.THUNDER_CHANGE, this.weatherListener, Priority.Normal, this); pm.registerEvent(Event.Type.THUNDER_CHANGE, this.weatherListener, Priority.Normal, this);
} }
/** Load the Configuration files OR create the default config files. */ /**
* Load the Configuration files OR create the default config files.
*/
public void loadConfigs() { public void loadConfigs() {
// Now grab the Configuration Files. // Now grab the Configuration Files.
this.multiverseConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder(), "config.yml")); this.multiverseConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder(), "config.yml"));
@ -284,7 +291,9 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
return this.messaging; return this.messaging;
} }
/** Register Multiverse-Core commands to Command Manager. */ /**
* Register Multiverse-Core commands to Command Manager.
*/
private void registerCommands() { private void registerCommands() {
// Intro Commands // Intro Commands
this.commandHandler.registerCommand(new HelpCommand(this)); this.commandHandler.registerCommand(new HelpCommand(this));
@ -304,6 +313,7 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
this.commandHandler.registerCommand(new LoadCommand(this)); this.commandHandler.registerCommand(new LoadCommand(this));
this.commandHandler.registerCommand(new RemoveCommand(this)); this.commandHandler.registerCommand(new RemoveCommand(this));
this.commandHandler.registerCommand(new DeleteCommand(this)); this.commandHandler.registerCommand(new DeleteCommand(this));
this.commandHandler.registerCommand(new RegenCommand(this));
this.commandHandler.registerCommand(new ConfirmCommand(this)); this.commandHandler.registerCommand(new ConfirmCommand(this));
// Modification commands // Modification commands
this.commandHandler.registerCommand(new ModifyCommand(this)); this.commandHandler.registerCommand(new ModifyCommand(this));
@ -320,7 +330,9 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
this.commandHandler.registerCommand(new CheckCommand(this)); this.commandHandler.registerCommand(new CheckCommand(this));
} }
/** What happens when the plugin gets disabled... */ /**
* What happens when the plugin gets disabled...
*/
public void onDisable() { public void onDisable() {
debugLog.close(); debugLog.close();
this.banker = null; this.banker = null;
@ -356,7 +368,9 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
return this.ph; return this.ph;
} }
/** onCommand */ /**
* onCommand
*/
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) { public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) {
if (!this.isEnabled()) { if (!this.isEnabled()) {
@ -445,7 +459,6 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
* This code should get moved somewhere more appropriate, but for now, it's here. * This code should get moved somewhere more appropriate, but for now, it's here.
* *
* @param env * @param env
*
* @return * @return
*/ */
public Environment getEnvFromString(String env) { public Environment getEnvFromString(String env) {
@ -487,12 +500,16 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
return this.pluginCount; return this.pluginCount;
} }
/** Increments the number of plugins that have specifically hooked into core. */ /**
* Increments the number of plugins that have specifically hooked into core.
*/
public void incrementPluginCount() { public void incrementPluginCount() {
this.pluginCount += 1; this.pluginCount += 1;
} }
/** Decrements the number of plugins that have specifically hooked into core. */ /**
* Decrements the number of plugins that have specifically hooked into core.
*/
public void decrementPluginCount() { public void decrementPluginCount() {
this.pluginCount -= 1; this.pluginCount -= 1;
} }
@ -563,7 +580,7 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
return this.spoutInterface; return this.spoutInterface;
} }
public WorldManager getMVWorldManager() { public MVWorldManager getMVWorldManager() {
return this.worldManager; return this.worldManager;
} }
@ -597,10 +614,40 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
* NOT deprecated for the time as queued commands use this. * NOT deprecated for the time as queued commands use this.
* *
* @param name World to delete * @param name World to delete
*
* @return True if success, false if fail. * @return True if success, false if fail.
*/ */
public Boolean deleteWorld(String name) { public Boolean deleteWorld(String name) {
return this.worldManager.deleteWorld(name); return this.worldManager.deleteWorld(name);
} }
/**
* Used by queued commands to delete a world on a delay.
*
* @param name World to delete
* @return True if success, false if fail.
*/
public Boolean regenWorld(String name, Boolean useNewSeed, Boolean randomSeed, String seed) {
MultiverseWorld world = this.worldManager.getMVWorld(name);
if(world == null) {
return false;
}
if (useNewSeed) {
System.out.println("Using a new seed");
// Set the worldseed.
if(randomSeed) {
System.out.println("Using a random seed");
Random random = new Random();
Long newseed = random.nextLong();
seed = newseed.toString();
} else {
System.out.println("Using " + seed);
}
((WorldManager)this.worldManager).getConfigWorlds().set("worlds." + name + "seed", seed);
}
if (this.worldManager.deleteWorld(name, false)) {
this.worldManager.loadWorlds(false);
return true;
}
return false;
}
} }

View File

@ -97,5 +97,5 @@ public interface Core {
* *
* @return {@link WorldManager}. * @return {@link WorldManager}.
*/ */
public WorldManager getMVWorldManager(); public MVWorldManager getMVWorldManager();
} }

View File

@ -10,8 +10,10 @@ package com.onarandombox.MultiverseCore.api;
import com.onarandombox.MultiverseCore.utils.PurgeWorlds; import com.onarandombox.MultiverseCore.utils.PurgeWorlds;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.World.Environment; import org.bukkit.World.Environment;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
import java.io.File;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -31,7 +33,6 @@ public interface MVWorldManager {
* If the seed is a Long, * If the seed is a Long,
* it will be interpreted as such. * it will be interpreted as such.
* @param generator The Custom generator plugin to use. * @param generator The Custom generator plugin to use.
*
* @return True if the world is added, false if not. * @return True if the world is added, false if not.
*/ */
public boolean addWorld(String name, Environment env, String seedString, String generator); public boolean addWorld(String name, Environment env, String seedString, String generator);
@ -41,16 +42,25 @@ public interface MVWorldManager {
* config and deletes the folder * config and deletes the folder
* *
* @param name The name of the world to remove * @param name The name of the world to remove
*
* @return True if success, false if failure. * @return True if success, false if failure.
*/ */
public Boolean deleteWorld(String name); public Boolean deleteWorld(String name);
/**
* Remove the world from the Multiverse list, from the
* config and deletes the folder
*
* @param name The name of the world to remove
* @param removeConfig If true(default), we'll remove the entries from the
* config. If false, they'll stay and the world may come back.
* @return True if success, false if failure.
*/
public Boolean deleteWorld(String name, boolean removeConfig);
/** /**
* Unload a world from Multiverse * Unload a world from Multiverse
* *
* @param name Name of the world to unload * @param name Name of the world to unload
*
* @return True if the world was unloaded, false if not. * @return True if the world was unloaded, false if not.
*/ */
public boolean unloadWorld(String name); public boolean unloadWorld(String name);
@ -60,7 +70,6 @@ public interface MVWorldManager {
* unloaded with {@link #unloadWorld(String)}. * unloaded with {@link #unloadWorld(String)}.
* *
* @param name The name of the world to load * @param name The name of the world to load
*
* @return True if success, false if failure. * @return True if success, false if failure.
*/ */
public boolean loadWorld(String name); public boolean loadWorld(String name);
@ -78,7 +87,6 @@ public interface MVWorldManager {
* @param generator The generator name. * @param generator The generator name.
* @param generatorID The generator id. * @param generatorID The generator id.
* @param worldName The worldName to use as the default. * @param worldName The worldName to use as the default.
*
* @return A {@link ChunkGenerator} or null * @return A {@link ChunkGenerator} or null
*/ */
public ChunkGenerator getChunkGenerator(String generator, String generatorID, String worldName); public ChunkGenerator getChunkGenerator(String generator, String generatorID, String worldName);
@ -96,7 +104,6 @@ public interface MVWorldManager {
* This will search name AND alias. * This will search name AND alias.
* *
* @param name The name or alias of the world to get. * @param name The name or alias of the world to get.
*
* @return A {@link MultiverseWorld} or null. * @return A {@link MultiverseWorld} or null.
*/ */
public MultiverseWorld getMVWorld(String name); public MultiverseWorld getMVWorld(String name);
@ -105,7 +112,6 @@ public interface MVWorldManager {
* Returns a {@link MultiverseWorld} if it exists, and null if it does not. * Returns a {@link MultiverseWorld} if it exists, and null if it does not.
* *
* @param world The Bukkit world to check. * @param world The Bukkit world to check.
*
* @return A {@link MultiverseWorld} or null. * @return A {@link MultiverseWorld} or null.
*/ */
public MultiverseWorld getMVWorld(World world); public MultiverseWorld getMVWorld(World world);
@ -114,7 +120,6 @@ public interface MVWorldManager {
* Checks to see if the given name is a valid {@link MultiverseWorld} * Checks to see if the given name is a valid {@link MultiverseWorld}
* *
* @param name The name or alias of the world to check. * @param name The name or alias of the world to check.
*
* @return True if the world exists, false if not. * @return True if the world exists, false if not.
*/ */
public boolean isMVWorld(String name); public boolean isMVWorld(String name);
@ -123,7 +128,6 @@ public interface MVWorldManager {
* Checks to see if the given world is a valid {@link MultiverseWorld} * Checks to see if the given world is a valid {@link MultiverseWorld}
* *
* @param world The Bukkit world to check. * @param world The Bukkit world to check.
*
* @return True if the world has been loaded into MV2, false if not. * @return True if the world has been loaded into MV2, false if not.
*/ */
public boolean isMVWorld(World world); public boolean isMVWorld(World world);
@ -136,6 +140,13 @@ public interface MVWorldManager {
*/ */
public void loadWorlds(boolean forceLoad); public void loadWorlds(boolean forceLoad);
/**
* Loads the Worlds & Settings for any worlds that bukkit loaded before us.
* <p/>
* This way people will _always_ have some worlds in the list.
*/
public void loadDefaultWorlds();
/** /**
* Return the World Purger. * Return the World Purger.
* *
@ -151,5 +162,38 @@ public interface MVWorldManager {
*/ */
public MultiverseWorld getSpawnWorld(); public MultiverseWorld getSpawnWorld();
/**
* Gets the list of worlds in the config, but unloaded.
*
* @return A List of worlds as strings.
*/
public List<String> getUnloadedWorlds(); public List<String> getUnloadedWorlds();
/**
* This method populates an internal list and needs to be called after multiverse initialization.
*/
public void getDefaultWorldGenerators();
/**
* Load the config from a file.
*
* @param file The file to load.
* @return A loaded configuration.
*/
public FileConfiguration loadWorldConfig(File file);
/**
* Saves the world config to disk.
*
* @return True if success, false if fail.
*/
public boolean saveWorldsConfig();
/**
* Remove the world from the Multiverse list and from the config
*
* @param name The name of the world to remove
* @return True if success, false if failure.
*/
public boolean removeWorldFromConfig(String name);
} }

View File

@ -11,7 +11,6 @@ import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVDestination; import com.onarandombox.MultiverseCore.api.MVDestination;
import com.onarandombox.MultiverseCore.destination.InvalidDestination; import com.onarandombox.MultiverseCore.destination.InvalidDestination;
import com.onarandombox.MultiverseCore.utils.MVPermissions; import com.onarandombox.MultiverseCore.utils.MVPermissions;
import com.onarandombox.MultiverseCore.utils.WorldManager;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -20,7 +19,6 @@ import org.bukkit.permissions.PermissionDefault;
import java.util.List; import java.util.List;
public class CheckCommand extends MultiverseCommand { public class CheckCommand extends MultiverseCommand {
private WorldManager worldManager;
public CheckCommand(MultiverseCore plugin) { public CheckCommand(MultiverseCore plugin) {
super(plugin); super(plugin);
@ -33,7 +31,6 @@ public class CheckCommand extends MultiverseCommand {
this.addCommandExample("/mv check " + ChatColor.GREEN + "Rigby90 " + ChatColor.LIGHT_PURPLE + "p:MyPortal"); this.addCommandExample("/mv check " + ChatColor.GREEN + "Rigby90 " + ChatColor.LIGHT_PURPLE + "p:MyPortal");
this.addCommandExample("/mv check " + ChatColor.GREEN + "lithium3141 " + ChatColor.LIGHT_PURPLE + "ow:WarpName"); this.addCommandExample("/mv check " + ChatColor.GREEN + "lithium3141 " + ChatColor.LIGHT_PURPLE + "ow:WarpName");
this.setPermission("multiverse.core.debug", "Checks to see if a player can go to a destination. Prints debug if false.", PermissionDefault.OP); this.setPermission("multiverse.core.debug", "Checks to see if a player can go to a destination. Prints debug if false.", PermissionDefault.OP);
this.worldManager = this.plugin.getMVWorldManager();
} }
@Override @Override

View File

@ -8,9 +8,9 @@
package com.onarandombox.MultiverseCore.commands; package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld; import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.utils.LocationManipulation; import com.onarandombox.MultiverseCore.utils.LocationManipulation;
import com.onarandombox.MultiverseCore.utils.WorldManager;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
@ -22,7 +22,7 @@ import java.text.DecimalFormat;
import java.util.List; import java.util.List;
public class CoordCommand extends MultiverseCommand { public class CoordCommand extends MultiverseCommand {
private WorldManager worldManager; private MVWorldManager worldManager;
public CoordCommand(MultiverseCore plugin) { public CoordCommand(MultiverseCore plugin) {
super(plugin); super(plugin);

View File

@ -8,6 +8,7 @@
package com.onarandombox.MultiverseCore.commands; package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.utils.WorldManager; import com.onarandombox.MultiverseCore.utils.WorldManager;
import com.pneumaticraft.commandhandler.CommandHandler; import com.pneumaticraft.commandhandler.CommandHandler;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -20,7 +21,7 @@ import java.io.File;
import java.util.List; import java.util.List;
public class CreateCommand extends MultiverseCommand { public class CreateCommand extends MultiverseCommand {
private WorldManager worldManager; private MVWorldManager worldManager;
public CreateCommand(MultiverseCore plugin) { public CreateCommand(MultiverseCore plugin) {
super(plugin); super(plugin);

View File

@ -8,7 +8,7 @@
package com.onarandombox.MultiverseCore.commands; package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.utils.WorldManager; import com.onarandombox.MultiverseCore.api.MVWorldManager;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.World.Environment; import org.bukkit.World.Environment;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -20,7 +20,7 @@ import java.io.FilenameFilter;
import java.util.List; import java.util.List;
public class ImportCommand extends MultiverseCommand { public class ImportCommand extends MultiverseCommand {
private WorldManager worldManager; private MVWorldManager worldManager;
public ImportCommand(MultiverseCore plugin) { public ImportCommand(MultiverseCore plugin) {
super(plugin); super(plugin);

View File

@ -9,8 +9,12 @@ package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.FancyText; import com.onarandombox.MultiverseCore.api.FancyText;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld; import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.utils.*; import com.onarandombox.MultiverseCore.utils.FancyColorScheme;
import com.onarandombox.MultiverseCore.utils.FancyHeader;
import com.onarandombox.MultiverseCore.utils.FancyMessage;
import com.onarandombox.MultiverseCore.utils.LocationManipulation;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -24,7 +28,7 @@ import java.util.List;
//import com.sun.xml.internal.ws.util.StringUtils; //import com.sun.xml.internal.ws.util.StringUtils;
public class InfoCommand extends MultiverseCommand { public class InfoCommand extends MultiverseCommand {
private WorldManager worldManager; private MVWorldManager worldManager;
public InfoCommand(MultiverseCore plugin) { public InfoCommand(MultiverseCore plugin) {
super(plugin); super(plugin);

View File

@ -8,9 +8,9 @@
package com.onarandombox.MultiverseCore.commands; package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld; import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.enums.Action; import com.onarandombox.MultiverseCore.enums.Action;
import com.onarandombox.MultiverseCore.utils.WorldManager;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -22,7 +22,7 @@ import java.util.List;
// Anything not in here will only support the SET action // Anything not in here will only support the SET action
public class ModifyAddCommand extends MultiverseCommand { public class ModifyAddCommand extends MultiverseCommand {
private WorldManager worldManager; private MVWorldManager worldManager;
public ModifyAddCommand(MultiverseCore plugin) { public ModifyAddCommand(MultiverseCore plugin) {
super(plugin); super(plugin);

View File

@ -8,6 +8,7 @@
package com.onarandombox.MultiverseCore.commands; package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld; import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.enums.Action; import com.onarandombox.MultiverseCore.enums.Action;
import com.onarandombox.MultiverseCore.utils.WorldManager; import com.onarandombox.MultiverseCore.utils.WorldManager;
@ -19,7 +20,7 @@ import org.bukkit.permissions.PermissionDefault;
import java.util.List; import java.util.List;
public class ModifyClearCommand extends MultiverseCommand { public class ModifyClearCommand extends MultiverseCommand {
private WorldManager worldManager; private MVWorldManager worldManager;
public ModifyClearCommand(MultiverseCore plugin) { public ModifyClearCommand(MultiverseCore plugin) {
super(plugin); super(plugin);

View File

@ -8,9 +8,9 @@
package com.onarandombox.MultiverseCore.commands; package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld; import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.enums.Action; import com.onarandombox.MultiverseCore.enums.Action;
import com.onarandombox.MultiverseCore.utils.WorldManager;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -19,7 +19,7 @@ import org.bukkit.permissions.PermissionDefault;
import java.util.List; import java.util.List;
public class ModifyRemoveCommand extends MultiverseCommand { public class ModifyRemoveCommand extends MultiverseCommand {
private WorldManager worldManager; private MVWorldManager worldManager;
public ModifyRemoveCommand(MultiverseCore plugin) { public ModifyRemoveCommand(MultiverseCore plugin) {
super(plugin); super(plugin);

View File

@ -8,6 +8,7 @@
package com.onarandombox.MultiverseCore.commands; package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld; import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.enums.EnglishChatColor; import com.onarandombox.MultiverseCore.enums.EnglishChatColor;
import com.onarandombox.MultiverseCore.exceptions.PropertyDoesNotExistException; import com.onarandombox.MultiverseCore.exceptions.PropertyDoesNotExistException;
@ -20,7 +21,7 @@ import org.bukkit.permissions.PermissionDefault;
import java.util.List; import java.util.List;
public class ModifySetCommand extends MultiverseCommand { public class ModifySetCommand extends MultiverseCommand {
private WorldManager worldManager; private MVWorldManager worldManager;
public ModifySetCommand(MultiverseCore plugin) { public ModifySetCommand(MultiverseCore plugin) {
super(plugin); super(plugin);

View File

@ -8,9 +8,9 @@
package com.onarandombox.MultiverseCore.commands; package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld; import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.utils.PurgeWorlds; import com.onarandombox.MultiverseCore.utils.PurgeWorlds;
import com.onarandombox.MultiverseCore.utils.WorldManager;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -21,7 +21,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
public class PurgeCommand extends MultiverseCommand { public class PurgeCommand extends MultiverseCommand {
private WorldManager worldManager; private MVWorldManager worldManager;
public PurgeCommand(MultiverseCore plugin) { public PurgeCommand(MultiverseCore plugin) {
super(plugin); super(plugin);

View File

@ -0,0 +1,47 @@
/******************************************************************************
* Multiverse 2 Copyright (c) the Multiverse Team 2011. *
* Multiverse 2 is licensed under the BSD License. *
* For more information please check the README.md file included *
* with this project. *
******************************************************************************/
package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.permissions.PermissionDefault;
import java.util.ArrayList;
import java.util.List;
public class RegenCommand extends MultiverseCommand {
public RegenCommand(MultiverseCore plugin) {
super(plugin);
this.setName("Regenerates a World");
this.setCommandUsage("/mv regen" + ChatColor.GREEN + " {WORLD}" + ChatColor.GOLD + " [-s [SEED]]");
this.setArgRange(1, 3);
this.addKey("mvregen");
this.addKey("mv regen");
this.addCommandExample("You can use the -s with no args to get a new seed:");
this.addCommandExample("/mv regen " + ChatColor.GREEN + "MyWorld" + ChatColor.GOLD + " -s");
this.addCommandExample("or specifiy a seed to get that one:");
this.addCommandExample("/mv regen " + ChatColor.GREEN + "MyWorld" + ChatColor.GOLD + " -s" + ChatColor.AQUA + " gargamel");
this.setPermission("multiverse.core.delete", "Deletes a world on your server. " + ChatColor.RED + "PERMANENTLY.", PermissionDefault.OP);
}
@Override
public void runCommand(CommandSender sender, List<String> args) {
Boolean useseed = (!(args.size() == 1));
Boolean randomseed = (args.size() == 2 && args.get(1).equalsIgnoreCase("-s"));
String seed = (args.size() == 3) ? args.get(2) : "";
Class<?> paramTypes[] = {String.class, Boolean.class, Boolean.class, String.class};
List<Object> objectArgs = new ArrayList<Object>();
objectArgs.add(args.get(0));
objectArgs.add(useseed);
objectArgs.add(randomseed);
objectArgs.add(seed);
this.plugin.getCommandHandler().queueCommand(sender, "mvregen", "regenWorld", objectArgs, paramTypes, ChatColor.GREEN + "World Regenerated!", ChatColor.RED + "World could NOT be regenerated!");
}
}

View File

@ -8,6 +8,7 @@
package com.onarandombox.MultiverseCore.commands; package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld; import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.utils.WorldManager; import com.onarandombox.MultiverseCore.utils.WorldManager;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -20,7 +21,7 @@ import java.util.List;
public class WhoCommand extends MultiverseCommand { public class WhoCommand extends MultiverseCommand {
private WorldManager worldManager; private MVWorldManager worldManager;
public WhoCommand(MultiverseCore plugin) { public WhoCommand(MultiverseCore plugin) {
super(plugin); super(plugin);

View File

@ -8,6 +8,7 @@
package com.onarandombox.MultiverseCore.listeners; package com.onarandombox.MultiverseCore.listeners;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld; import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.utils.WorldManager; import com.onarandombox.MultiverseCore.utils.WorldManager;
import org.bukkit.World; import org.bukkit.World;
@ -27,7 +28,7 @@ import java.util.logging.Level;
public class MVEntityListener extends EntityListener { public class MVEntityListener extends EntityListener {
private MultiverseCore plugin; private MultiverseCore plugin;
private WorldManager worldManager; private MVWorldManager worldManager;
public MVEntityListener(MultiverseCore plugin) { public MVEntityListener(MultiverseCore plugin) {
this.plugin = plugin; this.plugin = plugin;

View File

@ -9,6 +9,7 @@ package com.onarandombox.MultiverseCore.listeners;
import com.fernferret.allpay.GenericBank; import com.fernferret.allpay.GenericBank;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld; import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.event.MVRespawnEvent; import com.onarandombox.MultiverseCore.event.MVRespawnEvent;
import com.onarandombox.MultiverseCore.utils.SafeTTeleporter; import com.onarandombox.MultiverseCore.utils.SafeTTeleporter;
@ -22,7 +23,7 @@ import java.util.logging.Level;
public class MVPlayerListener extends PlayerListener { public class MVPlayerListener extends PlayerListener {
MultiverseCore plugin; MultiverseCore plugin;
SafeTTeleporter mvteleporter; SafeTTeleporter mvteleporter;
WorldManager worldManager; MVWorldManager worldManager;
public MVPlayerListener(MultiverseCore plugin) { public MVPlayerListener(MultiverseCore plugin) {
this.plugin = plugin; this.plugin = plugin;

View File

@ -9,6 +9,7 @@ package com.onarandombox.MultiverseCore.utils;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVDestination; import com.onarandombox.MultiverseCore.api.MVDestination;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld; import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.pneumaticraft.commandhandler.PermissionsInterface; import com.pneumaticraft.commandhandler.PermissionsInterface;
import org.bukkit.Location; import org.bukkit.Location;
@ -23,7 +24,7 @@ import java.util.logging.Level;
public class MVPermissions implements PermissionsInterface { public class MVPermissions implements PermissionsInterface {
private MultiverseCore plugin; private MultiverseCore plugin;
private WorldManager worldMgr; private MVWorldManager worldMgr;
/** /**
* Constructor FTW * Constructor FTW
@ -40,7 +41,6 @@ public class MVPermissions implements PermissionsInterface {
* *
* @param p The player to check. * @param p The player to check.
* @param w * @param w
*
* @return * @return
*/ */
public boolean canTravelFromWorld(Player p, MultiverseWorld w) { public boolean canTravelFromWorld(Player p, MultiverseWorld w) {
@ -74,7 +74,6 @@ public class MVPermissions implements PermissionsInterface {
* *
* @param p * @param p
* @param w * @param w
*
* @return * @return
*/ */
public boolean canEnterWorld(Player p, MultiverseWorld w) { public boolean canEnterWorld(Player p, MultiverseWorld w) {
@ -103,7 +102,6 @@ public class MVPermissions implements PermissionsInterface {
* *
* @param sender The CommandSender to check. * @param sender The CommandSender to check.
* @param d The destination they are requesting. * @param d The destination they are requesting.
*
* @return True if that sender can go to that destination * @return True if that sender can go to that destination
*/ */
public boolean canEnterDestination(CommandSender sender, MVDestination d) { public boolean canEnterDestination(CommandSender sender, MVDestination d) {
@ -130,7 +128,6 @@ public class MVPermissions implements PermissionsInterface {
* @param sender Who is requesting the permission. * @param sender Who is requesting the permission.
* @param node The permission node in string format; multiverse.core.list.worlds for example. * @param node The permission node in string format; multiverse.core.list.worlds for example.
* @param isOpRequired @Deprecated. This is not used for anything anymore. * @param isOpRequired @Deprecated. This is not used for anything anymore.
*
* @return True if they have that permission or any parent. * @return True if they have that permission or any parent.
*/ */
public boolean hasPermission(CommandSender sender, String node, boolean isOpRequired) { public boolean hasPermission(CommandSender sender, String node, boolean isOpRequired) {
@ -177,7 +174,6 @@ public class MVPermissions implements PermissionsInterface {
* *
* @param sender Who is asking for the permission. * @param sender Who is asking for the permission.
* @param node The permission node to check (possibly already a parent). * @param node The permission node to check (possibly already a parent).
*
* @return True if they have any parent perm, false if none. * @return True if they have any parent perm, false if none.
*/ */
private boolean hasAnyParentPermission(CommandSender sender, String node) { private boolean hasAnyParentPermission(CommandSender sender, String node) {
@ -198,7 +194,6 @@ public class MVPermissions implements PermissionsInterface {
* Given multiverse.core.list.worlds will return multiverse.core.list * Given multiverse.core.list.worlds will return multiverse.core.list
* *
* @param node The root node to check. * @param node The root node to check.
*
* @return The parent of the node * @return The parent of the node
*/ */
private String pullOneLevelOff(String node) { private String pullOneLevelOff(String node) {
@ -292,7 +287,6 @@ public class MVPermissions implements PermissionsInterface {
* If the given permission was 'multiverse.core.tp.self', this would return 'multiverse.core.tp.*'. * If the given permission was 'multiverse.core.tp.self', this would return 'multiverse.core.tp.*'.
* *
* @param seperated * @param seperated
*
* @return * @return
*/ */
private String getParentPerm(String[] seperated) { private String getParentPerm(String[] seperated) {

View File

@ -47,6 +47,10 @@ public class WorldManager implements MVWorldManager {
this.worldPurger = new PurgeWorlds(this.plugin); this.worldPurger = new PurgeWorlds(this.plugin);
} }
/**
* {@inheritDoc}
*/
@Override
public void getDefaultWorldGenerators() { public void getDefaultWorldGenerators() {
this.defaultGens = new HashMap<String, String>(); this.defaultGens = new HashMap<String, String>();
File[] files = this.plugin.getServerFolder().listFiles(new FilenameFilter() { File[] files = this.plugin.getServerFolder().listFiles(new FilenameFilter() {
@ -69,6 +73,7 @@ public class WorldManager implements MVWorldManager {
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override
public boolean addWorld(String name, Environment env, String seedString, String generator) { public boolean addWorld(String name, Environment env, String seedString, String generator) {
plugin.log(Level.FINE, "Adding world with: " + name + ", " + env.toString() + ", " + seedString + ", " + generator); plugin.log(Level.FINE, "Adding world with: " + name + ", " + env.toString() + ", " + seedString + ", " + generator);
Long seed = null; Long seed = null;
@ -117,7 +122,7 @@ public class WorldManager implements MVWorldManager {
return false; return false;
} }
MultiverseWorld mvworld = new MVWorld(world, this.configWorlds, this.plugin, seed, generator); MultiverseWorld mvworld = new MVWorld(world, this.configWorlds, this.plugin, this.plugin.getServer().getWorld(name).getSeed(), generator);
this.worldPurger.purgeWorld(null, mvworld); this.worldPurger.purgeWorld(null, mvworld);
this.worlds.put(name, mvworld); this.worlds.put(name, mvworld);
if (this.unloadedWorlds.contains(name)) { if (this.unloadedWorlds.contains(name)) {
@ -140,6 +145,7 @@ public class WorldManager implements MVWorldManager {
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override
public ChunkGenerator getChunkGenerator(String generator, String generatorID, String worldName) { public ChunkGenerator getChunkGenerator(String generator, String generatorID, String worldName) {
if (generator == null) { if (generator == null) {
return null; return null;
@ -155,11 +161,9 @@ public class WorldManager implements MVWorldManager {
} }
/** /**
* Remove the world from the Multiverse list and from the config * {@inheritDoc}
*
* @param name The name of the world to remove
* @return True if success, false if failure.
*/ */
@Override
public boolean removeWorldFromConfig(String name) { public boolean removeWorldFromConfig(String name) {
if (!unloadWorld(name)) { if (!unloadWorld(name)) {
return false; return false;
@ -183,6 +187,7 @@ public class WorldManager implements MVWorldManager {
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override
public boolean unloadWorld(String name) { public boolean unloadWorld(String name) {
if (this.worlds.containsKey(name)) { if (this.worlds.containsKey(name)) {
if (this.unloadWorldFromBukkit(name, true)) { if (this.unloadWorldFromBukkit(name, true)) {
@ -206,6 +211,7 @@ public class WorldManager implements MVWorldManager {
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override
public boolean loadWorld(String name) { public boolean loadWorld(String name) {
// Check if the World is already loaded // Check if the World is already loaded
if (this.worlds.containsKey(name)) { if (this.worlds.containsKey(name)) {
@ -239,14 +245,21 @@ public class WorldManager implements MVWorldManager {
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public Boolean deleteWorld(String name) { @Override
public Boolean deleteWorld(String name, boolean removeFromConfig) {
World world = this.plugin.getServer().getWorld(name); World world = this.plugin.getServer().getWorld(name);
if (world == null) { if (world == null) {
// We can only delete loaded worlds // We can only delete loaded worlds
return false; return false;
} }
if (!removeWorldFromConfig(name)) { if (removeFromConfig) {
return false; if (!removeWorldFromConfig(name)) {
return false;
}
} else {
if (!this.unloadWorld(name)) {
return false;
}
} }
try { try {
@ -266,11 +279,19 @@ public class WorldManager implements MVWorldManager {
this.plugin.log(Level.SEVERE, "You can go politely explain your situation in #multiverse on esper.net"); this.plugin.log(Level.SEVERE, "You can go politely explain your situation in #multiverse on esper.net");
this.plugin.log(Level.SEVERE, "But from here, it looks like your folder is oddly named."); this.plugin.log(Level.SEVERE, "But from here, it looks like your folder is oddly named.");
this.plugin.log(Level.SEVERE, "This world has been removed from Multiverse-Core so your best bet is to go delete the folder by hand. Sorry."); this.plugin.log(Level.SEVERE, "This world has been removed from Multiverse-Core so your best bet is to go delete the folder by hand. Sorry.");
e.printStackTrace(); this.plugin.log(Level.SEVERE, e.getMessage());
return false; return false;
} }
} }
/**
* {@inheritDoc}
*/
@Override
public Boolean deleteWorld(String name) {
return this.deleteWorld(name, true);
}
/** /**
* Unload a world from Bukkit * Unload a world from Bukkit
* *
@ -286,6 +307,7 @@ public class WorldManager implements MVWorldManager {
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override
public void removePlayersFromWorld(String name) { public void removePlayersFromWorld(String name) {
World w = this.plugin.getServer().getWorld(name); World w = this.plugin.getServer().getWorld(name);
if (w != null) { if (w != null) {
@ -302,6 +324,7 @@ public class WorldManager implements MVWorldManager {
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override
public Collection<MultiverseWorld> getMVWorlds() { public Collection<MultiverseWorld> getMVWorlds() {
return this.worlds.values(); return this.worlds.values();
} }
@ -374,13 +397,16 @@ public class WorldManager implements MVWorldManager {
return false; return false;
} }
/**
* {@inheritDoc}
*/
@Override
public void loadDefaultWorlds() { public void loadDefaultWorlds() {
this.ensureConfigIsPrepared(); this.ensureConfigIsPrepared();
List<World> worlds = this.plugin.getServer().getWorlds(); List<World> worlds = this.plugin.getServer().getWorlds();
Set<String> worldStrings = this.configWorlds.getConfigurationSection("worlds").getKeys(false); Set<String> worldStrings = this.configWorlds.getConfigurationSection("worlds").getKeys(false);
for (World w : worlds) { for (World w : worlds) {
String name = w.getName(); String name = w.getName();
System.out.println(defaultGens);
if (!worldStrings.contains(name)) { if (!worldStrings.contains(name)) {
if (this.defaultGens.containsKey(name)) { if (this.defaultGens.containsKey(name)) {
this.addWorld(name, w.getEnvironment(), w.getSeed() + "", this.defaultGens.get(name)); this.addWorld(name, w.getEnvironment(), w.getSeed() + "", this.defaultGens.get(name));
@ -406,6 +432,7 @@ public class WorldManager implements MVWorldManager {
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override
public void loadWorlds(boolean forceLoad) { public void loadWorlds(boolean forceLoad) {
// Basic Counter to count how many Worlds we are loading. // Basic Counter to count how many Worlds we are loading.
int count = 0; int count = 0;
@ -453,7 +480,12 @@ public class WorldManager implements MVWorldManager {
} }
// Grab the initial values from the config file. // Grab the initial values from the config file.
String environment = this.configWorlds.getString("worlds." + worldKey + ".environment", "NORMAL"); // Grab the Environment as a String. String environment = this.configWorlds.getString("worlds." + worldKey + ".environment", "NORMAL"); // Grab the Environment as a String.
String seedString = this.configWorlds.getString("worlds." + worldKey + ".seed", ""); String seedString = this.configWorlds.getString("worlds." + worldKey + ".seed", null);
if(seedString == null) {
seedString = this.configWorlds.getLong("worlds." + worldKey + ".seed") + "";
}
System.out.println("SEEEEEEEED: " + seedString);
String generatorString = this.configWorlds.getString("worlds." + worldKey + ".generator"); String generatorString = this.configWorlds.getString("worlds." + worldKey + ".generator");
if (environment.equalsIgnoreCase("skylands")) { if (environment.equalsIgnoreCase("skylands")) {
@ -474,6 +506,7 @@ public class WorldManager implements MVWorldManager {
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override
public PurgeWorlds getWorldPurger() { public PurgeWorlds getWorldPurger() {
return this.worldPurger; return this.worldPurger;
} }
@ -484,11 +517,16 @@ public class WorldManager implements MVWorldManager {
* @param file The file to load. * @param file The file to load.
* @return A loaded configuration. * @return A loaded configuration.
*/ */
@Override
public FileConfiguration loadWorldConfig(File file) { public FileConfiguration loadWorldConfig(File file) {
this.configWorlds = YamlConfiguration.loadConfiguration(file); this.configWorlds = YamlConfiguration.loadConfiguration(file);
return this.configWorlds; return this.configWorlds;
} }
/**
* {@inheritDoc}
*/
@Override
public boolean saveWorldsConfig() { public boolean saveWorldsConfig() {
try { try {
this.configWorlds.save(new File(this.plugin.getDataFolder(), "worlds.yml")); this.configWorlds.save(new File(this.plugin.getDataFolder(), "worlds.yml"));
@ -499,12 +537,23 @@ public class WorldManager implements MVWorldManager {
} }
} }
/**
* {@inheritDoc}
*/
@Override
public MultiverseWorld getSpawnWorld() { public MultiverseWorld getSpawnWorld() {
return this.getMVWorld(this.plugin.getServer().getWorlds().get(0)); return this.getMVWorld(this.plugin.getServer().getWorlds().get(0));
} }
/**
* {@inheritDoc}
*/
@Override @Override
public List<String> getUnloadedWorlds() { public List<String> getUnloadedWorlds() {
return this.unloadedWorlds; return this.unloadedWorlds;
} }
public FileConfiguration getConfigWorlds() {
return this.configWorlds;
}
} }

View File

@ -197,4 +197,8 @@ commands:
mvload: mvload:
description: Loads a world into Multiverse. description: Loads a world into Multiverse.
usage: | usage: |
/<command> /<command> {WORLD}
mvregen:
description: Regenerates a world Multiverse already knows about.
usage: |
/<command> {WORLD}