Priority and Inheritance¶
As noted in the Quick Start, regions can overlap. When there are overlapping regions, a player must have permission to build in all overlapping regions. With priorities and inheritance, however, that rule does not have to be satisfied.
Priorities¶
Every region defaults to a priority of 0, but it can be adjusted to be positive or negative. Higher numbers imply higher priorities. The valid range of priorities is -2147483648 to 2147483647, inclusive, but you will probably use more reasonable numbers like -2, 10, 15, or 100.
- In terms of membership and who can build: When a certain location has overlapping regions, only the regions of the highest priority are considered.
- In terms of region flags, the highest priority region with the flag defined is used.
Priorities can be set with /rg setpriority
:
/rg setpriority example 5
Example: Creating an “pub” region at spawn where only those in the “pub group” can build, even though spawn has already has region where “builders” can build
If you simply make a region overlapping spawn, then a player would have to be both a member of “pub” and “builders” in order to build within the pub. Therefore, you want to make the pub region higher priority.
Select the pub area.
Create the “pub” region:
/rg define pub
Raise the priority of “pub” to some number higher than 0, the priority of the spawn region:
/rg setpriority pub 10
Example: Making a special “heal” area where PvP is denied within an “arena” region where PvP is permitted
The goal here is to override the pvp = allow
flag of the arena.
Select the heal area.
Create the “heal” region:
/rg define heal
Set the
pvp
flag todeny
:/rg flag heal pvp deny
Raise the priority of “heal” to some number higher than 0, the priority of the arena region:
/rg setpriority heal 10
Note: Since deny overrides allow when there is a conflict, you don’t actually need to raise the priority of “heal.” However, you would need to set the priority if you wanted to override deny with allow.
Inheritance¶
Following from the pub example above, what if you want to allow both builders and pub members to build in the pub? You could add the builders group to the pub region, or instead, you could have the pub inherit its members from the spawn region.
When a region is given a parent:
- It inherits the parent’s members and owners
- It inherits the parent’s flags if if the flag isn’t defined on the child region
This comes in handy for:
- A main area and small plots inside this main area
- Creating a template region by which child regions will inherit the flags
Every region can have at most one parent. Set parents with /rg setparent
:
/rg setparent region_name parent_name
To remove a parent, don’t specify a parent name:
/rg setparent region_name
WorldGuard will detect circular inheritance and prevent it.
Example: Creating a “mall” with multiple plots inside of it
Once the mall, plot1, and plot2 regions have been created, parents can be set on the plots:
/rg setparent plot1 mall
/rg setparent plot2 mall
Let’s say you have a “mall_owners” group that you add to the mall region:
/rg addowner mall g:mall_owners
The mall owners will be able to build within the plots.
If you add a member or owner to one of the plots, the player will be able to build only within their plot:
/rg addowner plot1 sk89q
Template Regions¶
As previously mentioned, because flags are inherited from their parents, a parent region can act as a base template for all of its child regions.
However, you may want the template region to not actually physically exist, since you’re not using it to protect an area. One way to do this is to create a “global region,” which is a region that has no actual physical size. Create global regions with the -g
switch on the region creation command:
/rg define -g plot_template
Example: Having the plots extend a “plot_template” region in the mall example
Create the plot template region:
/rg define -g plot_template
Have the plots inherit from the plot template:
/rg setparent plot1 plot_template
/rg setparent plot2 plot_template
Have the plot template inherit from mall:
/rg setparent plot_template mall
Let’s say you want to let players access any chest in the mall, except those in plots. First, you’d use the chest-access
flag on the mall region:
/rg flag mall chest-access allow
However, now you need to deny chest-access
in every plot. Fortunately, you have the plot template that you can use:
/rg flag plot_template chest-access deny
Inheritance versus Priorities¶
A higher priority parent region will override its children, so inheritance only properly works when the children are of the same or higher priority compared to their parent regions.
Region Groups and Overlapping Regions¶
As you may be aware, flags can be made to apply to only certain groups:
/rg flag mall pvp -g nonmembers deny
When there is only one region, it’s clear which players are members and which are not. However, it’s less obvious when there are overlapping regions: does a player only need to be a member of one of the regions?
The answer is no. The player must be a member of the region on which the flag is set.
For example, let’s imagine two overlapping regions:
- Spawn, with flag
pvp -g nonmembers deny
and no members - Market, with member “sk89q”
PvP would be denied for sk89q because sk89q is not a member of spawn.
In the Context of Inheritance¶
When a region has a parent set, both flags and the list of members are inherited, so a player can be a member of one of the child regions too.
For example, if there are two regions:
- Market, with flag
pvp -g nonmembers deny
and no members - Shop1, with member “sk89q,” inheriting from the market
Is sk89q a member? Yes, so sk89q is allowed to PvP.
Note
As mentioned previously, parent regions should not have a higher priority than their children, otherwise this will not work correctly. PvP would be denied for sk89q because the parent region would override the child.