public boolean setGroupFlag(
     Player player, String group, String flag, String flagstate, boolean resadmin) {
   group = group.toLowerCase();
   if (validFlagGroups.containsKey(flag))
     return this.setFlagGroupOnGroup(player, flag, group, flagstate, resadmin);
   FlagState state = FlagPermissions.stringToFlagState(flagstate);
   if (checkCanSetFlag(player, flag, state, false, resadmin)) {
     if (Residence.getPermissionManager().hasGroup(group)) {
       ResidenceFlagChangeEvent fc =
           new ResidenceFlagChangeEvent(
               residence, player, flag, ResidenceFlagChangeEvent.FlagType.GROUP, state, group);
       Residence.getServ().getPluginManager().callEvent(fc);
       if (fc.isCancelled()) return false;
       if (super.setGroupFlag(group, flag, state)) {
         player.sendMessage(
             ChatColor.GREEN
                 + Residence.getLanguage()
                     .getPhrase("FlagSet", flag + "|" + residence.getName() + "|" + flagstate));
         return true;
       }
     } else {
       player.sendMessage(ChatColor.RED + Residence.getLanguage().getPhrase("InvalidGroup"));
       return false;
     }
   }
   return false;
 }
  public static ResidencePermissions load(ClaimedResidence res, Map<String, Object> root)
      throws Exception {
    ResidencePermissions newperms = new ResidencePermissions(res);
    // newperms.owner = (String) root.get("Owner");
    if (root.containsKey("OwnerUUID")) {
      newperms.ownerUUID = UUID.fromString((String) root.get("OwnerUUID")); // get owner UUID
      //			String name = Residence.getPlayerName(newperms.ownerUUID); //try to find the current name
      // of the owner
      newperms.ownerLastKnownName =
          (String) root.get("OwnerLastKnownName"); // otherwise load last known name from file

      if (newperms.ownerLastKnownName.equalsIgnoreCase("Server land")
          || newperms.ownerLastKnownName.equalsIgnoreCase(Residence.getServerLandname())) {
        newperms.ownerUUID = UUID.fromString(Residence.getServerLandUUID()); // UUID for server land
        newperms.ownerLastKnownName = Residence.getServerLandname();
      } else if (newperms
          .ownerUUID
          .toString()
          .equals(Residence.getTempUserUUID())) // check for fake UUID
      {
        UUID realUUID =
            Residence.getPlayerUUID(
                newperms
                    .ownerLastKnownName); // try to find the real UUID of the player if possible now
        if (realUUID != null) newperms.ownerUUID = realUUID;
      }
    } else if (root.containsKey("Owner")) // convert old owner name save format into uuid format
    {
      String owner = (String) root.get("Owner");
      newperms.ownerLastKnownName = owner;
      newperms.ownerUUID = Residence.getPlayerUUID(owner);
      if (newperms.ownerUUID == null)
        newperms.ownerUUID =
            UUID.fromString(
                Residence
                    .getTempUserUUID()); // set fake UUID until we can find real one for last known
                                         // player
    } else {
      newperms.ownerUUID =
          UUID.fromString(
              Residence
                  .getServerLandUUID()); // cant determine owner name or UUID... setting zero UUID
                                         // which is server land
      newperms.ownerLastKnownName = Residence.getServerLandname();
    }
    newperms.world = (String) root.get("World");
    FlagPermissions.load(root, newperms);
    if (newperms.getOwner() == null
        || newperms.world == null
        || newperms.playerFlags == null
        || newperms.groupFlags == null
        || newperms.cuboidFlags == null) throw new Exception("Invalid Residence Permissions...");
    return newperms;
  }
  public boolean setFlag(Player player, String flag, String flagstate, boolean resadmin) {
    if (validFlagGroups.containsKey(flag))
      return this.setFlagGroup(player, flag, flagstate, resadmin);

    FlagState state = FlagPermissions.stringToFlagState(flagstate);

    if (Residence.getConfigManager().isPvPFlagPrevent()) {
      for (String oneFlag : Residence.getConfigManager().getProtectedFlagsList()) {
        if (!flag.equalsIgnoreCase(oneFlag)) continue;

        ArrayList<Player> players = this.residence.getPlayersInResidence();
        if (!resadmin
            && (players.size() > 1
                || players.size() == 1 && !players.get(0).getName().equals(this.getOwner()))) {
          int size = 0;
          for (Player one : players) {
            if (!one.getName().equals(this.getOwner())) size++;
          }
          player.sendMessage(
              ChatColor.RED
                  + Residence.getLanguage().getPhrase("FlagChangeDeny", flag + "|" + size));
          return false;
        }
      }
    }

    if (checkCanSetFlag(player, flag, state, true, resadmin)) {
      ResidenceFlagChangeEvent fc =
          new ResidenceFlagChangeEvent(
              residence, player, flag, ResidenceFlagChangeEvent.FlagType.RESIDENCE, state, null);
      Residence.getServ().getPluginManager().callEvent(fc);
      if (fc.isCancelled()) return false;
      if (super.setFlag(flag, state)) {
        player.sendMessage(
            ChatColor.GREEN
                + Residence.getLanguage()
                    .getPhrase("FlagSet", flag + "|" + residence.getName() + "|" + flagstate));
        return true;
      }
    }
    return false;
  }
 public boolean removeAllGroupFlags(Player player, String group, boolean resadmin) {
   if (this.hasResidencePermission(player, false) || resadmin) {
     ResidenceFlagChangeEvent fc =
         new ResidenceFlagChangeEvent(
             residence,
             player,
             "ALL",
             ResidenceFlagChangeEvent.FlagType.GROUP,
             FlagState.NEITHER,
             null);
     Residence.getServ().getPluginManager().callEvent(fc);
     if (fc.isCancelled()) {
       return false;
     }
     super.removeAllGroupFlags(group);
     player.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("FlagSet"));
     return true;
   }
   return false;
 }
  public boolean setPlayerFlag(
      Player player,
      String targetPlayer,
      String flag,
      String flagstate,
      boolean resadmin,
      boolean Show) {

    if (Residence.getPlayerUUID(targetPlayer) == null) {
      player.sendMessage("no player by this name");
      return false;
    }

    if (validFlagGroups.containsKey(flag))
      return this.setFlagGroupOnPlayer(player, targetPlayer, flag, flagstate, resadmin);
    FlagState state = FlagPermissions.stringToFlagState(flagstate);
    if (checkCanSetFlag(player, flag, state, false, resadmin)) {
      ResidenceFlagChangeEvent fc =
          new ResidenceFlagChangeEvent(
              residence,
              player,
              flag,
              ResidenceFlagChangeEvent.FlagType.PLAYER,
              state,
              targetPlayer);
      Residence.getServ().getPluginManager().callEvent(fc);
      if (fc.isCancelled()) return false;
      if (super.setPlayerFlag(targetPlayer, flag, state)) {
        if (Show)
          player.sendMessage(
              ChatColor.GREEN
                  + Residence.getLanguage()
                      .getPhrase("FlagSet", flag + "|" + residence.getName() + "|" + flagstate));
        return true;
      }
    }
    return false;
  }
