Esempio n. 1
0
  public static boolean run(CommandSender sender, String[] args, Warner warner) {

    SLAPI slapi = warner.getSLAPI();

    PermissionUser user = PermissionsEx.getUser(args[0]);
    String target;
    Player targetOnline = (Bukkit.getServer().getPlayer(args[0]));
    if (targetOnline == null) {
      OfflinePlayer targetOffline = (Bukkit.getServer().getOfflinePlayer(args[0]));
      target = targetOffline.getName();
    } else {
      String targetOnlineStr = (Bukkit.getServer().getPlayer(args[0]).getName());
      target = targetOnlineStr;
    }
    YamlConfiguration config = warner.getConfig();

    if (!sender.hasPermission("warner.warn.give")) {
      sender.sendMessage(ChatColor.DARK_RED + "You have insufficient permissions to do this.");
      return false;
    }

    if (target != null) {
      if (user.has("warner.admin.warn.exempt")) {
        sender.sendMessage(ChatColor.RED + "You can't warn this person!");
        return false;
      }
      if (args.length > 1) {
        reason = createString(args, 1);
      }
    } else {
      sender.sendMessage(ChatColor.RED + args[0] + " was not found!");
      return false;
    }

    // Load existing warnings of player
    warnings_player = slapi.loadPlayerWarnings(target, sender);
    if (warnings_player != null) {
      Long time_difference = 20L;
      if (warnings_player.size() > 0) {
        time_difference =
            (System.currentTimeMillis()
                    - Long.parseLong(warnings_player.get(warnings_player.size() - 1)[3]))
                / 1000;
      }
      if (time_difference >= 20) {
        String[] warning = {
          sender.getName(), reason, getTimeNow(), System.currentTimeMillis() + ""
        };
        warnings_player.add(warning);
      } else {
        sender.sendMessage(
            ChatColor.RED
                + "You have to wait "
                + ChatColor.GOLD
                + (20 - time_difference)
                + ChatColor.RED
                + " seconds until you can warn "
                + ChatColor.GOLD
                + target
                + ChatColor.RED
                + " again.");
        return false;
      }

      // save warnings to file
      if (!slapi.savePlayerWarnings(warnings_player, target)) {
        sender.sendMessage(ChatColor.RED + "Error writing Playerfile!");
        return false;
      }

    } else {
      sender.sendMessage(ChatColor.RED + "Error reading Playerfile!");
      return false;
    }
    if (targetOnline != null) {
      targetOnline.sendMessage(
          ChatColor.GOLD
              + sender.getName()
              + ChatColor.BLUE
              + " has warned you for:\n"
              + ChatColor.GOLD
              + reason
              + ChatColor.BLUE
              + "."
              + ChatColor.GOLD
              + " ["
              + warnings_player.size()
              + "]");
    }

    Player[] playerList = Bukkit.getServer().getOnlinePlayers();
    for (Player player : playerList) {
      if (player.hasPermission("warner.other.notify")) {
        player.sendMessage(
            ChatColor.GOLD
                + target
                + ChatColor.BLUE
                + " has been warned by "
                + ChatColor.GOLD
                + sender.getName()
                + ChatColor.BLUE
                + " for:\n"
                + ChatColor.GOLD
                + reason
                + ChatColor.BLUE
                + "."
                + ChatColor.GOLD
                + " ["
                + warnings_player.size()
                + "]");
      }
    }

    Punisher.punish(target, warnings_player.size(), reason, sender, config);

    return true;
  }