mirror of
https://github.com/Multiverse/Multiverse-Core.git
synced 2024-11-22 10:36:06 +01:00
Added import command.
This commit is contained in:
parent
16b854e8a6
commit
9adef4b2ab
@ -0,0 +1,187 @@
|
||||
package com.onarandombox.multiverse.core.command;
|
||||
|
||||
import com.dumptruckman.minecraft.pluginbase.entity.BasePlayer;
|
||||
import com.dumptruckman.minecraft.pluginbase.locale.ChatColor;
|
||||
import com.dumptruckman.minecraft.pluginbase.locale.Message;
|
||||
import com.dumptruckman.minecraft.pluginbase.permission.Perm;
|
||||
import com.dumptruckman.minecraft.pluginbase.plugin.command.CommandInfo;
|
||||
import com.onarandombox.multiverse.core.api.Core;
|
||||
import com.onarandombox.multiverse.core.api.MVPerms;
|
||||
import com.onarandombox.multiverse.core.api.MultiverseWorld;
|
||||
import com.onarandombox.multiverse.core.minecraft.WorldEnvironment;
|
||||
import com.sk89q.minecraft.util.commands.CommandContext;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@CommandInfo(
|
||||
primaryAlias = "import",
|
||||
desc = "Import a world.",
|
||||
usage = "{NAME} {ENVIRONMENT}",
|
||||
prefixedAliases = "im",
|
||||
directlyPrefixedAliases = "import",
|
||||
flags = "g:n",
|
||||
min = 1,
|
||||
max = 2
|
||||
)
|
||||
public class ImportCommand extends MultiverseCommand {
|
||||
|
||||
public static final Message IMPORT = new Message("command.import.help",
|
||||
"Imports a world into the server from a folder with the given name.",
|
||||
"The folder must exist in the location where worlds are normally located and must contain Minecraft world data.",
|
||||
"You must specify a world environment such as NORMAL or NETHER.",
|
||||
"You may also specify a generator to use along with an optional generator ID.",
|
||||
"The generator name is case sensitive!",
|
||||
"Flags:",
|
||||
" -g {GENERATOR[:ID]} Specify a generator.",
|
||||
" -n Do not adjust spawn",
|
||||
"Examples:",
|
||||
" /mv import &6gargamel&a normal",
|
||||
" /mv import &6hell_world&a nether",
|
||||
" /mv import &6Cleanroom&a normal -g &3CleanroomGenerator");
|
||||
|
||||
public static final Message POTENTIAL_WORLD_LIST = new Message("command.import.potential_world_list",
|
||||
"&b====[ These look like worlds ]====", "%s");
|
||||
|
||||
public static final Message NO_POTENTIAL_WORLDS = new Message("command.import.no_potential_worlds",
|
||||
"&cNo potential worlds found. Sorry!");
|
||||
|
||||
public static final Message ALREADY_MV_WORLD = new Message("command.import.already_mv_world",
|
||||
"&aMultiverse&f already knows about '&b%s&f'!");
|
||||
|
||||
public static final Message INVALID_ENVIRONMENT = new Message("command.import.invalid_environment",
|
||||
"&cThat is not a valid environment.");
|
||||
|
||||
public static final Message STARTING_IMPORT = new Message("command.import.starting_import",
|
||||
"Starting import of world '%s'...");
|
||||
|
||||
public static final Message IMPORT_COMPLETE = new Message("command.import.import_complete",
|
||||
"&aImport complete!");
|
||||
|
||||
public static final Message IMPORT_FAILED = new Message("command.import.import_failed",
|
||||
"&cImport failed!");
|
||||
|
||||
@Override
|
||||
public Perm getPerm() {
|
||||
return MVPerms.CMD_IMPORT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Message getHelp() {
|
||||
return IMPORT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean runCommand(Core core, BasePlayer sender, CommandContext context) {
|
||||
final String worldName = context.getString(0);
|
||||
|
||||
if (worldName.toLowerCase().equals("--list") || worldName.toLowerCase().equals("-l")) {
|
||||
final String worldList = this.getPotentialWorlds(core);
|
||||
if (worldList.length() > 2) {
|
||||
core.getMessager().message(sender, POTENTIAL_WORLD_LIST, worldList);
|
||||
} else {
|
||||
core.getMessager().message(sender, NO_POTENTIAL_WORLDS);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// 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 (context.argsLength() == 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Make sure we don't already know about this world.
|
||||
if (core.getMVWorldManager().isMVWorld(worldName)) {
|
||||
core.getMessager().message(sender, ALREADY_MV_WORLD, worldName);
|
||||
return true;
|
||||
}
|
||||
|
||||
File worldFile = new File(core.getServerInterface().getWorldContainer(), worldName);
|
||||
|
||||
String generator = context.getFlag('g');
|
||||
boolean useSpawnAdjust = !context.hasFlag('n');
|
||||
|
||||
String env = context.getString(1);
|
||||
WorldEnvironment environment = WorldEnvironment.getFromString(env);
|
||||
if (environment == null) {
|
||||
core.getMessager().message(sender, INVALID_ENVIRONMENT);
|
||||
// TODO EnvironmentCommand.showEnvironments(sender);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (worldFile.exists() && env != null) {
|
||||
core.getMessager().messageAndLog(sender, STARTING_IMPORT, worldName);
|
||||
if (core.getMVWorldManager().addWorld(worldName, environment, null, null, null, generator, useSpawnAdjust)) {
|
||||
core.getMessager().messageAndLog(sender, IMPORT_COMPLETE);
|
||||
} else {
|
||||
core.getMessager().messageAndLog(sender, IMPORT_FAILED);
|
||||
}
|
||||
} else if (env == null) {
|
||||
core.getMessager().message(sender, IMPORT_FAILED);
|
||||
// TODO locale
|
||||
sender.sendMessage("That world environment did not exist.");
|
||||
sender.sendMessage("For a list of available world types, type: " + ChatColor.AQUA + "/mvenv");
|
||||
} else {
|
||||
core.getMessager().message(sender, IMPORT_FAILED);
|
||||
String worldList = this.getPotentialWorlds(core);
|
||||
// TODO locale
|
||||
sender.sendMessage("That world folder does not exist. These look like worlds to me:");
|
||||
sender.sendMessage(worldList);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* A very basic check to see if a folder has a level.dat file.
|
||||
* If it does, we can safely assume it's a world folder.
|
||||
*
|
||||
* @param worldFolder The File that may be a world.
|
||||
* @return True if it looks like a world, false if not.
|
||||
*/
|
||||
private static boolean checkIfIsWorld(File worldFolder) {
|
||||
if (worldFolder.isDirectory()) {
|
||||
File[] files = worldFolder.listFiles(new FilenameFilter() {
|
||||
@Override
|
||||
public boolean accept(File file, String name) {
|
||||
return name.equalsIgnoreCase("level.dat");
|
||||
}
|
||||
});
|
||||
if (files != null && files.length > 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private String getPotentialWorlds(final Core core) {
|
||||
final File worldFolder = core.getServerInterface().getWorldContainer();
|
||||
if (worldFolder == null) {
|
||||
return "";
|
||||
}
|
||||
File[] files = worldFolder.listFiles();
|
||||
String worldList = "";
|
||||
Collection<MultiverseWorld> worlds = core.getMVWorldManager().getMVWorlds();
|
||||
List<String> worldStrings = new ArrayList<String>();
|
||||
for (MultiverseWorld world : worlds) {
|
||||
worldStrings.add(world.getName());
|
||||
}
|
||||
for (String world : core.getMVWorldManager().getUnloadedWorlds()) {
|
||||
worldStrings.add(world);
|
||||
}
|
||||
ChatColor currColor = ChatColor.WHITE;
|
||||
for (File file : files) {
|
||||
if (file.isDirectory() && checkIfIsWorld(file) && !worldStrings.contains(file.getName())) {
|
||||
worldList += currColor + file.getName() + " ";
|
||||
if (currColor == ChatColor.WHITE) {
|
||||
currColor = ChatColor.YELLOW;
|
||||
} else {
|
||||
currColor = ChatColor.WHITE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return worldList;
|
||||
}
|
||||
}
|
@ -1,4 +1,10 @@
|
||||
package com.onarandombox.multiverse.core.minecraft;
|
||||
|
||||
public class WorldEnvironment {
|
||||
public enum WorldEnvironment {
|
||||
|
||||
;
|
||||
|
||||
public static WorldEnvironment getFromString(String name) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user