@Override
    public void onEnable() {
        if (!this.gitVersion.contains("GITREVISION") || !this.buildVersion.contains("BUILDVERSION")) {
            this.logger.log("Initializing v" + this.getServer().getVersion() + " git-" + this.gitVersion + " b" + this.buildVersion + "bamboo");
        } else {
            this.logger.log("Initializing v" + this.getServer().getVersion());
        }

		this.pluginManager = this.getServer().getPluginManager();
        this.craftServer = (CraftServer) this.getServer();

        if(!this.onlineCheck()){
            return;
        }

        final Plugin noCheatPlug = this.pluginManager.getPlugin("NoCheat");
        if (noCheatPlug == null) {
            this.logger.log(MCACLogger.logState.FATAL, "NoCheat could not be found!");
            return;
        }
        this.noCheat = (NoCheat) noCheatPlug;

        this.pluginManager.registerEvent(Type.PLAYER_PRELOGIN, new PlayerListener () {
            @Override
            public void onPlayerPreLogin(PlayerPreLoginEvent event) {
                if(!Main.this.onlineCheck()){
                    return;
                }
                final String playerName = event.getName();
                final JSONHandler webHandle = new JSONHandler( Main.this );
                final HashMap<String, String> url_items = new HashMap<String, String>();
                url_items.put("player", playerName);
                url_items.put("playerip", event.getAddress().getHostAddress());
                url_items.put("exec", "playerConnect");
                final HashMap<String, String> serverData = webHandle.mainRequest(url_items);
                try {
                    if (serverData.containsKey("isBanned")) {
                        if (serverData.get("isBanned").equals("true")) {
                            event.disallow(Result.KICK_BANNED, "[MCAC] Your account has been banned due to a cheating infraction.");
                            return;
                        }
                    } else {
                        Main.this.hasErrored(serverData);
                    }
                } catch (final NullPointerException e) {
                    Main.this.logger.log(MCACLogger.logState.WARNING, "Unable to connect to the MCAC Server!");
                }
                Main.this.activeUsernames.add(playerName);
            }
        }, Priority.Highest, this);

        this.pluginManager.registerEvent(Type.PLAYER_JOIN, new PlayerListener () {
            @Override
            public void onPlayerJoin(PlayerJoinEvent event) {
                event.getPlayer().sendMessage(ChatColor.AQUA + "[MCAC] " + ChatColor.RED + "This server is MCAC protected!");
                // Disclaimer: Upon seeing this message, or this message being sent from the server the user is responsible fully for his/her actions and the resulting MCAC punishment
            }
        }, Priority.Monitor, this);

        this.pluginManager.registerEvent(Type.PLAYER_QUIT, new PlayerListener () {
            @Override
            public void onPlayerQuit(PlayerQuitEvent event) {
                final String playerName = event.getPlayer().getName();
                Main.this.activeUsernames.remove(playerName);
            }
        }, Priority.Monitor, this);
        
        
        //Registering commands!
        this.getCommand("disable").setExecutor(new Disable(this));
        this.getCommand("test").setExecutor(new Test(this));

        
        this.logger.log(MCACLogger.logState.INFO, "Communicating with Master Server");

        this.callback = new Callback(this);

        this.callback.forceRequest();


        this.logger.log(MCACLogger.logState.INFO, "All Systems Operational!");
    }