sighsorry-AdminQoL icon

AdminQoL

Console panel GUI with favorites, Expands vanilla itemsets command via YAML with EpicLoot and Jewelcrafting examples. Also adds learn/unlearn and clear-inventory commands, suppresses recipe unlock spam, removes equip delay and skill-up effects.

Last updated 4 days ago
Total downloads 3943
Total rating 4 
Categories Mods Utility AI Generated Client-side Deep North Update Server-side
Dependency string sighsorry-AdminQoL-1.1.5
Dependants 4 other packages depend on this package

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2360 icon
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.2360

README

AdminQoL

Console panel GUI with favorites, configurable language cycling, and expanded vanilla itemsets via YAML with EpicLoot and Jewelcrafting examples. Also adds learn/unlearn and clear-inventory commands, suppresses recipe unlock spam, removes equip delay and skill-up effects.


Search for all the console commands that vanilla and other mods adds. Also you can favorite the commands in groups.


There is also wooden theme for console panel. You can turn off console panel with f6 by default.


In vanilla, there is console command itemsets. Make your own sets for testing. You can edit vanilla sets or make your own sets. Set supports both Epicloot and Jewelcrafting.


Example of calling in built-in sets. Use command adminqol_clearinventory to clear your inventory if you need it.

Features

  • Suppresses Valheim unlock popup spam from MessageHud.QueueUnlockMsg.
  • Can hide skill level-up VFX/SFX and skill level-up alarm messages independently.
  • Optional instant equip/unequip by removing Valheim's timed equip action.
  • Adds admin-only local commands:

Features

  • Suppresses Valheim unlock popup spam from MessageHud.QueueUnlockMsg.
  • Can hide skill level-up VFX/SFX and skill level-up alarm messages independently.
  • Optional instant equip/unequip by removing Valheim's timed equip action.
  • Adds admin-only local commands:
    • 'itemsets' <itemsetname> itemsetname is defined at AdminQoL.ItemSets.yml, AdminQoL.ItemSets.EpicLoot.yml and AdminQoL.ItemSets.Jewelcrafting.yml
    • adminqol_learn <prefab|all> learns all recipes/discoveries, or a prefab item/build piece/crafting station and its related recipes.
    • adminqol_unlearn <prefab|all> unlearns all known items, or a prefab item/build piece/crafting station and its related recipes.
    • adminqol_clearinventory permanently removes every item entry from the local player's inventory.
    • adminqol_itemsets_reload reloads AdminQoL.ItemSets.yml.
    • adminqol_itemsets_list lists currently loaded YAML itemsets.
  • Injects YAML itemsets into Valheim's vanilla itemset command, so custom sets work with itemset <name> [quality] [keep].
  • Optional YAML item metadata for Jewelcrafting sockets and EpicLoot magic items when those mods are loaded.
  • EpicLoot set bonuses remain defined by EpicLoot legendaries.json; AdminQoL only marks itemset items with the matching EpicLoot IDs.
  • Adds a ConsolePanel command browser to Valheim's F5 console, with command grouping, search, numbered favorite profiles, and F6 show/hide.
  • Makes the Settings language cycle order editable through BepInEx/config/AdminQoL/LanguageSequence.yml.
  • Adds an admin-only, read-only Prefab Profiling overlay for inspecting the currently hovered local object. G toggles the overlay and H copies the cached snapshot by default. Creator shows the Valheim character name only, not a platform nickname or numeric character ID. A compatible ZoneSavior server can optionally resolve offline creators; without it, unresolved creators remain Unknown.
  • Does not use ServerSync. This is intentionally a client/admin utility.
  • Admin-only Ignore Carry Weight prevents encumbrance and lets automatic pickup continue above the weight limit while inventory space and normal stacking rules permit it.
  • Admin-only item duplication: press Left Ctrl+C over your inventory item, or while holding a selection, to create an independent copy with its custom data intact.

Config

The BepInEx config file is BepInEx/config/sighsorry.AdminQoL.cfg. Runtime-generated AdminQoL YAML files are stored in BepInEx/config/AdminQoL/.

  • 1 - General: Load YAML Item Sets. AdminQoL commands always require host or verified server-admin access.
  • 2 - Gameplay QoL: unlock popup/log suppression, skill level-up effects/alarm removal, instant equip, and Ignore Carry Weight (default: true).
  • 3 - Console Panel: panel size, visual style, vanilla console bottom offset, mouse cursor release, and toggle key.
  • 4 - Console Panel Favorites: favorite tab count and favorite command lists.
  • 5 - Prefab Profiling: enable, toggle-or-hold mode, and display/copy keys. Admin access is always required. Snapshots refresh once per second and always include the component list.
  • 6 - Item Duplication: Enabled (default: true) and Duplicate Item Key (default: C + LeftControl).

