Interface ApplicableRegionSet

All Superinterfaces:
Iterable<ProtectedRegion>
All Known Implementing Classes:
AbstractRegionSet, FailedLoadRegionSet, PermissiveRegionSet, RegionResultSet

public interface ApplicableRegionSet extends Iterable<ProtectedRegion>
Represents the effective set of flags, owners, and members for a given spatial query.

An instance of this can be created using the spatial query methods available on RegionManager.

  • Method Details

    • isVirtual

      boolean isVirtual()
      Return whether this region set is a virtual set. A virtual set does not contain real results.

      A virtual result may be returned if region data failed to load or there was some special exception (i.e. the region bypass permission).

      Be sure to check the value of this flag if an instance of this interface is being retrieved from RegionQuery as it may return an instance of PermissiveRegionSet or FailedLoadRegionSet, among other possibilities.

      Returns:
      true if loaded
      See Also:
    • testState

      boolean testState(@Nullable RegionAssociable subject, StateFlag... flags)
      Test whether the (effective) value for a list of state flags equals ALLOW.

      subject can be non-null to satisfy region group requirements, otherwise it will be assumed that the caller that is not a member of any regions. (Flags on a region can be changed so that they only apply to certain users.) The subject argument is required if the Flags.BUILD flag is in the list of flags.

      Parameters:
      subject - an optional subject, which would be used to determine the region groups that apply
      flags - a list of flags to check
      Returns:
      true if the result was ALLOW
      See Also:
    • queryState

      @Nullable StateFlag.State queryState(@Nullable RegionAssociable subject, StateFlag... flags)
      Get the (effective) value for a list of state flags. The rules of states is observed here; that is, DENY overrides ALLOW, and ALLOW overrides NONE. One flag may override another.

      subject can be non-null to satisfy region group requirements, otherwise it will be assumed that the caller that is not a member of any regions. (Flags on a region can be changed so that they only apply to certain users.) The subject argument is required if the Flags.BUILD flag is in the list of flags.

      Parameters:
      subject - an optional subject, which would be used to determine the region groups that apply
      flags - a list of flags to check
      Returns:
      a state
    • queryValue

      @Nullable <V> V queryValue(@Nullable RegionAssociable subject, Flag<V> flag)
      Get the effective value for a flag. If there are multiple values (for example, multiple overlapping regions with the same priority may have the same flag set), then the selected (or "winning") value will depend on the flag type.

      Only some flag types actually have a strategy for picking the "best value." For most types, the actual value that is chosen to be returned is undefined (it could be any value). As of writing, the only type of flag that actually has a strategy for picking a value is the StateFlag.

      subject can be non-null to satisfy region group requirements, otherwise it will be assumed that the caller that is not a member of any regions. (Flags on a region can be changed so that they only apply to certain users.) The subject argument is required if the Flags.BUILD flag is the flag being queried.

      Parameters:
      subject - an optional subject, which would be used to determine the region group to apply
      flag - the flag
      Returns:
      a value, which could be null
    • queryMapValue

      @Nullable <V, K> V queryMapValue(@Nullable RegionAssociable subject, MapFlag<K,V> flag, K key)
      Get the effective value for a key in a MapFlag. If there are multiple values (for example, if there are multiple regions with the same priority but with different farewell messages set, there would be multiple completing values), then the selected (or "winning") value will be undefined.

      A subject can be provided that is used to determine whether the value of a flag on a particular region should be used. For example, if a flag's region group is set to RegionGroup.MEMBERS and the given subject is not a member, then the region would be skipped when querying that flag. If null is provided for the subject, then only flags that use RegionGroup.ALL, RegionGroup.NON_MEMBERS, etc. will apply.

      Parameters:
      subject - an optional subject, which would be used to determine the region group to apply
      flag - the flag of type MapFlag
      key - the key for the map flag
      Returns:
      a value, which could be null
    • queryMapValue

      @Nullable <V, K> V queryMapValue(@Nullable RegionAssociable subject, MapFlag<K,V> flag, K key, @Nullable Flag<V> fallback)
      Get the effective value for a key in a MapFlag. If there are multiple values (for example, if there are multiple regions with the same priority but with different farewell messages set, there would be multiple completing values), then the selected (or "winning") value will be undefined.

      A subject can be provided that is used to determine whether the value of a flag on a particular region should be used. For example, if a flag's region group is set to RegionGroup.MEMBERS and the given subject is not a member, then the region would be skipped when querying that flag. If null is provided for the subject, then only flags that use RegionGroup.ALL, RegionGroup.NON_MEMBERS, etc. will apply.

      Parameters:
      subject - an optional subject, which would be used to determine the region group to apply
      flag - the flag of type MapFlag
      key - the key for the map flag
      Returns:
      a value, which could be null
    • queryAllValues

      <V> Collection<V> queryAllValues(@Nullable RegionAssociable subject, Flag<V> flag)
      Get the effective values for a flag, returning a collection of all values. It is up to the caller to determine which value, if any, from the collection will be used.

      subject can be non-null to satisfy region group requirements, otherwise it will be assumed that the caller that is not a member of any regions. (Flags on a region can be changed so that they only apply to certain users.) The subject argument is required if the Flags.BUILD flag is the flag being queried.

      Parameters:
      subject - an optional subject, which would be used to determine the region group to apply
      flag - the flag
      Returns:
      a collection of values
    • isOwnerOfAll

      boolean isOwnerOfAll(LocalPlayer player)
      Test whether a player is an owner of all regions in this set.
      Parameters:
      player - the player
      Returns:
      whether the player is an owner of all regions
    • isMemberOfAll

      boolean isMemberOfAll(LocalPlayer player)
      Test whether a player is an owner or member of all regions in this set.
      Parameters:
      player - the player
      Returns:
      whether the player is a member of all regions
    • size

      int size()
      Get the number of regions that are included.
      Returns:
      the number of contained regions
    • getRegions

      Set<ProtectedRegion> getRegions()
      Get an immutable set of regions that are included in this set.
      Returns:
      a set of regions