@Override
	public void onEnable() {
		/* Load our Configuration File */
		loadConfig() ;

		/* Do the Magic to Enable JMX  */
		enableJMX() ;

		this.serverData = new ServerData(this);
		this.serverPerformanceData = new ServerPerformanceData(this) ;
		this.playerData = new HashMap<String,PlayerData>() ;
		this.blockData = new HashMap<String,BlockData>() ;
		this.npeData = new HashMap<String,NpeData>();

		loadState() ;

		ObjectName name;
		try {
			String serverName = Bukkit.getServer().getName();
			name = new ObjectName("org.dkhenry.minejmx:type=ServerData,name="+serverName);
			if (mbs.isRegistered(name) ) {
				mbs.unregisterMBean(name) ;
			}
			mbs.registerMBean(serverData, name) ;

			name = new ObjectName("org.dkhenry.minejmx:type=ServerPerformanceData,name="+serverName) ;
			if (mbs.isRegistered(name) ) {
				mbs.unregisterMBean(name) ;
			}
			mbs.registerMBean(serverPerformanceData, name) ;
		} catch (MalformedObjectNameException e1) {
			//e1.printStackTrace();
		} catch (NullPointerException e1) {
			//e1.printStackTrace();
		} catch (InstanceAlreadyExistsException e) {
			//e.printStackTrace();
		} catch (MBeanRegistrationException e) {
			//e.printStackTrace();
		} catch (NotCompliantMBeanException e) {
			//e.printStackTrace();
		} catch (InstanceNotFoundException e) {
			//e.printStackTrace();
		}

		/* Register the Listeners */
		PluginManager pm = this.getServer().getPluginManager() ;
		// The Block Events		
		pm.registerEvents(blockListener, this) ; 		

		// Player Events
		pm.registerEvents(playerListener, this) ; 				

		// Entity Events
		pm.registerEvents(entityListener, this) ;
		
		// Server Events
		this.tickPoller = new ServerTickPoller(this) ;
		this.tickPoller.setInterval(40) ;
		this.tickPoller.registerWithScheduler(getServer().getScheduler()) ;

		log.info("The MineJMX Plugin has been enabled.") ;
	}