Configuration
Every Prosperity setting, organized by section. Tune values in-game with Mod Menu, edit them by hand, or reload them live without a restart.
File Location & Reload
With Mod Menu and Cloth Config installed, every setting is editable from an in-game screen (Mods → Prosperity → Configure), with labels and tooltips per key. Saving writes the file and applies the change live; distance tiers, structure overrides, and the blacklist are edited as one row per entry. Both mods are optional — without them, edit the file directly.
When you are connected to a remote server, the server-authoritative settings are shown read-only with the server's own live values (the config it syncs on join), since only the server operator can change them — via the server's config file plus /prosperity reload. The client-only HUD settings stay editable and save to your local file as usual. In singleplayer, as a LAN host, or from the main menu, every setting is editable.
The config file is auto-generated with defaults on first launch at:
.minecraft/config/prosperity.json
Server operators can apply changes without a restart with:
/prosperity reload
Reloading re-reads the config from disk and syncs updated values to all connected clients.
distanceTiers
Distance thresholds, quantity multipliers, and quality boosts for the five loot tiers. Each tier is one object in the distanceTiers list; the whole system is gated by enableDistanceScaling.
Set enableDistanceScaling (bool, default true) to false to disable container distance scaling entirely — every container then rolls at the base table with no tier multiplier or quality boost. The defaults below match the five built-in tiers:
| Tier | Min Distance | Quantity | Quality |
|---|---|---|---|
local | 0 | 1.0 | 0 |
frontier | 1000 | 1.5 | 1 |
wilderness | 3000 | 2.0 | 2 |
outlands | 6000 | 2.75 | 3 |
depths | 10000 | 3.5 | 4 |
Tier names match those used by loot injection (min_tier) and structure overrides.
| Key | Type | Description |
|---|---|---|
name | string | Lowercase tier id, referenced by structure overrides and loot injection min_tier. |
minDistance | int | Inclusive lower bound, in blocks from world origin. The highest tier whose bound you have passed applies. |
stackMultiplier | double | Multiplier on each stackable item's count after the table resolves (floored, capped at the item's max stack size). |
qualityModifier | int | Added to your effective luck before loot resolves, biasing rolls toward better entries. |
Distance is measured from world origin (0, 0). The Nether uses raw coordinates and the End is always the maximum tier (endAlwaysMaxTier, default true), matching mob loot scaling. You can add, remove, or re-band tiers freely — resolution always picks the highest minDistance you have reached, falling back to a built-in local tier if the list is empty.
structureOverrides
Per-structure tier overrides, applied after the base distance tier is resolved for a container generated inside the named structure.
| Key | Type | Description |
|---|---|---|
structure | string | Structure id the container generated in (e.g. minecraft:monument). |
mode | enum | fixed replaces the distance tier, minimum raises it to at least tier, maximum caps it at tier. |
tier | string | The distanceTiers name this override refers to. |
The built-in defaults:
| Structure | Mode | Tier |
|---|---|---|
minecraft:monument | fixed | wilderness |
minecraft:stronghold | minimum | outlands |
minecraft:ancient_city | minimum | outlands |
minecraft:trail_ruins | minimum | frontier |
minecraft:trial_chambers | minimum | wilderness |
minecraft:village_* | maximum | frontier |
Each of the five vanilla village variants (plains, desert, savanna, snowy, taiga) ships its own maximum-frontier override.
Structures without an override scale purely by distance. An override referencing an unknown structure or tier is ignored, so a stale entry never breaks loot generation.
Structure Completion Bonus
A one-time, per-player bonus reward for fully looting a structure.
| Key | Type | Default | Description |
|---|---|---|---|
enableStructureCompletionBonus | bool | true | Grant one extra injected reward, once per structure instance per player, for looting every instanced container in a multi-container structure. |
When a player generates loot for the last remaining instanced container inside a structure, that container receives one extra reward drawn from the loot injection pool at the container's tier, plus an action-bar fanfare (honoring enableLootNotifications). Completions are tracked server-side per player and per structure instance, so loot refresh never re-arms the bonus. Single-container structures and blacklisted containers never qualify, and container minecarts are not counted. The bonus draws from the injection pool but is independent of enableLootInjection. The shipped injection defaults gate at Frontier and above, so with enableDistanceScaling off (every generation is Local-tier) a completion pays the fanfare only — add a min_tier: "local" injection entry via datapack to change that.
Mob Loot Scaling
Apply the distance tiers to hostile-mob drops on player kills.
| Key | Type | Default | Description |
|---|---|---|---|
enableMobLootScaling | bool | true | Scale hostile-mob drops by the killer's distance tier. |
When you land the killing blow on a hostile mob, its drops are scaled by the same distance tier used for containers — stack counts multiplied (capped at the item's max stack) and the tier's quality added to the loot luck. Passive mobs and environmental or non-player kills are never scaled. The Nether uses raw coordinates and the End is always the max tier, matching container scaling. This toggle is independent of distanceTiers scaling for containers.
Fishing Loot Scaling
Apply the distance tiers to fishing catches.
| Key | Type | Default | Description |
|---|---|---|---|
enableFishingLootScaling | bool | true | Scale fishing catches by the bobber's distance tier. |
When you reel in a catch, the fishing roll is scaled by the distance tier at the bobber's position — the tier's quality is added to the roll's luck, biasing toward the treasure category, and stackable catches get the tier's stack multiplier (capped at the item's max stack; enchanted books and other non-stackables are never multiplied). Luck of the Sea still works and stacks on top. The Nether uses raw coordinates and the End is always the max tier, matching container scaling. This toggle is independent of the container and mob toggles; off, fishing is exactly vanilla.
Trial Chamber Scaling
Apply the distance tiers to trial chamber vault loot and trial spawner rewards.
| Key | Type | Default | Description |
|---|---|---|---|
enableTrialChamberScaling | bool | true | Scale trial chamber vault loot and trial spawner rewards by the chamber's distance tier. |
Vault rewards (normal and ominous) and trial spawner ejections are scaled by the chamber's distance tier — stack counts multiplied (capped at the item's max stack) and the tier's quality added to the loot luck — with the shipped minecraft:trial_chambers structure override raising chambers to at least the Wilderness tier. Scaling only: vanilla's per-player vault gating and key consumption are untouched. Requires enableDistanceScaling; with either toggle off, trial chamber loot is exactly vanilla.
lootTableBlacklist
Opt-in list of loot tables exempt from all Prosperity behavior. Empty by default — every loot container is instanced.
Entries are loot-table ids, matched exactly (minecraft:chests/village/village_weaponsmith) or by trailing-* wildcard (somebigmod:* for a whole namespace, minecraft:chests/* for a subtree). Blacklisted containers fall back to vanilla loot behavior — distance scaling, injection, instancing, and the unlooted indicator do not apply.
lootTableStructures
Map of loot-table id to structure id for the recipe-viewer loot index. Empty by default — vanilla chest tables are already mapped to their structure.
The loot index groups each loot table under a structure (Dungeon, Stronghold, Ocean Monument, …). Vanilla tables are mapped automatically; tables Prosperity does not recognize — modded structures, or datapack tables — appear under Other. Add an entry here (e.g. somemod:chests/sky_temple → somemod:sky_temple) to file them under the right structure instead. Affects only how rows are grouped in the loot index, not loot generation.
Indicators & Notifications
The unlooted-container sparkle overlay and the first-open loot-tier action-bar message.
| Key | Type | Default | Description |
|---|---|---|---|
enableVisualIndicators | bool | true | Server master switch for the unlooted sparkle overlay. Off here, no client shows indicators. |
indicatorRenderDistance | int | 48 | How far, in blocks, the sparkle renders (clamped 0–512). |
indicatorXrayDistance | int | 8 | Within this range the overlay shows through walls; beyond it the sparkle is occluded by geometry (clamped 0–512). |
enableLootNotifications | bool | true | Flash a one-line action-bar message naming the loot tier and active modifiers when you first open a container, and send the one-time first-open chat line to a player's very first instanced container. |
The sparkle marks containers you have not yet opened, rendered client-side via WorldRenderEvents.LAST so it composes with Sodium, Enhanced Block Entities, and shader packs without touching block models. Each player also has a client-side showIndicators toggle (see below) to hide the overlay locally even when the server enables it. The action-bar notification reads like ✦ Wilderness — 2.0x stacks, +2 quality, with the structure appended when an override changed the tier. The same toggle also gates a one-time chat line — This loot was rolled just for you — other players get their own. — sent once per player, on the very first instanced container they ever open, so newcomers learn that instanced loot is theirs alone.
| Client Key | Type | Default | Description |
|---|---|---|---|
showIndicators | bool | true | Per-client toggle to hide the sparkle overlay locally. Lives in the client block and is never synced. |
Tier HUD Badge
Client-side badge showing your current distance loot tier. These keys live in the client block of prosperity.json and are never synced.
| Key | Type | Default | Description |
|---|---|---|---|
enableTierHud | bool | true | Show the tier HUD badge. |
hudAnchor | enum | TOP_LEFT | Screen corner: TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT. |
hudOffsetX | int | 4 | Horizontal inset from the anchored corner, in pixels. |
hudOffsetY | int | 4 | Vertical inset from the anchored corner, in pixels. |
The badge shows a treasure-chest glyph and your current tier name, the name drawn in the tier's color; crossing a tier boundary briefly flashes the label gold. The tier is read from your position each frame using the server's synced tier boundaries (the Nether uses raw coordinates and the End is always the max tier, matching loot scaling). It is hidden while the GUI is hidden (F1), a screen is open, or you are spectating or dead. Prosperity holds slot 3 in the shared rfizzle HUD strip, so it stacks below Tribulation and Mercantile when those are installed.
Loot Refresh
Optional per-player restocking so explored containers regenerate after a cooldown.
| Key | Type | Default | Description |
|---|---|---|---|
enableLootRefresh | bool | false | Let a player's instanced loot regenerate after a cooldown. |
lootRefreshDays | int | 7 | In-game days before a player's loot refreshes (minimum 1). |
randomizeLootOnRefresh | bool | false | Re-roll fresh loot on each refresh instead of repeating the same items. |
Each player's cooldown is independent and measured from when they last generated that container's loot. Once it elapses, the unlooted sparkle reappears for that player and their next open rolls fresh loot from the original table at the current distance tier. The cooldown is checked lazily on interaction and on the indicator scan, so there is no per-tick cost. The generation time is recorded even while refresh is disabled, so enabling it later applies retroactively to already-looted containers.
By default a refresh re-rolls the same items, since the roll seed depends only on the container's preserved seed and your UUID. Enable randomizeLootOnRefresh to fold each player's refresh count into the seed, so every refresh draws different loot while staying reproducible across a server restart.
Absent-Player Data Eviction
Optional housekeeping that reclaims stored container data from players who stopped playing.
| Key | Type | Default | Description |
|---|---|---|---|
evictAbsentPlayerData | bool | false | Drop a player's per-container data once they have been offline past the threshold. |
absentPlayerEvictionDays | int | 60 | In-game days a player must be gone before their entries are evicted (minimum 1). |
Every player who opens an instanced container leaves small permanent entries on it — a visited marker and a refresh counter — even after looting it clean. On a long-running public server those accumulate one per historical visitor, forever. With eviction enabled, a container drops all of a player's entries (stored loot included) the next time it is touched, if that player has not logged in for the configured number of in-game days. Absence is tracked by a self-owned ledger updated on join and disconnect. The ledger is always maintained — history starts accruing when the server first runs a Prosperity version that ships it, even while the toggle is off — so a player with no login since then becomes evictable one full threshold after that first run (which may be immediately, if you enable the toggle later). Nothing ever scans the world, and an online player is never evicted.
The trade-off is deliberate and mirrors loot refresh: an evicted player who does return forfeits any loot they left uncollected, and their containers regenerate from scratch on the next open. Leave this off (the default) if that guarantee matters more than the bounded save size.
Container Protection
Optional anti-grief break resistance for instanced loot containers.
| Key | Type | Default | Description |
|---|---|---|---|
enableContainerProtection | bool | false | Slow down breaking of loot containers that still hold unclaimed loot. |
protectionBreakMultiplier | float | 4.0 | How many times longer a protected container takes to break (clamped 1.0–100.0). |
protectionUnbreakable | bool | false | Make protected containers fully unbreakable in survival (and immune to explosions) instead of merely slower. |
A protected container takes protectionBreakMultiplier× longer to break and shows an action-bar warning with particles and a quiet cue when breaking starts, so its instanced loot cannot be quickly erased. Any managed loot container with unclaimed loot is protected, including a fresh, never-opened chest. With protectionUnbreakable the container is fully unbreakable in survival (like bedrock) and immune to explosions (TNT, creepers) until its loot is claimed, rather than just slow. Either way creative-mode players break instantly, protection lifts once every online player has opened the container — unless loot refresh is enabled, where the container's loot keeps returning so it stays protected for good — and player-placed chests are never affected.
Party Loot Mode
Let players on the same scoreboard team share one loot instance per container instead of each getting their own.
| Key | Type | Default | Description |
|---|---|---|---|
partyLootMode | bool | false | Players on the same vanilla scoreboard team share one loot instance per container. |
teamLeaveGraceMinutes | int | 0 | Minutes a player who left a team keeps generating new instances against the former team's key (0 = off). |
With partyLootMode on, teammates share a single pot per container: the first member to open it rolls the loot (with their luck and position), and everyone else sees that same inventory — what one takes is gone for the rest, and the container refreshes on one shared cooldown. This is the vanilla moment of a party crowding around one chest, kept for public servers where strangers still cannot strip a dungeon before your group arrives. Players with no team keep their own individual loot.
Leaving or joining a team only affects containers you open afterward — it never rewrites existing ones. A container you opened with your team keeps serving you that shared instance even after you leave, so you cannot leave, re-open the same chest for a fresh roll, and rejoin. teamLeaveGraceMinutes extends that deterrent to new chests for a few minutes after leaving. Two teammates cannot have the same shared chest open at once — the second is politely told a teammate is looting it. A party or social mod can supply the grouping in place of scoreboard teams through Prosperity's API — with Open Parties and Claims or FTB Teams installed, party loot mode follows each player's party automatically, so players manage their own groups without /team permissions. FTB Teams grouping applies to actual party teams — a solo player in their own auto-created team keeps individual loot.