You are viewing a potentially older version of this package. View all versions.
Fontaris-BoostDrop-2.0.4 icon

BoostDrop

Server-authoritative per-player drop boosts with Jotunn ConfigSync, resolved per-player runtime policy sync, temporary grants and admin GUI.

Date uploaded a month ago
Version 2.0.4
Download link Fontaris-BoostDrop-2.0.4.zip
Downloads 45
Dependency string Fontaris-BoostDrop-2.0.4

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2350 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.2350
ValheimModding-Jotunn-2.30.0 icon
ValheimModding-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.30.0

README

BoostDrop

Per-player configurable boosts for Valheim multiplayer.

BoostDrop lets a server give different players different multipliers for drops, gathering, combat, farming and skill XP without sharing the private permission files with clients.

Multiplayer requirement: install the same BoostDrop version on the dedicated server and on every client.

Features

  • Different multipliers for each player, such as x1, x1.5, x2, x5, etc.
  • Global, group and individual player rules.
  • Temporary boosts with automatic expiration.
  • Category-specific multipliers.
  • Item and creature-specific overrides.
  • Server-authoritative permissions.
  • Runtime permission reloads without restarting the server.
  • Admin GUI with F8.
  • Admin console commands.
  • Jötunn ConfigSync for synchronized server settings.
  • Designed for multiplayer where Valheim may move network ownership between nearby players.

How multiplayer rewards are assigned

BoostDrop does not use the network owner of an object to decide which player's multiplier should be used.

For creatures, bosses, mining nodes and trees, BoostDrop tracks damage caused by real players. The player with the highest accumulated damage provides the multiplier for the reward.

Example:

Player A: x5 -> 700 damage
Player B: x2 -> 300 damage

Reward multiplier: x5

It does not matter which player is standing closer, which player owns the network object, or who happens to be simulating it.

If the final damaging event cannot be attributed to a real player, BoostDrop leaves that reward vanilla instead of guessing.

Pickables such as berries, mushrooms, twigs and flint use the player who actually picked the object.

Supported categories

Category Description
mining Mineable rocks, ore and compatible destructible mining resources
wood Trees and logs
fishing Fish caught by the player
pickable Berries, mushrooms, crops, branches, flint and world pickables
mobdrop Normal creature loot
bossdrop Boss loot
chestloot Supported chest/container loot
combatdamage Player combat damage
farming Plant growth speed
skillxp Skill XP gain
building Reserved for future building-cost support; no building-cost change in 2.0.4

Requirements

BoostDrop 2.0.4 requires:

  • Valheim with BepInEx
  • denikson-BepInExPack_Valheim-5.4.2350
  • ValheimModding-Jotunn-2.30.0

The package includes the files required by BoostDrop itself. When installing through a compatible mod manager, declared dependencies are installed automatically.

Installation

Mod manager

Install BoostDrop through your Valheim mod manager and make sure the same version is installed on:

  • the dedicated server;
  • every player client.

Restart the game/server after replacing the DLL with a new BoostDrop version.

Manual installation

Copy the BoostDrop plugin files into your BepInEx plugins folder.

Typical location:

Valheim/BepInEx/plugins/BoostDrop/

For a dedicated server, use the server's own BepInEx/plugins directory.

Do not copy the server permission or grant YAML files to players.

First server setup

On first use, BoostDrop uses server-side files under:

BepInEx/config/

Main files:

BoostDrop_permissions.yaml
BoostDrop_grants.yaml

BoostDrop_permissions.yaml contains permanent/static rules.

BoostDrop_grants.yaml stores temporary grants created by admin commands or the admin GUI.

These files are private to the server and do not need to be distributed to clients.

Simple permission example

Give all players vanilla rates by default, while two players receive custom multipliers:

defaultMultiplier: 1.0

userIds:
  76561198000000001: 2.0
  76561198000000002: 1.5

Groups

Groups are useful when several players should share the same multiplier:

defaultMultiplier: 1.0

groups:
  vip:
    multiplier: 2.0
    players:
      - Odin
    userIds:
      - 76561198000000001

