예제 #1
0
  /**
   * getTownName
   *
   * <p>returns the name of the Town this location lies within if no town is registered it returns
   * null
   *
   * @param loc
   * @return name of any town at this location, or null for none.
   */
  public String getTownName(Location loc) {

    try {
      WorldCoord worldCoord =
          new WorldCoord(getDataSource().getWorld(loc.getWorld().getName()), Coord.parseCoord(loc));
      return worldCoord.getTownBlock().getTown().getName();
    } catch (NotRegisteredException e) {
      // No data so return null
      return null;
    }
  }
예제 #2
0
  /**
   * getTownBlock
   *
   * <p>returns TownBlock this location lies within if no block is registered it returns null
   *
   * @param loc
   * @return TownBlock at this location, or null for none.
   */
  public TownBlock getTownBlock(Location loc) {

    TownyMessaging.sendDebugMsg("Fetching TownBlock");

    try {
      WorldCoord worldCoord =
          new WorldCoord(getDataSource().getWorld(loc.getWorld().getName()), Coord.parseCoord(loc));
      return worldCoord.getTownBlock();
    } catch (NotRegisteredException e) {
      // No data so return null
      return null;
    }
  }
예제 #3
0
  public void cacheItemUse(Player player, WorldCoord worldCoord, boolean itemUseRight) {
    PlayerCache cache = TownyUniverse.getPlugin().getCache(player);
    cache.updateCoord(worldCoord);
    cache.setItemUsePermission(itemUseRight);

    TownyMessaging.sendDebugMsg(
        player.getName() + " (" + worldCoord.toString() + ") Cached Item Use: " + itemUseRight);
  }
예제 #4
0
  public void cacheSwitch(Player player, WorldCoord worldCoord, boolean switchRight) {
    PlayerCache cache = TownyUniverse.getPlugin().getCache(player);
    cache.updateCoord(worldCoord);
    cache.setSwitchPermission(switchRight);

    TownyMessaging.sendDebugMsg(
        player.getName() + " (" + worldCoord.toString() + ") Cached Switch: " + switchRight);
  }
예제 #5
0
  public void cacheDestroy(Player player, WorldCoord worldCoord, boolean destroyRight) {
    PlayerCache cache = TownyUniverse.getPlugin().getCache(player);
    cache.updateCoord(worldCoord);
    cache.setDestroyPermission(destroyRight);

    TownyMessaging.sendDebugMsg(
        player.getName() + " (" + worldCoord.toString() + ") Cached Destroy: " + destroyRight);
  }
예제 #6
0
  public void cacheBuild(Player player, WorldCoord worldCoord, boolean buildRight) {
    PlayerCache cache = TownyUniverse.getPlugin().getCache(player);
    cache.updateCoord(worldCoord);
    cache.setBuildPermission(buildRight);

    TownyMessaging.sendDebugMsg(
        player.getName() + " (" + worldCoord.toString() + ") Cached Build: " + buildRight);
  }
예제 #7
0
 public boolean isEnemyTownBlock(Player player, WorldCoord worldCoord) {
   try {
     return isEnemy(
         getDataSource().getResident(player.getName()).getTown(),
         worldCoord.getTownBlock().getTown());
   } catch (NotRegisteredException e) {
     return false;
   }
 }
예제 #8
0
  public TownBlockStatus cacheStatus(
      Player player, WorldCoord worldCoord, TownBlockStatus townBlockStatus) {
    PlayerCache cache = TownyUniverse.getPlugin().getCache(player);
    cache.updateCoord(worldCoord);
    cache.setStatus(townBlockStatus);

    TownyMessaging.sendDebugMsg(
        player.getName() + " (" + worldCoord.toString() + ") Cached Status: " + townBlockStatus);
    return townBlockStatus;
  }
예제 #9
0
  /**
   * isWilderness
   *
   * <p>returns true if this block is in the wilderness
   *
   * @param block
   * @return true is in wilderness
   */
  public boolean isWilderness(Block block) {

    WorldCoord worldCoord;

    try {
      worldCoord =
          new WorldCoord(
              getDataSource().getWorld(block.getWorld().getName()), Coord.parseCoord(block));
    } catch (NotRegisteredException e) {
      // No record so must be Wilderness
      return true;
    }

    try {
      return worldCoord.getTownBlock().getTown() == null;
    } catch (NotRegisteredException e) {
      // Must be wilderness
      return true;
    }
  }
