Code:
[2011/07/28 16:25:19] [Server]: Loaded 15500item prices.
Loaded all shops.
[2011/07/28 16:25:19] [Server]: Reading mapdata...
[2011/07/28 16:25:19] [Server]: Loaded mapdata.
[2011/07/28 16:25:20] [Server]: Loaded packet handlers.
[2011/07/28 16:25:20] [Server]: Loading item definitions...
[2011/07/28 16:25:20] [Server]: Loaded 11992 item definitions.
[2011/07/28 16:25:20] [Server]: Loading npc definitions...
[2011/07/28 16:25:20] [Server]: Loaded 278 npc definitions.
[2011/07/28 16:25:20] [Server]: Loading world list data...
[2011/07/28 16:25:20] [Server]: Setting up world...
[2011/07/28 16:25:20] [Server]: Loading clans....
[2011/07/28 16:25:20] [Server]: Loaded 14 clans.
[2011/07/28 16:25:21] [Server]: Launching worker thread...
log4j:ERROR Could not create an Appender. Reported error follows.
java.lang.ClassNotFoundException: com.rs2hd.util.log.SLF4JAppender
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at org.apache.log4j.helpers.Loader.loadClass(Loader.java:179)
        at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.ja
va:237)
        at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurat
or.java:171)
        at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfi
gurator.java:184)
        at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOM
Configurator.java:502)
        at org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:4
71)
        at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:921)
        at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java
:790)
        at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java
:696)
        at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionCon
verter.java:471)
        at org.apache.log4j.LogManager.<clinit>(LogManager.java:125)
        at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:7
3)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103)
        at org.apache.mina.util.NamePreservingRunnable.<init>(NamePreservingRunn
able.java:32)
        at org.apache.mina.transport.socket.nio.SocketAcceptor.startupWorker(Soc
ketAcceptor.java:165)
        at org.apache.mina.transport.socket.nio.SocketAcceptor.bind(SocketAccept
or.java:141)
        at com.rs2hd.Server.listen(Server.java:101)
        at com.rs2hd.Server.<init>(Server.java:87)
        at com.rs2hd.Main$1.run(Main.java:36)
        at java.lang.Thread.run(Unknown Source)
log4j:ERROR Could not parse url [file:/C:/Users/Turmoil/Desktop/SOURCE/bin/log4j
.xml].
java.lang.NullPointerException
        at java.util.Hashtable.put(Unknown Source)
        at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurat
or.java:172)
        at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfi
gurator.java:184)
        at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOM
Configurator.java:502)
        at org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:4
71)
        at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:921)
        at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java
:790)
        at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java
:696)
        at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionCon
verter.java:471)
        at org.apache.log4j.LogManager.<clinit>(LogManager.java:125)
        at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:7
3)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103)
        at org.apache.mina.util.NamePreservingRunnable.<init>(NamePreservingRunn
able.java:32)
        at org.apache.mina.transport.socket.nio.SocketAcceptor.startupWorker(Soc
ketAcceptor.java:165)
        at org.apache.mina.transport.socket.nio.SocketAcceptor.bind(SocketAccept
or.java:141)
        at com.rs2hd.Server.listen(Server.java:101)
        at com.rs2hd.Server.<init>(Server.java:87)
        at com.rs2hd.Main$1.run(Main.java:36)
        at java.lang.Thread.run(Unknown Source)
[2011/07/28 16:25:21] [Server]: Listening on port 43594
log4j:WARN No appenders could be found for logger (org.apache.mina.filter.execut
or.ExecutorFilter).
log4j:WARN Please initialize the log4j system properly.

Server.Java
Code:
package com.rs2hd;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import org.apache.mina.common.IoAcceptor;
import org.apache.mina.transport.socket.nio.SocketAcceptor;
import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;

import com.rs2hd.event.impl.CleanUpEvent;
import com.rs2hd.io.XStreamPlayerLoader;
import com.rs2hd.model.World;
import com.rs2hd.net.ConnectionHandler;
import com.rs2hd.net.ServerPunishHandler;
import com.rs2hd.util.XStreamUtil;
import com.rs2hd.util.log.Logger;

/**
 * The central class of the server.
 * @author Graham
 *
 */
public final class Server {
	
	public static int updateTime = -1;
	/**
	 * Logger instance.
	 */
	private Logger logger = Logger.getInstance();

	/**
	 * The game engine: where all the game logic processing takes place.
	 */
	private GameEngine engine;

	/**
	 * Misc event executor
	 */
	private static final ScheduledExecutorService miscEvents = Executors.newScheduledThreadPool(1);
	
	/**
	 * Our game logic
	 */
	private final ScheduledExecutorService gameLogic = Executors.newScheduledThreadPool(1);

	/**
	 * Our firewall by mystic :)
	 */
	private static ServerPunishHandler firewall;

	/**
	 * Acceptor.
	 */
	private IoAcceptor acceptor;

	/**
	 * Connection handler.
	 */
	private ConnectionHandler connectionHandler;

	/**
	 * Create this server.
	 * @throws Exception 
	 */
	public Server() throws Exception {
		logger.info("Launching Rs2hd");
		engine = new GameEngine(this);
		logger.info("Setting up world...");
		World.getWorld().setEngine(engine);
		logger.info("Launching worker thread...");
		engine.setWorkerThread(new WorkerThread(new XStreamPlayerLoader()));
		engine.newThread("WorkerThread", engine.getWorkerThread());
		engine.newThread("VoteManager", new VoteManager());
		acceptor = new SocketAcceptor();
		try {
			firewall = (ServerPunishHandler) XStreamUtil.getXStream().fromXML(new FileInputStream("data/text/punishments.xml"));
		} catch(Exception e) {
			firewall = new ServerPunishHandler();
		}
		firewall.set();
		connectionHandler = new ConnectionHandler(engine);
		miscEvents.scheduleAtFixedRate(new CleanUpEvent(), 10, 10, TimeUnit.SECONDS);
		listen(Main.port);
	}

	/**
	 * Start listening on the specified port.
	 * @param port
	 * @throws IOException 
	 * @throws IOException 
	 */
	public void listen(int port) throws IOException {
		SocketAcceptorConfig sac = new SocketAcceptorConfig();
		sac.getSessionConfig().setTcpNoDelay(false);
		sac.setReuseAddress(true);
		sac.setBacklog(100);
		acceptor.bind(new InetSocketAddress(port), connectionHandler, sac);
		logger.info("Listening on port " + port);
	}


	/**
	 * Get the game engine.
	 * @return
	 */
	public GameEngine getEngine() {
		return engine;
	}

	public static ServerPunishHandler getFirewall() {
		return firewall;
	}

	public static void reloadFirewall() {
		try {
			ServerPunishHandler firewall = (ServerPunishHandler) XStreamUtil.getXStream().fromXML(new FileInputStream("data/text/punishments.xml"));
			if(firewall != null) {
				Server.firewall = firewall;
			}
		} catch(Exception e) {
			return;
		}
	}
	
	public void submit(final Runnable task) {
		gameLogic.submit(new Runnable() {
			public void run() {
				try {
					task.run();
				} catch(Exception e) {
				} catch(Throwable t) {
				}
			}
		});
	}

	public void scheduleEvent(final Runnable runnable, long delay, TimeUnit unit) {
		gameLogic.schedule(new Runnable() {
			@Override
			public void run() {
				try {
					runnable.run();
				} catch(Exception e) {
				} catch(Throwable t) {
				}
			}
		}, delay, unit);
	}
	

}