Ignore Carry Weight applies only to the local host/admin player. It respects the game's auto-pickup toggle, item ownership, pickup delay, range, and inventory space checks. It does not change item weights or maximum carry capacity, so the inventory can still display an overweight value. Turning the option off restores normal weight checks; the game's next status update adds or clears the encumbered effect as appropriate. On a dedicated server, enable it in the admin client's config; no AdminQoL server installation is needed.

The former Require Server Admin and Prefab Profiling Require Admin switches are no longer read. This does not add an admin gate to the language selector, console layout, or cosmetic notification settings. AdminQoL remains a cooperative client utility, not server-enforced anti-cheat.

Inventory item duplication

Open your inventory and press Left Ctrl+C with the pointer over an item. The entire hovered stack is duplicated. If you have picked up an item onto the cursor, that selection takes priority and only the held quantity is duplicated. The original and the held selection are left in place. This creates an actual inventory item, not clipboard text; no paste step is required. Rebind Duplicate Item Key to use Right Ctrl or another shortcut.

Only the local host or a verified server admin can duplicate items, and only from their own player inventory. Items held from containers are ignored, even when hovering over a player slot. Typing in text fields, console/chat/menu use, inventory dialogs, crafting, death, teleporting, and cutscenes block the shortcut. Holding the shortcut does not repeat, and same-frame/reentrant calls cannot duplicate twice.

The copy preserves custom-data keys/values, quality, durability, variant, crafter information, and world level. Its equipped flag, old slot and transient attack/projectile state are reset. Generated items are marked cheated and use the game's normal inventory change notifications; the source item's marker is not changed.

A separate empty slot is required, even when another stack has capacity. There is no automatic stack merging, overflow drop, or retry. Slot selection, new-item capacity checks and the fixed-slot insertion use Valheim's existing paths so inventory mods can retain their restrictions. If a callback throws after insertion, AdminQoL inspects the actual inventory before reporting the result. An unverified result is reported explicitly; it does not trigger a rollback or retry that could consume or duplicate items.

Infinity Hammer, World Edit Commands and ZoneSavior are not required for this feature, nor is an AdminQoL server installation. External caches, unique IDs and data stored outside m_customData are not universally clonable. A Clone hook that changes the expected metadata is rejected rather than silently producing a different item. Save/reload and behavior with the particular item mods in use still need in-game verification. Custom-slot UI replacements that do not use the player's vanilla inventory grid are not automatically supported.

Creator names and server-admin verification

Creator lookup first uses a currently loaded Player with the matching character ID. Otherwise, it optionally asks ZoneSavior on the server for the last directly observed name of that exact character. Protocol 2 is required: older servers that may confuse account aliases with character names are not trusted. There is no hard dependency on ZoneSavior or ServerSync. Neither Steam profile names nor unverified legacy creatorName strings are used; Owner and ZDOID diagnostics are unchanged. Lookup does not modify pieces or their creator IDs.

Update ZoneSavior on the server to enable offline character names. Existing account name histories cannot reliably identify each character: until ZoneSavior observes that character after the update, the result may remain Unknown. Successful and missing-name results are cached for up to 60 seconds in bounded, session-local caches. Missing or incompatible endpoints stop being queried after bounded retries, and disconnects or loss of admin access clear the cache and pending request.

Remote admin permission is rechecked every 5 seconds, with a 3-second response timeout and a 10-second maximum grant lifetime. It is not permanently granted by the client's initial admin-list snapshot. Unknown, disconnected, denied, timed-out, and expired states do not grant access. No AdminQoL server installation is required. The client-only check uses vanilla's Unban response with a fresh random sentinel for each request, accepting success only from the current server RPC for that request. This is not a dedicated read-only permission API: vanilla attempts to remove the sentinel from its ban list. The randomized token avoids targeting a real entry, but the check still depends on vanilla's response wording and can produce server log entries. A missing response disables admin features safely rather than assuming permission. While a probe is pending, the server's generic denial is consumed to avoid repeated console noise and access is revoked; vanilla does not echo a nonce on denial, so an identical denial from a concurrent command may also be hidden.

