public void log(String info) {
   plugin.getLogger().info("<VoteRewards> " + info);
 }
  public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    if (args.length == 0 || !(sender instanceof Player)) {
      msg(sender, head);
      msg(sender, "  &lGO TO &b&ohttp://www.diamonddominion.net/vote");
      msg(sender, "  &a&lVOTE FOR US! -=- YOU WILL GET PRIZES");
      msg(sender, "&2|&b/vote redeem&6 to exchange votes prizes.");
      msg(sender, "&2|&b/vote stats&6 to see what you currently have.");
      msg(sender, head);
      //			msg(sender, "Visit the website to use up donation credits you earn.");
      //			msg(sender, "Voting helps our server gain popularity on server listing sites.");
      return true;
    } else {
      Player player = (Player) sender;
      String arg = args[0];
      if (arg.equalsIgnoreCase("redeem")) {
        if (args.length < 3) {
          msg(player, head);
          msg(
              player,
              "You have &b"
                  + VoteSQL.getVotesNotRewarded(player.getName())
                  + "&6 votes to buy prizes.");
          msg(player, "Type &b/vote redeem <prize id> <prize amount>");
          msg(player, "| &2PrizeID&6 | &2VoteCost&6 | -- &2Prize Name &6--");
          for (int x = 1; x <= VotePrize.prizeAmount; x++) {
            msg(
                player,
                "&6 -- &b"
                    + x
                    + " &6-- | -- &b"
                    + VotePrize.getCost(x)
                    + "&6 --- | &a"
                    + VotePrize.getDescription(x));
          }
          msg(player, head);
          return true;
        } else {
          String strid = args[1];
          int id;
          try {
            id = Integer.parseInt(strid);
          } catch (Exception e) {
            msg(player, "&4Error: &cPrize ID is incorrect.");
            msg(player, "Type &b/vote redeem <prize id> <prize amount>");
            return true;
          }
          if (!VotePrize.isValid(id)) {
            msg(player, "&4Error: &cThere is no such prize id.");
            msg(player, "Type &b/vote redeem <prize id> <prize amount>");
            return true;
          }
          String strvotes = args[2];
          int votesNum;
          try {
            votesNum = Integer.parseInt(strvotes);
          } catch (Exception e) {
            msg(player, "&4Error: &cVote number is incorrect.");
            msg(player, "Type &b/vote redeem <prize id> <prize amount>");
            return true;
          }
          redeem(player, id, votesNum);
          return true;
        }
      } else if (arg.equalsIgnoreCase("stats")) {
        msg(player, head);
        msg(player, "&5Your stats:");
        msg(player, "Unredeemed votes: &a" + VoteSQL.getVotesNotRewarded(player.getName()));
        msg(player, "Donation credits: &a" + DonationCredit.getCredits(player.getName()));
        msg(player, "Total votes ever: &a" + VoteSQL.getAllPlayerVotes(player.getName()));
        msg(player, "Votes in last 24 hours: &a" + VoteSQL.getVotesLast24(player.getName()));
        msg(player, head);
        return true;
      } else if (arg.equalsIgnoreCase("complete")) {
        if (!redeemQueue.containsKey(player.getName())) {
          msg(player, "&4Error: &cYou do not have a pending prize request.");
          msg(player, "Type &b/vote redeem <prize id> <prize amount>");
          return true;
        }
        int id = Integer.parseInt(redeemQueue.get(player.getName()).split(";")[0]);
        int amount = Integer.parseInt(redeemQueue.get(player.getName()).split(";")[1]);
        redeemQueue.remove(player.getName());
        ArrayList<Vote> votes = VoteSQL.filterVotes(player.getName(), 0, null, true, false);
        int cost = VotePrize.getCost(id) * amount;
        int has = votes.size();
        if (cost > has) {
          msg(
              player,
              "&4Error: &cYou can't redeem a prize that costs "
                  + cost
                  + " votes, but only have "
                  + has
                  + " votes to spend.");
          return true;
        }
        if (id == 4 || id == 5) {
          msg(player, "&4Error: &cPrizes 4-5 have not been set up yet.");
          return true;
        }
        String name = VotePrize.getName(id).toLowerCase();
        if (name.equals("fly")) {
          if (player.hasPermission("fly.fly")) {
            msg(
                player,
                "&4Error: &cYou already have Premium! You don't need to pay votes for Fly Mode");
            return true;
          }
          if (!plugin.detectedServer().equals("survival")) {
            msg(player, "&4Error: &cFly Mode is only available on the Survival server");
            return true;
          }
        }
        if (name.equals("god")) {
          if (player.hasPermission("fairgod.fair")) {
            msg(
                player,
                "&4Error: &cYou already have Premium! You don't need to pay votes for God Mode");
            return true;
          }
          if (!plugin.detectedServer().equals("survival")) {
            msg(player, "&4Error: &cGod Mode is only available on the Survival server");
            return true;
          }
        }
        if (name.equals("creative")) {
          if (player.hasPermission("customplugin.creative")) {
            msg(
                player,
                "&4Error: &cYou already have DemiGod! You don't need to pay votes for Creative");
            return true;
          }
          if (!plugin.detectedServer().equals("survival")) {
            msg(player, "&4Error: &cCreative Mode is only available on the Survival server");
            return true;
          }
          int a = 0;
          for (ItemStack i : player.getInventory()) {
            if (i != null) a++;
          }
          boolean helm = (player.getInventory().getHelmet() != null);
          boolean ches = (player.getInventory().getChestplate() != null);
          boolean legg = (player.getInventory().getLeggings() != null);
          boolean boot = (player.getInventory().getBoots() != null);
          if (a > 0 || helm || ches || legg || boot) {
            msg(
                player,
                "&4Error: &cYou must clear your inventory completely to switch to creative mode.");
            return true;
          }
        }

        // ---- ----  REWARD SCRIPT  ---- ----

        // Pay Cost
        int voteCounter = 1;
        for (Vote vote : votes) {
          if (voteCounter <= cost) {
            vote.rewardVote(id);
          } else {
            break;
          }
          voteCounter++;
        }

        // Add to DB the reward
        int mins = VotePrize.getExtraVar(id) * amount;
        int expiretime = (int) (System.currentTimeMillis() / 1000) + (60 * mins);

        try {
          Statement st = (Statement) SQL.getConnection().createStatement();
          ResultSet result =
              st.executeQuery(
                  "SELECT * FROM `dd-voterewards` WHERE `player` = '"
                      + player.getName()
                      + "' && `expiretime` > '"
                      + System.currentTimeMillis() / 1000
                      + "';");

          while (result.next()) {
            int qid = result.getInt("prizeid");
            int qexpire = result.getInt("expiretime");
            if (qid == id) {
              expiretime = qexpire + (60 * mins);
            }
          }
        } catch (Exception e) {
          e.printStackTrace();
        }

        SQL.singleQuery(
            "INSERT INTO `dd-voterewards`(`player`, `prizeid`, `expiretime`) VALUES ('"
                + player.getName()
                + "' , '"
                + id
                + "', '"
                + expiretime
                + "')");

        msg(player, head);

        if (id <= 5) {
          Map<Integer, Integer> data = new HashMap<Integer, Integer>();
          if (rewardCache.containsKey(player)) {
            data = rewardCache.get(player);
          }
          data.put(id, expiretime);
          rewardCache.put(player.getName(), data);
        }

        if (name.equals("healing")) {
          double health = player.getHealth();
          health += VotePrize.getExtraVar(id);
          if (health > 20) health = 20;
          player.setFoodLevel((int) health);
          msg(player, "You have been healed.");
        }
        if (name.equals("food")) {
          int foodLevel = player.getFoodLevel();
          foodLevel += VotePrize.getExtraVar(id);
          if (foodLevel > 20) foodLevel = 20;
          player.setFoodLevel(foodLevel);
          msg(player, "You have been fed.");
        }
        if (name.equals("xp")) {
          player.giveExp(VotePrize.getExtraVar(id));
          msg(player, "You have been given &b" + VotePrize.getExtraVar(id) + "&6 XP.");
        }
        if (name.equals("fly")) {
          player.setAllowFlight(true);
          player.setFlying(true);
          msg(player, "You are now flying.");
        }
        if (name.equals("god")) {
          if (!plugin.fairGod.isGod(player)) {
            plugin.fairGod.toggleGod(player, true);
            msg(player, "You now have God mode.");
          }
        }
        if (name.equals("creative")) {
          player.setGameMode(GameMode.CREATIVE);
          msg(player, "You are now in creative.");
        }

        // ---- ----  END REWARD SCRIPT  ---- ----
        msg(
            player,
            "You now have &b"
                + VoteSQL.getVotesNotRewarded(player.getName())
                + "&6 votes to spend.");
        msg(player, head);
        return true;
      } else {
        msg(player, "Command not found");
        return true;
      }
    }
  }
  @SuppressWarnings("deprecation")
  public void updatePlayerRewardStatus(Map<String, Map<Integer, Integer>> tempSet) {
    Map<String, Integer> tempData = generateData(tempSet);
    Map<String, Integer> prevData = generateData(rewardCache);
    int now = (int) (System.currentTimeMillis() / 1000);
    String server = plugin.detectedServer();

    for (String data : tempData.keySet()) {
      Player player = Bukkit.getPlayer(data.split(";")[0]);
      int prizeId = Integer.parseInt(data.split(";")[1]);
      String name = VotePrize.getName(prizeId).toLowerCase();

      if (player != null) {
        if (server.equals("survival")) {
          if (name.equals("fly")) {
            player.setAllowFlight(true);
          }
          if (name.equals("god")) {
            if (!plugin.fairGod.isGod(player)) {
              plugin.fairGod.toggleGod(player, true);
            }
          }
          if (name.equals("creative")) {
            player.setGameMode(GameMode.CREATIVE);
          }

          int prizeTime = tempData.get(data) - now;
          //					if (prizeTime <= 10) {
          //						msg(player, "You have 10 secs remaining for: " + VotePrize.getName(prizeId));
          //					} else if (prizeTime <= 60) {
          //						msg(player, "You have 1 min remaining for: " + VotePrize.getName(prizeId));
          //					} else if (prizeTime <= 120) {
          //						msg(player, "You have 2 mins remaining for: " + VotePrize.getName(prizeId));
          //					} else if (prizeTime <= 300) {
          //						msg(player, "You have 5 mins remaining for: " + VotePrize.getName(prizeId));
          //					}
          if (prizeTime >= 60)
            msg(
                player,
                "You have &e"
                    + (int) prizeTime / 60
                    + "&6 mins remaining for: &a"
                    + VotePrize.getName(prizeId));
          if (prizeTime < 60)
            msg(
                player,
                "You have &e"
                    + ((int) prizeTime / 5) * 5
                    + "&6 secs remaining for: &a"
                    + VotePrize.getName(prizeId));
          // Set player to be doing what their reward requests
          // Send reminders of when their reward will run out

        }
      } else {
        msg(
            player,
            "Go back to SV! Vote prize time is running out! (And you can't use those prizes in this world)");
      }
    }

    for (String data : prevData.keySet()) {
      if (!tempData.containsKey(data)) {
        Player player = Bukkit.getPlayer(data.split(";")[0]);
        int prizeId = Integer.parseInt(data.split(";")[1]);
        String name = VotePrize.getName(prizeId).toLowerCase();
        msg(player, "Your prize: &a" + VotePrize.getName(prizeId) + " &6has expired.");
        if (name.equals("fly")) {
          player.setFlying(false);
          player.setAllowFlight(false);
        }
        if (name.equals("god")) {
          if (!plugin.fairGod.isGod(player)) plugin.fairGod.toggleGod(player, true);
        }
        if (name.equals("creative")) {
          player.getInventory().clear();
          player.getInventory().setHelmet(new ItemStack(0));
          player.getInventory().setChestplate(new ItemStack(0));
          player.getInventory().setLeggings(new ItemStack(0));
          player.getInventory().setBoots(new ItemStack(0));
          player.setGameMode(GameMode.SURVIVAL);
        }
        // If players not in tempData, set expired & msg
      }
    }
  }