예제 #10
0
  public boolean getPermission(
      Player player,
      TownBlockStatus status,
      WorldCoord pos,
      TownyPermission.ActionType actionType) {
    if (status == TownBlockStatus.OFF_WORLD
        || status == TownBlockStatus.WARZONE
        || status == TownBlockStatus.PLOT_OWNER
        || status
            == TownBlockStatus
                .TOWN_OWNER) // || plugin.isTownyAdmin(player)) // status == TownBlockStatus.ADMIN
                             // ||
    return true;

    if (status == TownBlockStatus.NOT_REGISTERED) {
      cacheBlockErrMsg(player, TownySettings.getLangString("msg_cache_block_error"));
      return false;
    }

    if (status == TownBlockStatus.LOCKED) {
      cacheBlockErrMsg(player, TownySettings.getLangString("msg_cache_block_error_locked"));
      return false;
    }

    TownBlock townBlock;
    // Town town;
    try {
      townBlock = pos.getTownBlock();
      // town = townBlock.getTown();
    } catch (NotRegisteredException e) {

      // Wilderness Permissions
      if (status == TownBlockStatus.UNCLAIMED_ZONE)
        if (TownyUniverse.getPermissionSource()
            .hasPermission(player, PermissionNodes.TOWNY_WILD_ALL.getNode(actionType.toString()))) {
          return true;

        } else if (!TownyPermission.getUnclaimedZonePerm(actionType, pos.getWorld())) {
          // Don't have permission to build/destroy/switch/item_use here
          cacheBlockErrMsg(
              player,
              String.format(
                  TownySettings.getLangString("msg_cache_block_error_wild"),
                  actionType.toString()));
          return false;
        } else return true;
      else {
        TownyMessaging.sendErrorMsg(player, "Error updating destroy permission.");
        return false;
      }
    }

    // Allow admins to have ALL permissions over towns.
    if (TownyUniverse.getPermissionSource().isTownyAdmin(player)) return true;

    // Plot Permissions
    // try {
    //        Resident owner = townBlock.getResident();
    if (townBlock.hasResident()) {
      if (status == TownBlockStatus.PLOT_FRIEND) {
        if (townBlock.getPermissions().getResidentPerm(actionType)) return true;
        else {
          cacheBlockErrMsg(
              player,
              String.format(
                  TownySettings.getLangString("msg_cache_block_error_plot"),
                  "friends",
                  actionType.toString()));
          return false;
        }
      } else if (status == TownBlockStatus.PLOT_ALLY)
        if (townBlock.getPermissions().getAllyPerm(actionType)) return true;
        else {
          cacheBlockErrMsg(
              player,
              String.format(
                  TownySettings.getLangString("msg_cache_block_error_plot"),
                  "allies",
                  actionType.toString()));
          return false;
        }
      else { // TODO: (Remove) if (status == TownBlockStatus.OUTSIDER)

        if (townBlock.getPermissions().getOutsiderPerm(actionType)) {
          // System.out.print("Outsider true");
          return true;
        } else {
          cacheBlockErrMsg(
              player,
              String.format(
                  TownySettings.getLangString("msg_cache_block_error_plot"),
                  "outsiders",
                  actionType.toString()));
          return false;
        }
      }
    }
    // } catch (NotRegisteredException x) {
    // }

    // Town Permissions
    if (status == TownBlockStatus.TOWN_RESIDENT) {
      if (townBlock.getPermissions().getResidentPerm(actionType)) return true;
      else {
        cacheBlockErrMsg(
            player,
            String.format(
                TownySettings.getLangString("msg_cache_block_error_town_resident"),
                actionType.toString()));
        return false;
      }
    } else if (status == TownBlockStatus.TOWN_ALLY)
      if (townBlock.getPermissions().getAllyPerm(actionType)) return true;
      else {
        cacheBlockErrMsg(
            player,
            String.format(
                TownySettings.getLangString("msg_cache_block_error_town_allies"),
                actionType.toString()));
        return false;
      }
    else if (status == TownBlockStatus.OUTSIDER || status == TownBlockStatus.ENEMY)
      if (townBlock.getPermissions().getOutsiderPerm(actionType)) return true;
      else {
        cacheBlockErrMsg(
            player,
            String.format(
                TownySettings.getLangString("msg_cache_block_error_town_outsider"),
                actionType.toString()));
        return false;
      }

    TownyMessaging.sendErrorMsg(player, "Error updating " + actionType.toString() + " permission.");
    return false;
  }
