Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
STU Ward
Simple Tidy and Unique Ward to protect your base from other players without pushing them out. Auto closing doors within ward area. Best to use with Guild mod.
| Date uploaded | 2 weeks ago |
| Version | 1.3.4 |
| Download link | sighsorry-STU_Ward-1.3.4.zip |
| Downloads | 76 |
| Dependency string | sighsorry-STU_Ward-1.3.4 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2333ValheimModding-Jotunn
Jötunn (/ˈjɔːtʊn/, 'giant'), the Valheim Library was created with the goal of making the lives of mod developers easier. It enables you to create mods for Valheim using an abstracted API so you can focus on the actual content creation.
Preferred version: 2.29.0README
STU Ward
Simple, Tidy, and Unique Ward for Valheim servers.
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.

Trusted players manage individual ward registration from Ward Settings.
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.
What It Does
- Adds a placeable
Wardwith server-controlled protection rules - Lets trusted players configure ward alerts, ward-range rotation, door auto-close, and protected-action restrictions
- Blocks unauthorized interaction, building, terrain edits, pickup, item use, and damage inside enabled foreign wards
- Prevents foreign ward overlap while allowing same-owner and same-guild ward groups
- Tracks per-account ward limits
- Shows ward pins and active ranges on the map when allowed
How To Use
- Select
Wardwith the hammer and place it. - The server assigns the largest legal radius up to its configured maximum.
- Look at your ward and press
Alt+Eto openWard Settings. - On the first page, manage registered and recent unregistered players.
- Add a character from the server's recent unregistered-player list.
- Open the second page to configure ward alerts, ward-range rotation, door auto-close, and protected actions.
Protection
Inside an enabled ward, unauthorized players are blocked from:
- Opening or using containers, doors, carts, ships, signs, item stands, beehives, crafting stations, fermenters, sap collectors, traps, portals, and tamed creatures
- Building, repairing, removing pieces, or modifying terrain
- Damaging protected structures and objects
- Picking up items, including auto-pickup when the item policy blocks it
- Using or equipping blocked item prefabs
- Using creature-catching items on protected tamed animals
Building pieces inside an enabled STU Ward receive extra damage protection. Player and tamed-creature damage to protected building pieces is blocked, and hostile creature damage can also be blocked depending on ward attendance settings.
Permissions
STU Ward uses one trusted-player permission level for existing wards. Trust is granted to:
- The ward owner
- Individually registered players
- Players matching the ward's stored guild identity
- Server admins using effective debug control
All trusted players can use the protected area, open and change ward settings, toggle the ward, add or remove players from its individual registration list, and dismantle the ward. Authorized changes apply immediately without confirmation popups.
The owner identity is still retained for ward limits, reporting, and guild metadata; it does not grant a higher permission tier on an existing ward.
Registration
Individual registration is managed by trusted players in Ward Settings:
- The server keeps a separate recent-player history for each world.
- The list includes authenticated characters currently online or seen within the last twenty-eight days, with online characters first and older activity lower in the list.
- Registered and recent-player rows show the character name, resolved guild, public platform account ID, and online/last-seen status. Registered characters without retained activity show that their last-seen time is unavailable.
- Trusted players can add a recent character to the ward or remove an individually registered character.
- Registration is character-specific because ward permissions use Valheim player IDs.
- Disabled wards do not allow outsiders to register themselves.
Recent-player history begins when STUWard 1.3.0 is installed. Earlier visits are not imported, and extending retention from fourteen to twenty-eight days does not restore records that were already pruned. Those characters must reconnect before appearing again.
Ward Overlap
Ward overlap is strict.
- Foreign wards cannot overlap.
- Same-owner wards can overlap.
- Wards with the same stored guild identity can overlap.
- Registered-player access does not bypass overlap rules.
When placing a new ward, older foreign wards keep their radius and the new ward automatically yields to the largest non-overlapping radius. The assigned radius is stored once; removing a neighboring ward or increasing the server maximum does not silently expand it later. Lowering the server maximum clamps existing wards.
In overlapping coverage, access is additive: if any enabled foreign ward denies the player, the action is denied.
Ward Settings
Each ward can store its own behavior:
- Ward alert sound
- Ward alert visual effect
- Ward range rotation (enabled by default at 50% of the native rotation speed; stationary when disabled)
- Door auto-close
- Protected-action restrictions
When auto-close is enabled, doors opened inside the active ward area close after a shared minimum delay of 5 seconds. If a slow-opening door is still animating at that point, STUWard waits up to 60 seconds and closes it as soon as the door becomes interactable.
Ward rings are visible for placement previews and enabled wards. Disabled wards remain hidden unless a placement conflict highlights the closest blocking ward ring for 1.5 seconds on the client that attempted placement. Crossing an enabled ward boundary locally raises that ward ring from its minimum brightness to full brightness for 0.5 seconds, and it remains at full brightness while the player stays within 0.75m of the boundary. The client-only Ward Boundary Brighten Mode selects trusted wards, untrusted wards, all wards (the default), or disables this boundary cue.
The first settings page is dedicated to player management, with separate scrolling lists for registered and recent unregistered players. Each list has its own local search field for character name, guild, account ID, or character player ID. The second page contains a two-column behavior grid and an independently scrolling restrictions grid.
Item Policy
Servers can define blocked item prefabs and pickup rules.
Blocked item prefabs cannot be used, equipped, or used to attack while the player is inside a foreign enabled ward. Pickup rules can either block everything except a whitelist or allow everything except a blacklist.
Map Pins
Ward pins can show ward locations and active ranges on the map.
Players normally see wards they are allowed to see. Admin debug control can show all managed wards.
Important Details
- Ownership metadata is based on the ward creator player id.
- Account identity is used for limits and reporting, not as a separate permission tier.
- A ward's guild identity is stored on the ward and refreshed from authoritative Guilds data when membership changes can be resolved.
- If Guilds data is temporarily unavailable, the last resolved ward and registered-player guild metadata is retained instead of being erased.
- Servers and clients must run the same STUWard version.
Github
CHANGELOG
Changelog
1.3.9
- Grouped
STUWard.yml,STUWard.RecentPlayers.yml, and the generatedSTUWard.WardCountReport.ymlunderBepInEx/config/STUWard, and removed the Ward Settings folder button now that the files use a conventional config path. - There is no automatic migration or legacy-path fallback. Before first startup with this update, stop the game or server, create
BepInEx/config/STUWard, and move the existingBepInEx/config/STUWard.ymlandBepInEx/config/STUWard.RecentPlayers.ymlfiles into it. Files left in the config root are ignored; without a manual move, STUWard creates the default policy and starts with an empty recent-player history. The generated ward-count report does not need to be moved. Existing ward ownership and registered-player permissions remain stored in ward ZDOs and are unaffected.
1.3.8
- Moved
STUWard.yml,STUWard.RecentPlayers.yml, and the generatedSTUWard.WardCountReport.ymlto the shared<Valheim save data>/STUWarddirectory so local-host data survives mod-manager profile removal and related YAML files stay together. Worlds and mod-manager profiles using the same Valheim save-data root share the policy and recent-player history. - Added a Ward Settings header button that opens the data directory for a local host (single-player or listen server). It is hidden from remote clients and headless dedicated servers.
- There is no automatic migration or legacy-path fallback. Before first startup with this update, stop the game or server, create
<Valheim save data>/STUWard, and move the existingSTUWard.ymlandSTUWard.RecentPlayers.ymlfiles into it. Files left inBepInEx/configare ignored; without a manual move, STUWard creates the default policy and starts with an empty recent-player history. The generated ward-count report does not need to be moved. Existing ward ownership and registered-player permissions remain stored in ward ZDOs and are unaffected. - Deferred managed YAML loading until the authoritative server session is ready, preventing early platform-storage initialization failures while preserving Valheim
-savediroverrides.
1.3.7
- Updated optional Clan integration to the current
sighsorry.Clanplugin GUID while retaining the public API v4 ward contract. The formersighsorry.valheim.Clanplugin GUID is no longer recognized. - Existing wards and individual registrations require no migration or replacement because their stored owner, registered-player, and immutable Clan identity data is unchanged. Servers and clients using Clan must install its current build together with this STUWard version.
1.3.6
- Added optional Clan 1.0.0 public API v4 integration. Primary Clan Leaders, Officers, and Members receive group-based ward access, overlap, placement, minimap visibility, and player-list metadata; Guests never grant automatic ward access.
- Generalized group identities so Guilds and Clan remain distinct while preserving existing Guilds ward metadata. If both providers are installed, automatic group authorization fails closed until only one remains.
- Added the synchronized
Ward Range Configurationserver setting, defaulting toOff. When disabled, the per-ward radius slider is hidden and the second settings page reclaims the space while preserving stored radii; enabling it restores trusted-player radius adjustment. - Shortened valid SteamID64 values in registered and recent-player rows to their final ten digits. Full IDs remain unchanged internally and searchable, while non-Steam account IDs remain fully displayed.
1.3.5
- Restored a server-authoritative per-ward range slider on the second settings page. New wards still start at the largest legal radius; later expansion is clamped against the server maximum and current foreign wards without resizing neighboring wards.
- Consolidated recent-player history into one server-profile-wide
BepInEx/config/STUWard.RecentPlayers.ymlfile. Existing ward registrations remain stored on their wards and are unchanged. - Former per-world recent-player files are not migrated automatically or modified. To retain one history, stop the server before its first startup with STUWard 1.3.5 and copy the complete contents of the desired
STUWard.RecentPlayers.<worldUID>.ymlintoSTUWard.RecentPlayers.yml. Do not combine multiple files; entries older than twenty-eight days are pruned normally.
1.3.4
- Fixed door auto-close for slow-opening modded doors such as OdinsKingdom's
GB_Large_Portcullis. After the shared five-second delay, STUWard now waits up to sixty seconds for the door to become interactable before issuing one close request.
1.3.3
- Fixed dedicated-server admin+debug ward access when another client owns the ward or container ZDO. Server-validated admin+debug state is now projected to every peer, including late-join snapshots and revocation when debug mode, admin access, or the session ends.
- Made same-guild ward access recover quickly when Guilds or remote-player identity arrives after a client enters an already loaded zone, without turning a transient no-guild result into a thirty-second denial.
- Removed legacy ward and Guilds recovery paths. STUWard now recognizes only the current
piece_stuwardprefab and current GuildsSteam_<id>/nameschema, and no longer backfills missing permitted snapshots or repairs malformed stored radii. - Removed obsolete ServerSync template, old BepInEx binding redirect, and unstripped-corelib build fallbacks. Servers and all clients must update to STUWard 1.3.3 together.
1.3.2
- Extended the per-world unregistered-player history from fourteen to twenty-eight days. The change is not retroactive: records already pruned under the fourteen-day policy return only after those characters reconnect.
- Fixed dedicated-server player tracking by reconciling delayed character identities periodically and immediately before building the unregistered-player list.
- Renamed the individual-registration list heading to
Registered players.
1.3.1
- Simplified ward-ring visibility: placement previews and enabled wards show their ring, while disabled wards remain hidden unless highlighted as the closest placement blocker.
- Removed the unused per-ward marker-visibility state and the settings-response overlap-feedback flag from the exact-version settings protocol while retaining authoritative radius clamping and the normal placement-conflict warning/highlight path.
- Preserved registered-player identity snapshots when offline lookups are unavailable and removed quadratic recent-player filtering.
- Rejected oversized or invalid server YAML safely, bounded report and minimap payloads, and preserved the last valid client minimap snapshot when the server exceeds the supported ward count.
- Simplified runtime RPC ownership, player-list UI construction, and local deployment while making release packaging stage the manifest without modifying the tracked source file.
- This wire format is not backward compatible; servers and all clients must update to STUWard 1.3.1 together.
1.3.0
- Expanded the second-page behavior labels and arranged ward alert sound, ward alert visual effect, ward-range rotation, and door auto-close in a two-column grid. Range rotation defaults to on at 50% of the native marker speed.
- Added a server-authoritative, per-world list of characters seen within the last fourteen days so trusted players can add them directly to a ward. Records previously pruned by the shorter retention policy cannot be recovered retroactively.
- Restored the two-page Ward Settings layout: player management on the first page, behavior toggles and restrictions on the second, with independent scrolling lists.
- Removed confirmation popups from ward dismantling, trusted-player removal, and ward activation changes; authorized actions now apply immediately.
- Removed disabled-ward outsider self-registration and its stale vanilla opt-in/opt-out hover prompts. Trusted players now manage individual ward registration from Ward Settings.
- Recent-player history starts with this release and is not imported from logs or older STUWard data.
- Added a local full-brightness ward-ring cue that pulses for 0.5 seconds when crossing and remains active while standing within 0.75m of the boundary.
- Added a client-only boundary brightness scope setting for trusted wards, untrusted wards, all wards, or off; placement conflicts independently highlight the closest blocking ward ring for 1.5 seconds.
- Added guild, public platform account IDs, and online/last-seen status to player rows, plus independent local search fields for the registered and unregistered lists.
- Made generated
STUWard.ymlward-limit examples directly uncommentable under the activeward_limit_overridesmapping.
1.2.9
- Unified existing-ward permissions for owners, individually trusted players, same-guild members, and admin+debug users.
- Added confirmation prompts before removing an individually trusted player, dismantling a ward, or deactivating a ward.
- Made new wards automatically use the largest legal radius up to the server maximum, yielding to older foreign wards.
- Fixed ward marker speed and brightness at their minimum settings and removed all three marker sliders.
- Simplified door auto-close to a per-ward on/off switch with one shared fixed delay of 5 seconds.
- Fixed the one-page restrictions grid failing to build because its ScrollView still had Jotunn's default vertical layout component.
- Removed the legacy ward-settings payload and door-delay migration path; servers and clients must update together.
- Combined warning toggles, individually trusted players, and the two-column restrictions grid on one page with independent scrolling blocks.
1.2.8
- Fixed revoked admin+debug access remaining cached and stopped treating cross-platform accounts with the same numeric suffix as the same administrator.
- Fixed Guilds membership and ward projection refreshes, including stale join/leave data and prefixed or bare Steam account IDs, while keeping other platform identities distinct.
- Fixed host-only and temporarily deferred ward minimap refreshes so local pins update without remote peers and queued server refreshes retry after index preparation.
- Reworked automatic pickup protection to run the vanilla AutoPickup method while temporarily excluding denied drops, with exception-safe item-state restoration.
- Made temporary interaction, portal, and pickup restriction scopes exception-safe so failed calls cannot affect later ward access checks.
- Fixed valid empty permitted-player snapshots being treated as invalid and bounded snapshot backfill work for stale or malformed entries.
- Hardened managed-ward placement and minimap snapshot RPCs with malformed-packet checks, request throttling, and bounded pending queues.
- Changed newly generated
STUWard.ymlfiles to use emptyward_limit_overrides; sample Steam account entries are now comments instead of active mappings.
1.2.7
- Fixed ward activation and deactivation VFX/SFX on dedicated servers by assigning the single networked effect spawn to the requesting client after server authorization.
1.2.6
- Added a server-side prefab fallback for ward toggle effects when no live ward instance was loaded.
1.2.5
- Fixed networked ward activation and deactivation effects multiplying by the number of nearby players.
- Simplified blocked-action warnings to flash only the nearest denying ward and coalesced each ward's warning effects into a 0.5-second client cooldown.
1.2.4
- Simplified authoritative ward-limit counting to scan only STUWard prefabs.
- Removed redundant global ZDO placement tracking and diagnostic logging configuration.
- Reduced diagnostic-only state and synchronization plumbing while preserving ward access behavior.
1.2.3
- Fixed ward owner and admin+debug controls on dedicated servers when another peer owns the ward ZDO.
- Restored authoritative per-account ward limit enforcement across world and zone loading.
- Routed managed ward settings, enabled state, and permitted-player changes through the server.
1.2.2
- Fixed automatic pickup and ward removal checks to follow each ward's effective restriction and owner-control rules.
- Hardened server-authoritative guild, RPC, map-state, and permitted-player synchronization.
- Made core Harmony patch startup transactional and simplified duplicated config, map-state, registry, and snapshot code.
1.2.1
- Added per-ward restriction toggles with server-side forced/not-forced controls.
- Separated hammer-placed consumable and feast consumption from normal item pickup.
- Simplified hostile creature structure protection config surface.
- Cleaned up ConfigManager ordering, patch safety, UI layout, and diagnostic logging.
1.2.0
- Refactoring and optimizations.
1.1.9
- Fixed errors that could happen with floating itemdrops within the ward area.
1.1.8
- Refactored some codes.
1.1.7
- Added config option for hostile creature to not damage warded pieces always.
1.1.6
- Fixed ward icons sometimes not showing on map on dedi.
1.1.5
- TSV file is no longer needed, and YAML files are integrated into one
STUWard.yml. - Organized configs.
- Refactored some codes for better performance.
1.1.4
- Fixed wards not being able to place close enough to each other.
- Fixed ward range not showing on map.
- Fixed some guild related bugs.
1.1.3
- Fixed guild members not having authorities on guild wards on dedi.
- Updated README with more specific info.
1.1.2
- Fixed some errors that would happen when placing ward.
- Resolved framedrop while holding preview of the ward.
- Players can view ward icons even though they didn't load the zone after server reboot.
- Ward circle projection segment count was reduced to 36 from 80.
- Refactored some per-check codes.
1.1.1
- Admin+debug mode has the same authority as the ward owner.
- Added ward icon and range on map and minimap for guild members, registered players, and owners.
1.1.0
- Added server-synced
BepInEx/config/STUWard.ItemPrefabs.ymlfor item prefab policy. - Added
Pickup Block Modeconfig:BlockAllExceptWhitelistandAllowAllExceptBlacklist.
1.0.9
- Fixed some guild related behaviors.
1.0.8
- Reduced some excessive logs that could happen on dedi.
1.0.7
- Fixed the E button not working on dedi.
- Fixed guild related behaviors on dedi.
1.0.6
- Improved overall performance.
1.0.5
- Changed the method of E button appearing on players.
1.0.4
- Fixed the E button not working on server.
1.0.3
- Pieces within active area don't get damage from mobs when no trusted player is near ward area.
1.0.2
- Fixed guild players not having authorities on guild wards on dedi.
- Fixed debug mode not working for the ward on dedi.
- Made it so that players and tamed animals won't damage pieces within the protected area.
- Feasts are no longer consumable within the ward area.
1.0.1
- Only the owner and debug admin can remove the ward.
- The ward itself is invulnerable to damage.
1.0.0
- Initial release.