Per-player category rules

A player can have different multipliers for different activities:

playerDetails:
  Odin:
    userId: 76561198000000001
    multiplier: 2.0
    categories:
      mining: 3.0
      wood: 2.0
      fishing: 1.5
      pickable: 2.0
      mobDrop: 2.5
      bossDrop: 3.0
      chestLoot: 2.0
      combatDamage: 1.5
      farming: 2.0
      skillXP: 2.0

An explicit 1.0 can be used to exclude a category or item from a broader boost.

Item overrides

Example: a player has a general x2 multiplier, but Coins should remain vanilla:

playerDetails:
  Odin:
    userId: 76561198000000001
    multiplier: 2.0
    items:
      Coins: 1.0

Creature-specific rules are also supported:

playerDetails:
  Odin:
    userId: 76561198000000001
    multiplier: 2.0
    mobs:
      Troll:
        multiplier: 3.0
        items:
          TrollHide: 4.0
          Coins: 1.0

Temporary boosts

Admins can grant a multiplier without editing YAML manually.

boostdrop grant <player|SteamID64> <multiplier> [duration] [category]

Examples:

boostdrop grant Odin 2 7d all
boostdrop grant Odin 1.5 48h mining
boostdrop grant 76561198000000001 3 30m mobdrop
boostdrop grant 76561198000000001 2 permanent all

Supported duration formats:

30m        30 minutes
12h        12 hours
7d         7 days
2w         2 weeks
permanent  no expiration

A number without a suffix is interpreted as days.

Admin commands

boostdrop grant <player|SteamID64> <multiplier> [duration] [category]
boostdrop revoke <player|SteamID64> [all|category]
boostdrop check <player|SteamID64>
boostdrop list
boostdrop reload
boostdrop cleanup
boostdrop gui
boostdrop me

boostdrop me shows only your own effective BoostDrop policy.

Administrative changes are validated by the server. Being able to open the UI or type a command does not grant admin authority.

Admin GUI

Press F8 to open the BoostDrop admin GUI.

From the GUI, server admins can:

  • select a player or SteamID64;
  • choose a multiplier;
  • choose duration;
  • choose a category;
  • grant/update a boost;
  • revoke a boost;
  • inspect current rules;
  • list active grants;
  • reload permission files;
  • remove expired grants.

The hotkey can be changed in the BoostDrop client configuration.

Decimal multipliers

Decimal multipliers are supported.

For example, x1.5 does not simply round every quantity up or down. BoostDrop uses proportional scaling so the long-term result remains close to the configured multiplier.

Example:

4 items at x1.5 -> 6 items

For a quantity of 1, the fractional part is handled probabilistically rather than always forcing the same rounded result.

Hot reload

By default, BoostDrop watches its server permission files for changes.

After editing BoostDrop_permissions.yaml, the server can apply the new rules without a complete restart.

You can also force a reload with:

boostdrop reload

Privacy and server authority

The server keeps these files private:

BoostDrop_permissions.yaml
BoostDrop_grants.yaml

Clients receive only the resolved runtime values needed for gameplay. They do not receive the complete permission/group/grant database.

Global gameplay settings are synchronized through Jötunn ConfigSync.

For public or heavily protected servers, using an enforcement mod to require the correct BoostDrop DLL/version on clients is recommended.

Important multiplayer notes

  • Use the same BoostDrop version on server and clients.
  • Use compatible Jötunn versions on server and clients.
  • Do not place BoostDrop only on the dedicated server; this version is designed as a client + server mod.
  • Do not distribute the server permission/grant YAML files to players.
  • Nearby players do not automatically share the same multiplier.
  • Network ownership does not decide who receives a reward multiplier.

Updating from an older BoostDrop version

When upgrading:

  1. Stop the server and clients.
  2. Replace the old BoostDrop DLL with the new version everywhere.
  3. Keep your existing BoostDrop_permissions.yaml unless the release notes say otherwise.
  4. Start the server.
  5. Start clients with the matching BoostDrop version.

