Allow the console to load/save all region managers with one command.

This commit is contained in:
wizjany 2013-07-25 10:09:54 -04:00
parent 75b3082b12
commit 326d53fd09
2 changed files with 70 additions and 16 deletions

View File

@ -109,6 +109,7 @@ public void registerEvents() {
}
// unsure if anyone actually started using this yet, but just in case...
@Deprecated
public static boolean checkMove(WorldGuardPlugin plugin, Player player, World world, Location from, Location to) {
return checkMove(plugin, player, from, to); // drop world since it used to be mishandled
}

View File

@ -289,17 +289,28 @@ private static ProtectedRegion createRegionFromSelection(Player player, String i
}
}
private static void commitChanges(CommandSender sender, RegionManager regionManager)
throws CommandException {
commitChanges(sender, regionManager, false);
}
private static void reloadChanges(CommandSender sender, RegionManager regionManager)
throws CommandException {
reloadChanges(sender, regionManager, false);
}
/**
* Save the region database.
*
* @param sender the sender
* @param regionManager the region manager
* @param silent whether to suppress messages sent to the player
* @throws CommandException throw on an error
*/
private static void commitChanges(CommandSender sender, RegionManager regionManager)
private static void commitChanges(CommandSender sender, RegionManager regionManager, boolean silent)
throws CommandException {
try {
if (regionManager.getRegions().size() >= 500) {
if (!silent && regionManager.getRegions().size() >= 500) {
sender.sendMessage(ChatColor.GRAY +
"Now saving region list to disk... (Taking too long? We're fixing it)");
}
@ -310,16 +321,17 @@ private static void commitChanges(CommandSender sender, RegionManager regionMana
}
/**
* Save the region database.
* Load the region database.
*
* @param sender the sender
* @param regionManager the region manager
* @param silent whether to suppress messages sent to the player
* @throws CommandException throw on an error
*/
private static void reloadChanges(CommandSender sender, RegionManager regionManager)
private static void reloadChanges(CommandSender sender, RegionManager regionManager, boolean silent)
throws CommandException {
try {
if (regionManager.getRegions().size() >= 500) {
if (!silent && regionManager.getRegions().size() >= 500) {
sender.sendMessage(ChatColor.GRAY +
"Now loading region list from disk... (Taking too long? We're fixing it)");
}
@ -1067,18 +1079,39 @@ public void remove(CommandContext args, CommandSender sender) throws CommandExce
* @param sender the sender
* @throws CommandException any error
*/
@Command(aliases = {"load", "reload"}, usage = "[-w world]", flags = "w:",
desc = "Reload regions from file", max = 1)
@Command(aliases = {"load", "reload"},
usage = "[world]",
desc = "Reload regions from file",
flags = "w:")
public void load(CommandContext args, CommandSender sender) throws CommandException {
World world = getWorld(args, sender, 'w'); // Get the world
World world = null;
try {
world = getWorld(args, sender, 'w'); // Get the world
} catch (CommandException e) {
// assume the user wants to reload all worlds
}
// Check permissions
if (!getPermissionModel(sender).mayForceLoadRegions()) {
throw new CommandPermissionsException();
}
RegionManager regionManager = plugin.getGlobalRegionManager().get(world);
reloadChanges(sender, regionManager);
if (world != null) {
RegionManager regionManager = plugin.getGlobalRegionManager().get(world);
if (regionManager == null) {
throw new CommandException("No region manager exists for world '" + world.getName() + "'.");
}
reloadChanges(sender, regionManager);
} else {
sender.sendMessage(ChatColor.YELLOW + "Loading all region databases... This might take a bit.");
for (World w : plugin.getServer().getWorlds()) {
RegionManager regionManager = plugin.getGlobalRegionManager().get(w);
if (regionManager == null) {
continue;
}
reloadChanges(sender, regionManager, true);
}
}
sender.sendMessage(ChatColor.YELLOW + "Region databases loaded.");
}
@ -1090,19 +1123,39 @@ public void load(CommandContext args, CommandSender sender) throws CommandExcept
* @param sender the sender
* @throws CommandException any error
*/
@Command(aliases = {"save", "write"}, usage = "[-w world]", flags = "w:",
desc = "Re-save regions to file", max = 1)
@Command(aliases = {"save", "write"},
usage = "[world]",
desc = "Re-save regions to file",
flags = "w:")
public void save(CommandContext args, CommandSender sender) throws CommandException {
World world = getWorld(args, sender, 'w'); // Get the world
World world = null;
try {
world = getWorld(args, sender, 'w'); // Get the world
} catch (CommandException e) {
// assume user wants to save all worlds
}
// Check permissions
if (!getPermissionModel(sender).mayForceSaveRegions()) {
throw new CommandPermissionsException();
}
RegionManager regionManager = plugin.getGlobalRegionManager().get(world);
commitChanges(sender, regionManager);
if (world != null) {
RegionManager regionManager = plugin.getGlobalRegionManager().get(world);
if (regionManager == null) {
throw new CommandException("No region manager exists for world '" + world.getName() + "'.");
}
commitChanges(sender, regionManager);
} else {
sender.sendMessage(ChatColor.YELLOW + "Saving all region databases... This might take a bit.");
for (World w : plugin.getServer().getWorlds()) {
RegionManager regionManager = plugin.getGlobalRegionManager().get(w);
if (regionManager == null) {
continue;
}
commitChanges(sender, regionManager, true);
}
}
sender.sendMessage(ChatColor.YELLOW + "Region databases saved.");
}