public void registerEngine(Engine engine) throws EngineException {
		final EngineInfo engDep = engine.getClass().getAnnotation(EngineInfo.class);
		if (engDep != null) {
			String[] depends = engDep.depends();
			for (String s : depends) {
				if (!isRegistered(s)) {
					if (!engineQueue.contains(engine)) {
						engineQueue.add(engine);
					}
					return;
				}
			}
		} else {
			throw new EngineException("Unable to find Engine Info.");
		}
		try {
			engine.runStartupChecks();
			if (!activeEngines.containsKey(engine.getName())) {
				activeEngines.put(engine.getName(), engine);
				System.out.println("[FreeForAll] Engine: " + engine.getName() + " has been started.");
				if (engineQueue.contains(engine)) {
					engineQueue.remove(engine);
				}
				FreeForAll.getInstance().getServer().getPluginManager().registerEvents(engine, FreeForAll.getInstance());
				runEngineQueue();
			} else {
				throw new EngineException("[FreeForAll] Engine with name: " + engine.getName() + " already is registered.");
			}
		} catch (EngineException ex) {
			System.out.println("[FreeForAll] Unabled to start Engine: " + engine.getName() + " Reason: " + ex.getMessage());
		}
	}