Example #6
0
  public final void parsePerms() {
    try {
      FileConfiguration flags =
          YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "flags.yml"));
      FileConfiguration groups =
          YamlConfiguration.loadConfiguration(new File(Residence.dataFolder, "groups.yml"));

      Set<String> keys = flags.getConfigurationSection("Global.Flags").getKeys(false);
      if (keys != null) {
        for (String key : keys) {
          if (key.equalsIgnoreCase("Global")) {
            globaldefaults =
                FlagPermissions.parseFromConfigNode(
                    key, flags.getConfigurationSection("Global.Flags"));
          } else {
            worldperms.put(
                key.toLowerCase(),
                FlagPermissions.parseFromConfigNode(
                    key, flags.getConfigurationSection("Global.Flags")));
          }
        }
      }
      for (Entry<String, FlagPermissions> entry : worldperms.entrySet()) {
        entry.getValue().setParent(globaldefaults);
      }

      if (!groups.isConfigurationSection("Groups")) {
        Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Your groups.yml file is incorrect!");
        return;
      }

      keys = groups.getConfigurationSection("Groups").getKeys(false);
      if (keys != null) {
        for (String key : keys) {
          if (!groups.contains("Groups." + key + ".Flags")) continue;
          if (!groups.contains("Groups." + key + ".Flags.World")) continue;
          if (key == null) continue;
          Set<String> worldkeys =
              groups.getConfigurationSection("Groups." + key + ".Flags.World").getKeys(false);

          if (worldkeys == null) continue;

          Map<String, FlagPermissions> perms = new HashMap<>();
          for (String wkey : worldkeys) {
            FlagPermissions list =
                FlagPermissions.parseFromConfigNode(
                    wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World"));
            if (wkey.equalsIgnoreCase("global")) {
              list.setParent(globaldefaults);
              perms.put(wkey.toLowerCase(), list);
              for (Entry<String, FlagPermissions> worldperm : worldperms.entrySet()) {
                list =
                    FlagPermissions.parseFromConfigNode(
                        wkey, groups.getConfigurationSection("Groups." + key + ".Flags.World"));
                list.setParent(worldperm.getValue());
                perms.put("global." + worldperm.getKey().toLowerCase(), list);
              }
            } else {
              perms.put(wkey.toLowerCase(), list);
            }
          }
          for (Entry<String, FlagPermissions> entry : perms.entrySet()) {
            String wkey = entry.getKey();
            FlagPermissions list = entry.getValue();
            if (!wkey.startsWith("global.")) {
              list.setParent(perms.get("global." + wkey));
              if (list.getParent() == null) {
                list.setParent(worldperms.get(wkey));
              }
              if (list.getParent() == null) {
                list.setParent(globaldefaults);
              }
            }
          }
          groupperms.put(key.toLowerCase(), perms);
        }
      }
    } catch (Exception ex) {
      Logger.getLogger(WorldFlagManager.class.getName()).log(Level.SEVERE, null, ex);
    }
  }