Learn/unlearn examples:

adminqol_learn all
adminqol_learn ShieldWood
adminqol_learn piece_workbench
adminqol_unlearn all
adminqol_unlearn ShieldWood
adminqol_unlearn piece_workbench

Targets match prefab names only. Item targets affect item discovery and matching output recipes; crafting station targets affect the station entry and recipes crafted there. Both full learn and full unlearn use the explicit all target, and all is included in tab completion.

Language Sequence

Opening Settings > Gameplay on a client creates BepInEx/config/AdminQoL/LanguageSequence.yml from Valheim's current language order. The file is generated only when missing and is never overwritten after it exists.

The YAML is a top-level list of Valheim's internal language IDs:

- English
- Swedish
- French
- Korean

The right arrow follows the list from top to bottom, the left arrow follows it in reverse, and both directions wrap at the ends. English is used as the sequence anchor. The file is read whenever the settings screen opens, so close and reopen Settings after editing it. Unknown and duplicate IDs are ignored, while installed languages missing from the file are appended in their current runtime order. An unreadable or empty file, or one with no supported IDs, falls back to the last valid sequence or Valheim's current order. Dedicated servers do not create or use this file.

YAML Itemsets

When YAML itemsets are first needed, the mod creates BepInEx/config/AdminQoL/AdminQoL.ItemSets.yml from Valheim's built-in itemsets. The file is generated once and is never overwritten by AdminQoL after it exists. Files in the previous BepInEx/config/AdminQoL.ItemSets*.yml root location are not loaded or migrated.

AdminQoL also creates and loads these optional example/reference files:

  • BepInEx/config/AdminQoL/AdminQoL.ItemSets.EpicLoot.yml
  • BepInEx/config/AdminQoL/AdminQoL.ItemSets.Jewelcrafting.yml

All files matching AdminQoL.ItemSets*.yml are loaded. The generated EpicLoot file is parsed only when EpicLoot is installed, and the generated Jewelcrafting file is parsed only when Jewelcrafting is installed. Their example entries are copied from all vanilla itemsets, renamed, and expanded with mod-specific blocks. They are enabled: true by default; set an entry to enabled: false if you do not want it in the itemset command.

itemSets:
  - name: MyAdminSet
    items:
      - prefab: SwordIron
        quality: 4
        stack: 1
        use: true
        hotbarSlot: 1
    skills:
      - skill: Swords
        level: 100
    knownStations:
      - piece_workbench
    knownItems:
      - Wood
      - Stone
    inheritKnownFromItemSet:
      - Start

hotbarSlot is Valheim's itemset hotbar placement. 1 means hotbar slot 1, 8 means hotbar slot 8, and 0 or an omitted field means no hotbar move.

If a YAML set name matches a vanilla set and replaceExisting is true, the YAML definition replaces the vanilla set at runtime. Missing replaceExisting is treated as false. Delete a generated file if you want AdminQoL to regenerate that file.

Known-item inheritance cycles are rejected before Valheim changes the inventory or character knowledge. Missing parent sets retain Valheim's normal behavior and are ignored. While applying a set, referenced crafting-station prefabs use their base level without querying scene-only extensions; placed stations retain Valheim's normal level calculation.

Jewelcrafting socket values support exact gem prefab names, empty, random_simple, random_advanced, and random_perfect. EpicLoot effects support exact effect IDs or type: random; value: random rolls through EpicLoot's effect value ranges.

AdminQoL does not register EpicLoot set definitions. Define custom EpicLoot sets in EpicLoot's legendaries.json, then reference the loaded legendaryId and optional setId from an AdminQoL.ItemSets*.yml file. If setId is omitted, AdminQoL asks EpicLoot which loaded set owns that legendaryId. The generated AdminQoL.ItemSets.EpicLoot.yml documents every supported epicLoot: field.

Known limitation: optional item metadata is applied to the item returned by Valheim's add operation. When one entry creates multiple item instances, earlier instances may not receive metadata; a partially failed add can also leave added items without metadata. For enhanced non-stackable gear, use separate stack: 1 entries and check inventory space. AdminQoL does not retry failed item grants.

Development verification

The Valheim 1.0 adaptation was originally checked against 1.0.7. The current admin/creator-name changes are built and contract-checked against 1.0.21 (Windows client build 26249040; dedicated-server build 26266951); actual in-game checks remain necessary. The manifest declares BepInExPack_Valheim 5.4.2360. Build references use the original installed game DLLs, without publicizing them.