예제 #11
0
  public TownBlockStatus getStatusCache(Player player, WorldCoord worldCoord) {
    // if (isTownyAdmin(player))
    //        return TownBlockStatus.ADMIN;

    if (!worldCoord.getWorld().isUsingTowny()) return TownBlockStatus.OFF_WORLD;

    // TownyUniverse universe = plugin.getTownyUniverse();
    TownBlock townBlock;
    Town town;
    try {
      townBlock = worldCoord.getTownBlock();
      town = townBlock.getTown();

      if (townBlock.isLocked()) {
        // Push the TownBlock location to the queue for a snapshot (if it's not already in the
        // queue).
        if (town.getWorld().isUsingPlotManagementRevert()
            && (TownySettings.getPlotManagementSpeed() > 0)) {
          TownyRegenAPI.addWorldCoord(townBlock.getWorldCoord());
          return TownBlockStatus.LOCKED;
        }
        townBlock.setLocked(false);
      }

    } catch (NotRegisteredException e) {
      // Unclaimed Zone switch rights
      return TownBlockStatus.UNCLAIMED_ZONE;
    }

    Resident resident;
    try {
      resident = TownyUniverse.getDataSource().getResident(player.getName());
    } catch (TownyException e) {
      System.out.print("Failed to fetch resident: " + player.getName());
      return TownBlockStatus.NOT_REGISTERED;
    }

    try {
      // War Time switch rights
      if (isWarTime()) {
        if (TownySettings.isAllowWarBlockGriefing()) {
          try {
            if (!resident.getTown().getNation().isNeutral() && !town.getNation().isNeutral())
              return TownBlockStatus.WARZONE;
          } catch (NotRegisteredException e) {

          }
        }
        // If this town is not in a nation and we are set to non neutral status during war.
        if (!TownySettings.isWarTimeTownsNeutral() && !town.hasNation())
          return TownBlockStatus.WARZONE;
      }

      // Town Owner Override
      try {
        if (townBlock.getTown().isMayor(resident) || townBlock.getTown().hasAssistant(resident))
          return TownBlockStatus.TOWN_OWNER;
      } catch (NotRegisteredException e) {
      }

      // Resident Plot switch rights
      try {
        Resident owner = townBlock.getResident();
        if (resident == owner) return TownBlockStatus.PLOT_OWNER;
        else if (owner.hasFriend(resident)) return TownBlockStatus.PLOT_FRIEND;
        else if (resident.hasTown() && isAlly(owner.getTown(), resident.getTown()))
          return TownBlockStatus.PLOT_ALLY;
        else
          // Exit out and use town permissions
          throw new TownyException();
      } catch (NotRegisteredException x) {
      } catch (TownyException x) {
      }

      // Town resident destroy rights
      if (!resident.hasTown()) throw new TownyException();

      if (resident.getTown() != town) {
        // Allied destroy rights
        if (isAlly(town, resident.getTown())) return TownBlockStatus.TOWN_ALLY;
        else if (isEnemy(resident.getTown(), town)) {
          if (townBlock.isWarZone()) return TownBlockStatus.WARZONE;
          else return TownBlockStatus.ENEMY;
        } else return TownBlockStatus.OUTSIDER;
      } else if (resident.isMayor() || resident.getTown().hasAssistant(resident))
        return TownBlockStatus.TOWN_OWNER;
      else return TownBlockStatus.TOWN_RESIDENT;
    } catch (TownyException e) {
      // Outsider destroy rights
      return TownBlockStatus.OUTSIDER;
    }
  }
예제 #12
0
 public void removeWarZone(WorldCoord worldCoord) {
   worldCoord.getWorld().removeWarZone(worldCoord);
   plugin.updateCache(worldCoord);
 }
예제 #13
0
 public void addWarZone(WorldCoord worldCoord) {
   worldCoord.getWorld().addWarZone(worldCoord);
   plugin.updateCache(worldCoord);
 }