

Simple Tidy and Unique Ward to protect your base efficiently on your server
It adds a clone of vanilla ward but with more server-side features such as diverse protections, permission control, guild integration, ward count limits, and compatibility handling for common utility mods.

Registration is same with vanilla ward.
There is blacklist config to block certain items inside ward area.

Ward Settings UI
Ward area cannot be overlapped unless there is guild or one player built all the wards.
Good old auto closing door inside ward area
Inside a foreign enabled Ward, unauthorized players are blocked from:
TargetPortal map teleport and portal toggle mode on protected portalsTreeBase)If installed, STUWard adds extra integration or blocking for:
Guilds (guild-based trust and overlap behavior)Following mod's feature would be blocked on other's wards
TargetPortalAzuCraftyBoxeskg_TameableCollectorPortablePalsWard with the hammer and place it.8m.Alt+E to open Ward Settings.EWhile placing a ward, the placement preview shows the current maximum configurable radius.
A player is treated as trusted inside a ward if they are:
Guild is required)Registered playersNotes:
3 wards. (Set to -1 for unlimited)BepInEx/config/STUWard.WardNumberOverride.ymlMax Wards Per Steam ID.stuw_wardreport generates BepInEx/config/STUWard.WardCountReport.ymlSTUWard.yml in the config folder[1 - General]
## If on, the configuration is locked and can be changed by server admins only. Synced with server.
# Setting type: Toggle
# Default value: On
# Acceptable values: Off, On
Lock Configuration = On
## Maximum number of managed Wards allowed per Steam/platform account. Set to -1 for unlimited. Synced with server.
# Setting type: Int32
# Default value: 3
Max Wards Per Steam ID = 3
## Maximum configurable Ward radius. Valid range: 8 to 64. Synced with server.
# Setting type: Single
# Default value: 32
Max Ward Radius = 32
## Pickup rule inside a foreign enabled ward. BlockAllExceptWhitelist blocks every item pickup except pickup_whitelist. AllowAllExceptBlacklist allows item pickup except pickup_blacklist. Synced with server.
# Setting type: PickupBlockRule
# Default value: BlockAllExceptWhitelist
# Acceptable values: BlockAllExceptWhitelist, AllowAllExceptBlacklist
Pickup Block Mode = AllowAllExceptBlacklist
## If on, building pieces inside an enabled ward ignore damage from MonsterAI-controlled attackers while no trusted player is nearby. Synced with server.
# Setting type: Toggle
# Default value: On
# Acceptable values: Off, On
Protect Unattended Ward Structures From Hostile Creatures = On
## Additional distance beyond the ward radius used when checking for nearby trusted players before hostile-creature structure protection turns off. Synced with server.
# Setting type: Single
# Default value: 16
Unattended Ward Trusted Player Range Buffer = 16
## How long a ward keeps counting as attended after the last nearby trusted player leaves. Synced with server.
# Setting type: Single
# Default value: 10
Unattended Ward Trusted Presence Grace Seconds = 10
## How often nearby trusted-player attendance is recalculated for unattended hostile-creature structure protection. Synced with server.
# Setting type: Single
# Default value: 0.5
Unattended Ward Presence Refresh Interval = 0.5
## If on, the vanilla guard_stone build recipe is removed from the Hammer piece table while STUWard remains available. Synced with server.
# Setting type: Toggle
# Default value: On
# Acceptable values: Off, On
Disable Vanilla Guard Stone Recipe = On
## STUWard recipe override. Format: ItemPrefab:Amount[:Recover], ... Synced with server.
# Setting type: String
# Default value: GreydwarfEye:1,BoneFragments:3,Flint:5,Wood:7
STUWard Recipe = GreydwarfEye:1,BoneFragments:3,Flint:5,Wood:7
[2 - Client]
## Shortcut used to open the ward settings UI while looking at your ward. Example values: LeftAlt + E, F7 Not synced with server.
# Setting type: KeyboardShortcut
# Default value: E + LeftAlt
Ward Settings Shortcut = E + LeftAlt
[3 - Debug]
## Local-only diagnostic logging for ward ownership/toggle flows. Use Failures for rejection paths only, or Verbose for request and state tracing. Enable separately on each client/server instance you want logs from. Not synced with server.
# Setting type: DiagnosticLogMode
# Default value: Off
# Acceptable values: Off, Failures, Verbose
Ward Diagnostic Logging = Off
| Role | Meaning |
|---|---|
Owner |
The direct creator of the ward. This is checked by creator playerId, not by account id. |
Registered |
A player listed in the ward's permitted player list. |
Guild Member |
A player whose guild id matches the ward guild id. |
Admin+Debug |
A server admin or host with effective debug-control approval. This is the true global override role for managed wards. |
Outsider |
Not owner, not permitted, not same guild, and not admin+debug. |
| Mark | Meaning |
|---|---|
O |
Allowed |
X |
Blocked |
△ |
Conditional |
* |
Special case; see notes |
| Action | Owner | Registered | Guild Member | Admin+Debug | Outsider |
|---|---|---|---|---|---|
| Pass managed ward access checks | O | O | O | O | X |
| Interact with an enabled ward without being blocked | O | O | O | O | X |
| Open ward settings UI | O | X | X | O | X |
| Change ward settings | O | X | X | O | X |
| Toggle ward enabled state | O | X | X | O | X |
| Remove another permitted player | O | X | X | O | X |
| Add or remove self from permitted list by interacting with the ward | X | △ | △ | X | △ |
| Place normal build pieces inside ward coverage | O | O | O | O | X |
| Remove normal build pieces inside ward coverage | O | O | O | O | X |
| Repair normal build pieces inside ward coverage | O | O | O | O | X |
| Perform terrain modification inside ward coverage | O | O | O | O | X |
| Damage the managed ward itself | O | X | X | O | X |
| Remove or destroy the managed ward itself | O | X | X | O | X |
| Damage ordinary protected structures inside an enabled ward | * | * | * | * | * |
| Manual item pickup inside a foreign enabled ward | O | O | O | O | △ |
| Auto pickup inside a foreign enabled ward | O | O | O | O | △ |
| Place a new managed ward at an accessible location | O | O | O | O | X |
| Place a managed ward adjacent to another ward in the same trusted group | O | △ | △ | O | X |
| Be checked against the per-account ward limit | O | O | O | O | X |
| Be blocked by foreign managed ward overlap rules | O | O | O | O | X |
| See all managed ward minimap pins | X | X | X | O | X |
△ And *Add or remove self from permitted list by interacting with the ward is △ because:
disabledThis means:
Registered: can remove self while the ward is disabledGuild Member: can use the same self-toggle path while the ward is disabledOutsider: can self-register while the ward is disabledManual and auto pickup are △ for Outsider because pickup is also gated by:
Pickup Block ModeSo outsider pickup is not simply always blocked or always allowed.
Place a managed ward adjacent to another ward in the same trusted group is △ for Registered and Guild Member because the overlap exemption depends on trusted-group logic, not just basic access.
In practice, the exemption is based on:
The permitted list by itself is not the same as trusted-group overlap exemption.
Damage ordinary protected structures inside an enabled ward is * because this path is not governed only by the simple access matrix.
There is an additional building-damage protection path for:
Treat this as a separate damage system, not as a direct mirror of ordinary access/build permissions.
Admin+Debug is the effective global override role for managed wards.WardGuiController.TryOpenHoveredWardUi() checks WardAccess.CanConfigureWard(...).Owner passes because direct owner control is allowed.CanControlWard(...).Result:
Owner: succeedsAdmin+Debug: also succeedsE on an enabled foreign wardResult:
Outsider: blockedRegistered and Guild Member: still have access, but not controlE on a disabled foreign wardResult:
Outsider: can self-register or self-unregisterRegistered: can remove selfGuild Member: can also use the same self-toggle pathResult:
Guild Member: allowedCanControlManagedWard(...) passes because Admin+Debug is treated as a controller.Result:
Admin+Debug: succeeds on any managed wardResult:
Owner: can place adjacent to trusted wardsGuild Member: may place adjacent when the trusted-group exemption appliesOutsider: cannot use this exemption against foreign wardsResult:
Outsider: blocked only for policy-blocked itemsRegistered, Guild Member, Owner, and Admin+Debug: not blocked by the ward access layerResult:
Registered: deniedGuild Member: deniedOwner: allowedAdmin+Debug: allowed