Build against the installed Valheim assemblies and automatically deploy the merged Debug plugin to the local game's BepInEx/plugins folder:

dotnet build AdminQoL.sln -c Debug -p:DeployToGame=true
pwsh -NoProfile -File ./VerifyStructureRegression.ps1 -PluginDll ./bin/Debug/AdminQoL.dll -GamePath '<Valheim installation>'
pwsh -NoProfile -File ./VerifyLightweightXRay.ps1 -PluginDll ./bin/Debug/AdminQoL.dll -MonoCecilDll '<Valheim installation>/BepInEx/core/Mono.Cecil.dll'

The structure regression runner requires PowerShell 7 and executes managed methods from the built DLL: knowledge updates, inheritance validation, station-reference scoping, nested/finalizer cleanup, the carry-weight instruction rewrite (including missing/ambiguous targets and preserved labels/exception markers), admin-probe session/nonce/expiry/revocation transitions, and the creator-name response parser. Item-duplication tests cover source selection, independent metadata copies, quantity and slot validation, and outcome classification against explicit inventory states. It also checks Harmony target signatures and injected parameters against original game assemblies, plus selected IL contracts and the original auto-pickup weight/space/ownership checks. It does not install Harmony patches, construct live Unity components, or change profiles/worlds. The attack target factory is checked through its compiled names instead of executing Harmony's initializer in PowerShell. Its optional -BaselineDll argument compares targets and priorities against the released AdminQoL 1.1.3 DLL, allowing only the two carry-weight patches and the inventory-duplication input patch.

To repeat against preserved original dedicated-server DLLs, run the structure script in a fresh PowerShell process with -ManagedDirectory '<server snapshot>/original/valheim_server_Data/Managed'; keep -GamePath pointed at the client installation for BepInEx. The script reports the executed assertion count. This is an assembly/managed-code check, not a running dedicated server.

The 1.0 adaptation uses ZInput.pointerPosition, explicitly keeps custom commands visible without devcommands, and patches the new ten-argument Inventory.AddItem overload. Itemset grants still run through vanilla code, preserving the new cheated marking and dropIfFullInv behavior. AdminQoL does not intercept or retry overflow drops.

These checks do not replace in-game verification. Before release, confirm startup completes without AdminQoL patch errors; test F5/F6, pointer clicks, search focus during console/style changes and shutdown, category/favorite refresh after permission/config changes, language cycling, prefab and placed crafting stations, learn/unlearn, and item counts/metadata with optional mods. Check itemset grants with free/full inventory, dropped items, cheat marking, and failed/nested grants; check durability preservation during building, repairing, blocking, and attacks. Repeat relevant scenarios as host, dedicated-server admin, and non-admin client using disposable characters/worlds. Optional ZoneSavior name lookup must also degrade safely when the server integration is unavailable.

For Ignore Carry Weight, exceed the usual weight limit and verify movement/stamina plus automatic pickup into an empty slot or a compatible stack. Check full inventory with no stack capacity, auto-pickup disabled, an item owned by another peer, option toggling while encumbered, reconnects, and a non-admin client (including a config containing the obsolete admin switches set to false). Confirm the total inventory-plus-ground item count is conserved. A missing or ambiguous auto-pickup patch target logs a warning and leaves the original pickup weight check intact.

For identity and access, test two characters on one account, reconnect after logout, a character rename, and legacy activity data without a character mapping. Test a missing/old/new ZoneSavior server, admin removal/regrant while connected, delayed or missing probe replies, and reconnecting to a different world/server. Confirm commands and profiling become unavailable on denial/timeout, that creator names never fall back to an account alias, and that ZoneSavior still protects all characters of an active account. These cases require actual client/host/dedicated-server runs; packet/state tests alone do not establish runtime compatibility.

For item duplication, use a disposable character to test hover/full-stack and drag/split-quantity copies, equipped gear, damaged/upgraded/variant items, custom data with EpicLoot/Jewelcrafting, subsequent independent item edits and save/reconnect. Test empty/full inventories, partial stack space with no empty slot, InventorySlots locked/special slots and carry-count limits, foreign-container drag, key rebinding/holding, focused text input, modal dialogs and admin denial/revocation. Check that the source count and metadata stay unchanged, exactly the requested amount is added into a separate valid slot, and nothing is spawned on the ground. The managed tests and static API inspection do not replace actual shortcut, cheated-notification, inventory-event and external Harmony-patch execution.