If you previously treated BoostDrop as server-only in an enforcement configuration, change it to a required client + server mod.

Troubleshooting

My multiplier is not being applied

Run:

boostdrop me

This shows the effective policy received by your client.

For an admin checking another player:

boostdrop check <player|SteamID64>

I changed the YAML but nothing changed

Run:

boostdrop reload

Also verify that you edited the YAML inside the server's BepInEx/config folder.

F8 does nothing

The admin GUI is intended for server administrators. Verify that:

  • EnableAdminGui is enabled;
  • your account is recognized as a Valheim server admin;
  • the client has the same BoostDrop/Jötunn setup as the server.

Two nearby players have different multipliers

That is supported. BoostDrop resolves rewards by the responsible player/contributor rather than the current network owner of the object.

For creature, tree and mining damage, the highest accumulated player damage determines the reward policy.

Version 2.0.4 highlights

  • Optimized multiplayer damage-contribution tracking.
  • Highest-damage player determines mob, boss, mining and wood reward policy.
  • Network owner and proximity are not used as reward identity.
  • Supports large multiplayer groups with dynamic contributor tracking.
  • No player scan, YAML read or BoostDrop RPC for every hit.
  • Improved runtime policy synchronization.
  • Improved pickable attribution on Valheim 1.0.x.
  • Improved hot reload behavior for permission and grant files.

License

BoostDrop is distributed under the license included with the package.

CHANGELOG

Changelog

2.1.1

  • Fixed Windows build failure caused by a missing BoostDrop.Models import in GroundPickupService.
  • Fixed nullable warnings in Jotunn configuration synchronization and GameObject result handling.
  • Hardened build-boostdrop.ps1: native dotnet restore/build failures now stop immediately instead of continuing to Copy-Item and reporting a misleading missing-DLL error.
  • No gameplay-rule change from 2.1.0; this is a build/validation fix for the P0-P2 refactor.

2.1.0

  • Refactored damage attribution into a dynamic Dictionary-based contribution ledger designed for 30+ players without fixed contributor slots.
  • Damage attribution now accepts only a real Player resolved directly from HitData; network owner, nearby players and local-player guessing are never used as combat attribution.
  • Added effective-damage correction from target HP before/after the hit when a compatible health accessor is available; overkill is clamped to remaining health.
  • Removed per-hit ZDO writes. Contributions stay in RAM and are persisted through compact, budgeted checkpoints (350 ms cadence, bounded targets per pass).
  • Added checkpoint migration handling so network ownership changes do not decide reward identity.
  • Non-player final damage keeps the reward vanilla, including targets that already carried a checkpoint from a previous owner.
  • Separated contribution data from player policy data. Config/YAML/grant reloads no longer erase an in-progress boss/resource contribution ledger.
  • Added EffectivePolicyCache so group/YAML/grant resolution is not performed in the damage hot path.
  • Added RuntimeIdentityDirectory that keeps peer UID, runtime player ID and platform user ID separate.
  • Added initial runtime-policy snapshots plus compact per-player deltas for joins/grants/revokes/disconnects.
  • Fixed reconnect/stale identity collisions and policy-cache removal for disconnected peers.
  • Reworked Pickable/PickableItem attribution to use the routed RPC sender rather than current ZDO owner/local player.
  • Reworked loose ground pickup with a one-time processed marker to prevent drop/pickup multiplication exploits.
  • Reworked chest loot to use a persistent ZDO processed marker instead of an unbounded static HashSet.
  • Reworked DropBoostContext into a generation-token reward context with exception finalizers, preventing leaked nested contexts after Harmony failures.
  • Added watcher restart/debounce/retry behavior and last-known-good YAML preservation.
  • Suppressed watcher echoes caused by BoostDrop's own grant-file writes, avoiding redundant full reload/snapshot traffic.
  • Removed the unimplemented Building placeholder category.
  • Renamed Farming behavior internally to PlantGrowth; legacy YAML farming remains supported for compatibility.
  • Added boostdrop perf counters for contribution tracking, checkpointing, policy cache and policy network traffic without per-hit logging.
  • Updated source/build/package metadata to 2.1.0 and included the 256x256 BoostDrop icon.

