package com.leontg77.uhc.cmds;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.WorldType;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import com.leontg77.uhc.Main;
import com.leontg77.uhc.worlds.WorldManager;
/**
* World command class.
*
* @author LeonT77
*/
public class WorldCommand implements CommandExecutor, TabCompleter {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (!sender.hasPermission("uhc.world")) {
sender.sendMessage(Main.NO_PERM_MSG);
return true;
}
if (args.length == 0) {
sender.sendMessage(Main.PREFIX + "World management help:");
sender.sendMessage("�8� �7/world create �8- �7�oCreate a world.");
sender.sendMessage("�8� �7/world delete �8- �7�oDelete a world.");
sender.sendMessage("�8� �7/world load �8- �7�oLoad a world.");
sender.sendMessage("�8� �7/world unload �8- �7�oUnload a world.");
sender.sendMessage("�8� �7/world list �8- �7�oList all worlds.");
sender.sendMessage("�8� �7/world tp �8- �7�oTeleport to a world.");
return true;
}
WorldManager manager = WorldManager.getInstance();
if (args[0].equalsIgnoreCase("create")) {
if (args.length < 7) {
sender.sendMessage(Main.PREFIX + "Usage: /world create <worldname> <radius> <seed> <worldtype> <nether> <end>");
return true;
}
String worldname;
int radius;
long seed;
WorldType worldtype;
boolean nether;
boolean end;
worldname = args[1];
try {
radius = Integer.parseInt(args[2]);
} catch (Exception e) {
sender.sendMessage(ChatColor.RED + args[2] + " is not a vaild radius.");
return true;
}
try {
seed = Long.parseLong(args[3]);
} catch (Exception e) {
sender.sendMessage(ChatColor.RED + args[3] + " is not a vaild seed.");
return true;
}
try {
worldtype = WorldType.valueOf(args[4].toUpperCase());
} catch (Exception e) {
sender.sendMessage(ChatColor.RED + args[4] + " is not an vaild worldtype.");
return true;
}
if (args[5].equalsIgnoreCase("true")) {
nether = true;
} else if (args[5].equalsIgnoreCase("false")) {
nether = false;
} else {
sender.sendMessage(ChatColor.RED + "Nether can only be true or false.");
return true;
}
if (args[6].equalsIgnoreCase("true")) {
end = true;
} else if (args[6].equalsIgnoreCase("false")) {
end = false;
} else {
sender.sendMessage(ChatColor.RED + "End can only be true or false.");
return true;
}
sender.sendMessage(Main.PREFIX + "Starting creation of world '�a" + worldname + "�7'...");
sender.sendMessage("�8� �7Nether: �6" + nether);
sender.sendMessage("�8� �7End: �6" + end);
sender.sendMessage("�8� �7Radius: �6" + radius);
sender.sendMessage("�8� �7Seed: �6" + seed);
sender.sendMessage("�8� �7Type: �6" + worldtype);
manager.createWorld(worldname, radius, seed, Environment.NORMAL, worldtype);
if (nether) {
manager.createWorld(worldname + "_nether", radius, seed, Environment.NETHER, worldtype);
}
if (end) {
manager.createWorld(worldname + "_end", radius, seed, Environment.THE_END, worldtype);
}
sender.sendMessage(Main.PREFIX + "World creation finished.");
return true;
}
if (args[0].equalsIgnoreCase("delete")) {
if (args.length == 1) {
sender.sendMessage(Main.PREFIX + "Usage: /world delete <world>");
return true;
}
World world = Bukkit.getServer().getWorld(args[1]);
if (world == null) {
sender.sendMessage(ChatColor.RED + args[1] + " does not exist.");
return true;
}
if (world == Bukkit.getWorlds().get(0)) {
sender.sendMessage(ChatColor.RED + "You cannot delete the main world.");
return true;
}
if (manager.deleteWorld(world)) {
sender.sendMessage(Main.PREFIX + "World '�a" + world.getName() + "�7' has been deleted.");
} else {
sender.sendMessage(Main.PREFIX + "Couldn't delete '�a" + world.getName() + "�7'.");
}
return true;
}
if (args[0].equalsIgnoreCase("tp")) {
if (!(sender instanceof Player)) {
sender.sendMessage(ChatColor.RED + "Only players can teleport to worlds.");
return true;
}
Player player = (Player) sender;
if (args.length == 1) {
player.sendMessage(Main.PREFIX + "Usage: /world tp <world>");
return true;
}
World world = Bukkit.getServer().getWorld(args[1]);
if (world == null) {
player.sendMessage(ChatColor.RED + args[1] + " does not exist.");
return true;
}
player.sendMessage(Main.PREFIX + "Teleported to world '�a" + world.getName() + "�7'.");
player.teleport(world.getSpawnLocation());
return true;
}
if (args[0].equalsIgnoreCase("list")) {
sender.sendMessage(Main.PREFIX + "List of all worlds:");
for (World world : Bukkit.getWorlds()) {
ChatColor color;
switch (world.getEnvironment()) {
case NETHER:
color = ChatColor.RED;
break;
case NORMAL:
color = ChatColor.GREEN;
break;
case THE_END:
color = ChatColor.AQUA;
break;
default:
return true;
}
sender.sendMessage("�8� �7" + world.getName() + " �8- " + color + world.getEnvironment().name());
}
return true;
}
if (args[0].equalsIgnoreCase("load")) {
if (args.length == 1) {
sender.sendMessage(Main.PREFIX + "Usage: /world unload <world>");
return true;
}
World world = Bukkit.getServer().getWorld(args[1]);
if (world != null) {
sender.sendMessage(ChatColor.RED + args[1] + " is already loaded.");
return true;
}
try {
manager.loadWorld(args[1]);
sender.sendMessage(Main.PREFIX + "World '�a" + args[1] + "�7' has been loaded.");
} catch (Exception e) {
sender.sendMessage(ChatColor.RED + "This world doesn't exist.");
}
return true;
}
if (args[0].equalsIgnoreCase("unload")) {
if (args.length == 1) {
sender.sendMessage(Main.PREFIX + "Usage: /world unload <world>");
return true;
}
World world = Bukkit.getServer().getWorld(args[1]);
if (world == null) {
sender.sendMessage(ChatColor.RED + args[1] + " does not exist.");
return true;
}
if (world == Bukkit.getWorlds().get(0)) {
sender.sendMessage(ChatColor.RED + "You cannot unload the main world.");
return true;
}
sender.sendMessage(Main.PREFIX + "World '�a" + world.getName() + "�7' has been unloaded.");
manager.unloadWorld(world);
return true;
}
return true;
}
@Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("world")) {
if (sender.hasPermission("uhc.world")) {
if (args.length == 1) {
ArrayList<String> arg = new ArrayList<String>();
ArrayList<String> types = new ArrayList<String>();
types.add("cancel");
if (!args[0].equals("")) {
for (String type : types) {
if (type.startsWith(args[0].toLowerCase())) {
arg.add(type);
}
}
}
else {
for (String type : types) {
arg.add(type);
}
}
return arg;
}
}
}
return null;
}
}