public String command(String command) {
		try {
			StringTokenizer tokenizer = new StringTokenizer(command);
			String cmd = tokenizer.nextToken();
			
			if(cmd.equals("stop")) {
				stop();
			} else if(cmd.equals("list")) {
				String list = clientManager.getMap().size() + " connected clients: ";
				int count = 0;
				
				for(Entry<Integer, Client> e : clientManager.getMap().entrySet()) {
					list += e.getValue().getSock().getInetAddress().toString();
					
					if(count != clientManager.getMap().size() - 1)
						list += ' ';
					
					count++;
				}
				
				return list;
			} else if(cmd.equals("worldgen")) {
				// World info
				Vector3 size = new Vector3(Integer.valueOf(tokenizer.nextToken()),
										Integer.valueOf(tokenizer.nextToken()),
										Integer.valueOf(tokenizer.nextToken()));
				
				int minHeight = Integer.valueOf(tokenizer.nextToken());
				int maxHeight = Integer.valueOf(tokenizer.nextToken());
				
				float resolution = Float.valueOf(tokenizer.nextToken());
				
				long seed = Long.valueOf(tokenizer.nextToken());
				
				// Generate world
				long startTime = System.currentTimeMillis();
				world.generateTerrain(size, minHeight, maxHeight, resolution, seed);
				long endTime = System.currentTimeMillis();
				return "Generated terrain in " + (endTime - startTime) + " ms";
			} else if(cmd.equals("worldsave")) {
				String filename = tokenizer.nextToken();
				long startTime = System.currentTimeMillis();
				world.save(filename);
				long endTime = System.currentTimeMillis();
				return "World saved as: " + filename + " in " + (endTime - startTime) + " ms";
			} else if(cmd.equals("worldload")) {
				String filename = tokenizer.nextToken();
				long startTime = System.currentTimeMillis();
				world.load(filename);
				long endTime = System.currentTimeMillis();
				return "Loaded world: " + filename + " in " + (endTime - startTime) + " ms"; 
			}
		} catch(Exception e) {
			return e.toString();
		}
		
		return null;
	}