2.0.4

  • Replaced last-hit/network-owner creature attribution with a cumulative damage contribution ledger. The highest-damage Player receives the reward policy.
  • Strict vanilla fallback: if the current damage attacker is not a real Player, BoostDrop does not attribute that hit; a non-player killing hit leaves the resulting reward vanilla.
  • Mining/wood damage paths now use the same contribution model for MineRock, MineRock5, TreeBase, TreeLog and supported Destructible targets.
  • ZDO/network ownership is never used as reward ownership. Nearby players can own the network object without stealing another player's multiplier.
  • Added a resolved runtime policy directory so a client that currently owns a world object can apply the winning remote player's policy without any per-hit BoostDrop RPC. Raw permissions/grants YAML remains server-only.
  • Damage totals are checkpointed compactly in the target ZDO so ownership migration does not erase earlier contributors; ZDO owner is transport/state only, never reward identity.
  • Runtime Player.GetPlayerID() is reported during the existing policy request only as a lookup key; the server still resolves the effective policy from the authenticated peer identity. Contributor name is persisted once per target/player as a fallback.
  • Hot-path optimization: O(1) dictionary updates per eligible hit, leader maintained incrementally, no player scans/YAML reads/RPCs/log strings per hit, no per-entity Update.
  • Contribution cleanup is global, incremental (128 targets/minute tick), 10-minute stale timeout and an 8192-target safety cap.
  • Runtime policy changes/grants invalidate in-memory policy caches; persisted damage totals remain attached to the target and are re-evaluated with the current policy.
  • Build helper defaults to F:\SteamLibrary\steamapps\common\Valheim dedicated server; BUILD-2.0.4.bat uses that script default instead of overriding it.

2.0.3

  • Fixed live configuration updates becoming inconsistent until a server restart. Runtime policy refresh is now delayed until Jotunn configuration synchronization completes.
  • Reworked YAML hot reload to wait for a quiet filesystem window, retry partial saves, preserve last-known-good permissions/grants on parse failures, and restart watchers when paths/settings change.
  • Fixed dedicated-server player attribution: routed peer UID is resolved to the correct platform ID/name instead of falling back to an unrelated Player object.
  • Fixed per-player multipliers leaking/collapsing so players with different x values are evaluated independently.
  • Fixed Pickable and PickableItem on Valheim 1.0.x by resolving RPC_Pick sender identity directly on the authoritative instance.
  • Prevented double multiplication of Pickable extra drops.
  • Item/mob overrides are now evaluated even when the category base multiplier is x1.
  • Added deterministic context cleanup across config/network lifecycle changes and Harmony exception finalizers so failed patched methods cannot poison the next event.
  • Build helper now defaults to C:\\ValheimServer, removes the stale machine-specific active props file, and no longer contains the accidental trailing /ini token.

2.0.2

  • Valheim 1.0.7 network compatibility: removed BoostDrop's dependency on Jotunn.Entities.CustomRPC for policy/admin traffic.
  • Personalized policy request/push now uses Valheim's native ZRoutedRpc.Register<ZPackage> and InvokeRoutedRPC directly.
  • Admin GUI request/response now also uses native ZRoutedRpc.
  • No BoostDrop network path uses ZRoutedRpc.Everybody; every packet is addressed to the concrete server/client peer UID.
  • RPC registration is bound to the current ZRoutedRpc instance and automatically re-registers after reconnect/world changes.
  • Preserved the privacy boundary: clients receive only their own resolved effective policy, never the permissions/grants YAML.
  • Preserved server-side admin validation and sender validation for policy/admin responses.
  • Fixes the runtime failure MissingFieldException: Field not found: .ZRoutedRpc.Everybody originating from Jotunn 2.29.2 CustomRPC.SendPackage on Valheim 1.0.7.

