Custom Lootbags
Custom Lootbags
Section titled “Custom Lootbags”This guide explains how to create your own lootbag definitions, modify existing ones, and manage them through both the admin panel and JSON files.
Overview
Section titled “Overview”The Lootbags system loads definitions from two sources, in order:
configs/lootbags.json— The standard 120 lootbag definitions (versioned, never edited manually)custom/custom_lootbags.json— Your custom definitions and overrides (never overwritten by updates)
Custom definitions are merged after standard ones. If a custom definition uses the same ID as a standard one, it overrides the standard definition entirely.
Method 1: JSON File
Section titled “Method 1: JSON File”Create or edit custom/custom_lootbags.json in the plugin data folder. The file uses a flat format where each key is the lootbag item ID.
Minimal Example
Section titled “Minimal Example”{ "MyServer_StarterPack": { "name": "Starter Pack", "rarity": "common", "items": [ { "itemId": "Food_Bread", "amount": 10 }, { "itemId": "Tool_Hatchet_Crude", "amount": 1 } ] }}Full Example (Hybrid)
Section titled “Full Example (Hybrid)”{ "MyServer_VIP_Lootbag": { "name": "VIP Lootbag", "description": "Exclusive rewards for VIP players", "icon": "Chest_Gold", "rarity": "legendary", "guaranteedItems": [ { "itemId": "Gem_Diamond", "amount": 5 }, { "itemId": "Ingot_Gold", "amount": 20 }, { "itemId": "Potion_Health", "amount": 3 }, { "itemId": "Food_Feast", "amount": 1 }, { "itemId": "Enchanted_Book", "amount": 1 } ], "pickCount": 4, "allowDuplicates": false, "pool": [ { "itemId": "Rare_Artifact", "amount": 1, "weight": 5 }, { "itemId": "Enchanted_Sword", "amount": 1, "weight": 10 }, { "itemId": "Dragon_Scale", "amount": 2, "weight": 8 }, { "itemId": "Celestial_Shard", "amount": 1, "weight": 3 }, { "itemId": "Ancient_Coin", "amount": 10, "weight": 15 }, { "itemId": "Magic_Dust", "amount": 5, "weight": 20 }, { "itemId": "Rare_Gem", "amount": 1, "weight": 12 } ] }}Definition Fields
Section titled “Definition Fields”| Field | Type | Required | Default | Description |
|---|---|---|---|---|
name | String | No | "Lootbag" | Display name shown in UI and tooltips |
description | String | No | null | Description text for tooltips |
icon | String | No | "Chest_Wood" | Item icon ID used in catalog displays |
rarity | String | No | "common" | Rarity tier (see below) |
items | LootItem[] | No | null | Fixed items (Type A — all items always given) |
guaranteedItems | LootItem[] | No | null | Guaranteed items (Type C — always given alongside pool picks) |
pool | PoolItem[] | No | null | Weighted random pool (Type B and C) |
pickCount | Integer | No | 0 | Number of items to randomly pick from the pool |
allowDuplicates | Boolean | No | false | Whether the same pool item can be picked multiple times |
Rarity Tiers
Section titled “Rarity Tiers”| Rarity | Color | Glow Color (placed blocks) |
|---|---|---|
common | Grey (#AAAAAA) | None |
uncommon | Green (#55FF55) | Green |
rare | Blue (#5555FF) | Blue |
epic | Purple (#AA00AA) | Purple |
legendary | Gold (#FFAA00) | Gold |
Three Loot Types
Section titled “Three Loot Types”Type A: Fixed Items
Section titled “Type A: Fixed Items”All items are always given. No randomness. Use the items field.
{ "Event_FixedReward": { "name": "Event Reward", "rarity": "rare", "items": [ { "itemId": "Trophy_Gold", "amount": 1 }, { "itemId": "Ingot_Gold", "amount": 50 }, { "itemId": "Gem_Diamond", "amount": 10 } ] }}Type B: Random Pool
Section titled “Type B: Random Pool”Items are randomly selected from a weighted pool. No guaranteed items. Use pool and pickCount.
{ "MysteryBox_Rare": { "name": "Mystery Box", "rarity": "rare", "pickCount": 3, "allowDuplicates": false, "pool": [ { "itemId": "Gem_Diamond", "amount": 1, "weight": 5 }, { "itemId": "Gem_Emerald", "amount": 2, "weight": 10 }, { "itemId": "Ingot_Gold", "amount": 5, "weight": 20 }, { "itemId": "Ingot_Iron", "amount": 10, "weight": 30 }, { "itemId": "Food_Cheese", "amount": 5, "weight": 35 } ] }}Weight calculation: An item’s selection probability equals its weight divided by the total weight of all remaining pool items. In the example above, Iron Ingot has a 30/100 (30%) chance of being picked first. After each pick (with allowDuplicates: false), the picked item is removed from the pool and weights are recalculated.
Type C: Hybrid
Section titled “Type C: Hybrid”Guaranteed items plus random picks from a pool. Use guaranteedItems, pool, and pickCount.
{ "Dungeon_Boss_Lootbag": { "name": "Boss Lootbag", "rarity": "epic", "guaranteedItems": [ { "itemId": "Ingot_Gold", "amount": 10 }, { "itemId": "Potion_Health", "amount": 5 } ], "pickCount": 3, "allowDuplicates": true, "pool": [ { "itemId": "Weapon_Sword_Epic", "amount": 1, "weight": 5 }, { "itemId": "Armor_Chestplate_Epic", "amount": 1, "weight": 5 }, { "itemId": "Gem_Diamond", "amount": 3, "weight": 15 }, { "itemId": "Gem_Ruby", "amount": 2, "weight": 20 }, { "itemId": "Ancient_Coin", "amount": 5, "weight": 25 }, { "itemId": "Magic_Dust", "amount": 10, "weight": 30 } ] }}With allowDuplicates: true, the same item can be picked multiple times. This is useful when the pool is small relative to pickCount.
Default Loot Scaling
Section titled “Default Loot Scaling”The 120 built-in lootbags follow a scaling pattern based on rarity:
| Rarity | Guaranteed Items | Pool Picks | Pool Size |
|---|---|---|---|
| Common | 1 | 1 | 3 |
| Uncommon | 2 | 2 | 4 |
| Rare | 3 | 3 | 5 |
| Epic | 4 | 3 | 6 |
| Legendary | 5 | 4 | 7 |
You are not required to follow this pattern for custom lootbags.
Method 2: Admin Panel Editor
Section titled “Method 2: Admin Panel Editor”Use the in-game admin panel’s Catalog tab to edit definitions visually:
- Open the admin panel:
/lbadmin panel - Go to the Catalog tab
- Click any lootbag to open the detail editor
- Edit name, picks, rarity, duplicates, and items
- Click Save to persist changes
All changes made through the editor are saved to custom/custom_lootbags.json.
See the Admin Panel page for a detailed guide on the editor interface.
Method 3: Edit Command
Section titled “Method 3: Edit Command”Use the /lbadmin edit command for quick changes without opening the panel:
# Change rarity/lbadmin edit MyServer_VIP_Lootbag rarity legendary
# Change display name (supports spaces)/lbadmin edit MyServer_VIP_Lootbag name VIP Supreme Lootbag
# Set pool pick count/lbadmin edit MyServer_VIP_Lootbag picks 4
# Toggle duplicate pool picks/lbadmin edit MyServer_VIP_Lootbag dupes true
# Add a guaranteed item/lbadmin edit MyServer_VIP_Lootbag gadd Gem_Diamond 5
# Add a pool item (with weight)/lbadmin edit MyServer_VIP_Lootbag padd Rare_Artifact 1 25
# Remove last guaranteed item/lbadmin edit MyServer_VIP_Lootbag gdel
# Remove last pool item/lbadmin edit MyServer_VIP_Lootbag pdelAll changes are auto-saved to custom/custom_lootbags.json.
Overriding Standard Definitions
Section titled “Overriding Standard Definitions”To modify a built-in lootbag, use its exact ID. For example, to change the Default common lootbag:
{ "Default_Lootbag": { "name": "Starter Lootbag", "rarity": "common", "guaranteedItems": [ { "itemId": "Food_Bread", "amount": 10 }, { "itemId": "Tool_Pickaxe_Crude", "amount": 1 } ], "pickCount": 2, "pool": [ { "itemId": "Potion_Health_Lesser", "amount": 2, "weight": 20 }, { "itemId": "Tool_Hatchet_Crude", "amount": 1, "weight": 15 }, { "itemId": "Food_Cheese", "amount": 3, "weight": 25 } ] }}The custom definition completely replaces the standard one with the same ID.
Adding Drops for Custom Lootbags
Section titled “Adding Drops for Custom Lootbags”After creating a custom lootbag, add it to the drop tables so it drops from mobs or blocks:
Via JSON
Section titled “Via JSON”Edit configs/drop_tables.json:
{ "mobDrops": { "Boss_*": [ { "lootbagId": "Dungeon_Boss_Lootbag", "chance": 0.25 } ] }}Via Admin Panel
Section titled “Via Admin Panel”- Open
/lbadmin paneland go to the Drops tab - Select Mob or Block type
- Enter the pattern, your custom lootbag ID, and the chance percentage
- Click Add
Localization
Section titled “Localization”Custom lootbag names and descriptions can be localized by adding keys to your language files in localization/:
| Key Pattern | Value |
|---|---|
lootbag.name.<id> | Localized display name |
lootbag.desc.<id> | Localized description |
{ "lootbag.name.MyServer_VIP_Lootbag": "VIP Lootbag", "lootbag.desc.MyServer_VIP_Lootbag": "Exclusive rewards for VIP players"}If no localization key exists, the name and description fields from the JSON definition are used as fallback.
Reload After Changes
Section titled “Reload After Changes”After editing JSON files on disk, reload without restarting:
/lbadmin reloadThis reloads all lootbag definitions (standard + custom), drop tables, and localization files. Changes made through the admin panel or edit command are auto-saved and do not require a manual reload.