@Override
  public void forceLoad(ICommandSender sender) {
    config.load();

    String cat = "Snooper";

    ModuleSnooper.port = config.get(cat, "port", 25565, "The query port").getInt();
    ModuleSnooper.hostname = config.get(cat, "hostname", "", "The query hostname/IP").value;

    ModuleSnooper.autoReboot =
        config
            .get(
                cat,
                "autoReload",
                true,
                "Automatically reload the query system if a fatal error occurs")
            .getBoolean(true);
    ModuleSnooper.enable =
        config.get(cat, "enable", false, "This one is obvious, don't you think?").getBoolean(false);

    for (Response response : ResponseRegistry.getAllresponses()) {
      String subCat = cat + "." + response.getName();
      response.allowed =
          config
              .get(
                  subCat,
                  "enable",
                  true,
                  "If false, this response won't be allowed on this server.")
              .getBoolean(true);
      response.readConfig(subCat, config);
    }
    ModuleSnooper.startQuery();
  }
  @Override
  public void forceSave() {
    String cat = "Snooper";

    config.get(cat, "port", 25565, "").value = "" + ModuleSnooper.port;
    config.get(cat, "hostname", "", "The query hostname/IP").value = ModuleSnooper.hostname;

    config.get(
                cat,
                "autoReload",
                true,
                "Automatically reload the query system if a fatal error occurs")
            .value =
        "" + ModuleSnooper.autoReboot;
    config.get(cat, "enable", false, "This one is obvious, don't you think?").value =
        "" + ModuleSnooper.enable;

    for (Response response : ResponseRegistry.getAllresponses()) {
      String subCat = cat + "." + response.getName();
      config.get(subCat, "enable", true, "If false, this response won't be allowed on this server.")
              .value =
          "" + response.allowed;
      response.writeConfig(subCat, config);
    }
    config.save();
  }
  /** Parses an incoming DatagramPacket, returning true if the packet was valid */
  private boolean parseIncomingPacket(DatagramPacket par1DatagramPacket) throws IOException {
    byte[] var2 = par1DatagramPacket.getData();
    int var3 = par1DatagramPacket.getLength();
    SocketAddress var4 = par1DatagramPacket.getSocketAddress();
    logDebug("Packet len " + var3 + " [" + var4 + "]");

    if (3 <= var3 && -2 == var2[0] && -3 == var2[1]) {
      logDebug("Packet \'" + RConUtils.getByteAsHexString(var2[2]) + "\' [" + var4 + "]");

      if (var2[2] == 9) {
        sendAuthChallenge(par1DatagramPacket);
        logDebug("Challenge [" + var4 + "]");
        return true;
      } else {
        if (!verifyClientAuth(par1DatagramPacket).booleanValue()) {
          logDebug("Invalid challenge [" + var4 + "]");
          return false;
        } else {
          Response response = ResponseRegistry.getResponse(var2[2]);
          if (response == null) {
            return false;
          }
          byte[] bt =
              response.getResponceByte(
                  getRequestId(par1DatagramPacket.getSocketAddress()), par1DatagramPacket);
          logDebug(new String(bt));
          sendResponsePacket(bt, par1DatagramPacket);
          logDebug("Case " + var2[2] + " [" + var4 + "] ");
          return true;
        }
      }
    } else {
      logDebug("Invalid packet [" + var4 + "]");
      return false;
    }
  }