2.0.1

  • Fixed dedicated-server online player resolution. Grants/checks/policy sync now resolve connected users from ZNetPeer instead of requiring a remote Player GameObject on the server.
  • Steam/platform identity is read from the peer socket host identity used by Valheim's admin/ban lists; name-based fallback remains available.
  • Grant/Update and Revoke immediately push the recalculated personalized policy to the connected target peer.
  • Initial client policy requests no longer fail when the dedicated server has no instantiated remote Player object.
  • Client no longer compares SteamID64 policy identity against Player.GetPlayerID() (they are not the same identity domain).
  • Added verbose policy-send logging when EnableLogging=true.

Build tooling fix (2026-09-04)

  • Linux build discovers Jotunn.dll recursively under BepInEx/plugins.
  • Linux build passes the real Valheim/BepInEx/Jotunn paths to MSBuild, overriding stale Windows BuildLocal.props.
  • Project paths use cross-platform separators and include Unity UI support modules when present.

2.0.0

  • Refeito o modelo de rede para cliente + servidor com autoridade do servidor.
  • Jötunn passou a ser dependência obrigatória.
  • Config funcional usa Jötunn ConfigSync/admin-only; servidor prevalece sobre clientes comuns.
  • Removido o antigo sync do YAML completo (BoostDrop_SyncPermissions).
  • BoostDrop_permissions.yaml agora é estritamente privado do servidor.
  • Novo BoostDrop_grants.yaml, também privado do servidor, para permissões temporárias.
  • Cliente recebe somente sua própria política efetiva já resolvida, em memória.
  • RPC de política aceita dados apenas do peer real do servidor.
  • RPC de administração aceita ações apenas de peers que o servidor confirma em adminlist.txt.
  • Nova GUI admin em F8 com grant/update, revoke, check, list, reload e cleanup.
  • Novos comandos boostdrop grant/revoke/check/list/reload/cleanup/gui/me e aliases com ponto.
  • Grants temporários aceitam 30m, 12h, 7d, 2w, número puro em dias, permanent e data ISO/UTC.
  • Multiplicadores agora suportam decimais com arredondamento probabilístico da fração.
  • Nova categoria mobdrop, com override por mob e por item.
  • Mantidas mining, wood, fishing e pickable.
  • Removidos hooks genéricos de ItemDrop/pickup para impedir exploit de jogar stack no chão e multiplicar ao pegar novamente.
  • Refeito o watcher de YAML para executar reload/sync na thread principal.
  • YAML until inválido falha fechado: regra não fica ativa/permanente por erro de digitação.
  • Preservada compatibilidade com userIds, players, playerDetails, groups, categories, items e until da 1.x.
  • YamlDotNet local é usada no build quando disponível, com fallback para NuGet.

1.2.1

  • Fix crítico: servidor dedicado + PlayFab — pedras/árvores pertencem ao cliente (ZDO owner); DropTable.GetDropList corre no cliente, não no servidor. Boost passa a aplicar também no cliente remoto (Player.m_localPlayer).
  • Comandos boostdrop.check passam a escrever no LogOutput.log (além do chat).

1.2.0

  • Fix: servidor dedicado + PlayFab — resolução do jogador via HitData.m_attacker, GetConnectedPeers, nome do peer e fallback com 1 jogador online.
  • Fix: Destructible.RPC_Damage passa a propagar o sender.

1.1.0

  • Categorias mineração, lenha, pesca e colheita.
  • YAML expandido com grupos, playerDetails, itens e until.
  • Reload automático e comandos básicos.

1.0.0

  • Versão inicial: boost por jogador em mineração e lenha.

2.0.0 buildfix2

  • Fixed compilation against the stock Valheim 0.221.12 dedicated-server assemblies (non-publicized).
  • Replaced private CharacterDrop.m_character access with GetComponent<Character>() / parent lookup.
  • Replaced private ZRoutedRpc.GetServerPeerID() access with public ZNet.GetServerPeer()?.m_uid resolution.
  • Tightened nullable handling in drop/config/grant parsing paths.