Skip to main content

Creating Treasure Chests

webapp_banner.jpg

Treasure Chests let admins make chests that either drop loot or spawn a mimic (hostile) boss. Put their configuration files in plugins/EliteMobs/customtreasurechests.

Values​

isEnabled​

Sets if a treasure chest is enabled.

KeyValuesDefault
isEnabledBooleantrue

A file without this key loads as enabled. Disabled chests are skipped entirely: they are not placed in the world, and they are not offered to (or accepted by) /em place treasureChest.

Example
isEnabled: true

chestType​

Sets the block material. Use a directional container such as CHEST or BARREL; this setting does not populate a normal container inventory. Loot comes from lootList when the player interacts.

KeyValuesDefault
chestTypeMaterialCHEST
Example
chestType: CHEST

This needs to be a valid chest material such as CHEST or BARREL.

create_chest_material.jpg


facing​

Sets the facing direction of the chest.

KeyValuesDefault
facingSpecial [1]NORTH
Example
facing: NORTH

This sets the direction the chest faces. Valid values are NORTH, SOUTH, EAST, or WEST.

Special [1]

Expand Table
Facing
NORTH
SOUTH
WEST
EAST

dropStyle​

Sets if the chest is meant to be dropped for one player or multiple players.

SINGLE chests are consumed by the first player who interacts with them: the block is replaced with air, a restock deadline is written, and the block reappears once restockTimer minutes have passed and its chunk is loaded. There is no per-player tracking, so whoever gets there first takes the whole chest. Both left-click and right-click interactions can trigger treasure chests.

GROUP chests are never removed from the world. Instead each player who opens one is put on their own cooldown. Outside instances, all placements from the same configuration file share that player's cooldown through restockTimers. Use separate files if those placements should be independently lootable. In an instance, each runtime chest keeps its own player blacklist.

Both styles award personal loot to the interacting player. GROUP does not start a party loot vote or give loot to every nearby player. Interactions already cancelled by another plugin are ignored, and normal block breaking is blocked. There is no guild-rank requirement to open a chest.

KeyValuesDefault
dropStyleSINGLE / GROUPSINGLE
Example
dropStyle: SINGLE

lootList​

Lists the loot that the treasure chest should drop when opened.

Each eligible entry rolls independently, so one opening can award several entries. Entry permissions, amounts and applicable dungeon-difficulty filters still apply. putLootDirectlyIntoPlayerInventory in ItemSettings.yml chooses inventory delivery or drops at the chest; elite-item inventory overflow drops at the player with that player's ownership.

KeyValuesDefault
lootListEM Loot Tablenone
Example
lootList:
- filename=elite_scrap_tiny.yml:chance=0.90
- filename=magmaguys_toothpick.yml:chance=1.0

If no entry successfully delivers a reward, the player receives treasureChestNoDropMessage from config.yml. This includes failed chance rolls and entries that cannot produce a reward. The cooldown is still consumed.


mimicChance​

Sets the chance of spawning a hostile boss instead of dropping loot.

KeyValuesDefault
mimicChanceDouble0

For each eligible interaction, the mimic roll happens before loot generation. A successful roll attempts a mimic instead of the loot; it does not award both. Use a value from 0 to 1, where 0.5 means 50%. The cooldown is consumed even if the selected boss is missing or fails to spawn.

Example
mimicChance: 0.5

mimicCustomBossesList​

Specifies the list of hostile bosses available for spawning. A single boss will be randomly selected from this list for spawning.

The list also supports a weight system that you can implement to ensure some bosses are picked more often that the others.

KeyValuesDefault
mimicCustomBossesListString Listnone
Example
mimicCustomBossesList:
- my_cool_mimic_boss.yml
- weak_mimic_boss.yml

If you wish to assign weights to the bosses, the list should be formatted as follows:

mimicCustomBossesList:
- my_cool_mimic_boss.yml:60
- weak_mimic_boss.yml:40

In this configuration, my_cool_mimic_boss.yml is more likely to be chosen for spawning than weak_mimic_boss.yml.

An entry with no weight suffix, and an entry whose weight cannot be read as a number, both fall back to a weight of 1.

Use distinct boss filenames and finite, positive weights. Repeating a filename replaces its earlier weight rather than adding another entry. The selector does not validate negative or non-finite weights. Ensure the selected bosses are enabled and can spawn.

What level does the mimic spawn at?

The boss file selects the level calculation; fixed numeric boss levels are replaced by the chest-tier calculation:

Mimic boss's levelLevel it spawns at
A fixed numberchestTier × 10, plus a random 0-10
dynamic (-1) inside a dynamic dungeonThe dungeon's selected level, ±1
dynamic (-1) anywhere elseThe opening player's natural spawn level, ±1

If the boss file named in the list cannot be found, no mimic spawns and a warning is logged — the player gets nothing, not the loot.

The ±1 calculations have a minimum result of level 1. If the opening player's inventory data is unavailable outside a dynamic dungeon, the dynamic mimic falls back to the boss's normal spawn path. Mimics created in a dungeon belong to that encounter.


restockTimer​

Sets the time, in minutes, before the chest refills with loot.

KeyValuesDefault
restockTimerInteger0

Outside instances, SINGLE uses this delay before restoring the block in a loaded chunk, and GROUP uses it for each player's cooldown. These deadlines survive restarts. See instanced below for instance-specific behavior.

Leaving this at the default of 0 means there is effectively no cooldown at all, so the chest can be farmed repeatedly. Set a real value on any chest that drops something worth having.

Example
restockTimer: 30

effects​

Note: This setting currently does nothing. The configuration loader reads it, but no treasure-chest behavior consumes the parsed value. It does not spawn particles.

If you want particles around a chest, spawn them from another source for now.

KeyValuesDefault
effectsString Listnone

locations​

Sets the locations where the treasure chest will spawn.

Add locations with /em place treasureChest <treasurechestfilename.yml> while standing at the desired block. The command requires a player with elitemobs.place.admin and a loaded, enabled chest configuration. It saves the block coordinates in the file and places the chest right away. Running it on a block that is already listed resets that placement's restock deadline instead of adding a second entry.

KeyValuesDefault
locationsString Listnone

Each entry uses the format worldName,x,y,z,yaw,pitch. The shorter worldName,x,y,z form is also accepted, in which case yaw and pitch are treated as 0.

Entries may carry a :unixTimestamp suffix, storing that placement's restock deadline in Unix seconds. EliteMobs writes it when a SINGLE chest is looted. Stop the server before removing a deadline manually; the change takes effect on loading the configuration and does not reset an already-running chest.

One file can hold multiple locations. SINGLE placements have independent restock deadlines; non-instanced GROUP placements share the file's per-player cooldown list.

Fractional coordinates are rounded down to the block they fall in. Do not combine legacy location with locations: the loader prefers location, even though restock saving uses a nonempty locations list. Removing a chest with /em remove deletes only the clicked placement from the file and leaves the other placements in place.

Example
locations:
- my_world,10,50,10,0,0
- my_nether_world,12,58,12,0,0
- my_world,80,64,-30,0,0:1707394380

chestTier​

Sets the tier of the chest, which is the baseline for the level of the loot it drops. The baseline level is chestTier * 10.

KeyValuesDefault
chestTierInteger0

How much chestTier actually matters depends on where the chest is and what kind of item is in the loot table:

SituationLevel the loot drops at
Chest opened outside any instancescalable elite items follow the opening player's natural spawn level, ±1. Everything else uses chestTier * 10.
Chest inside a dynamic dungeonThe dungeon's selected level is used for everything, with scalable elite items getting ±1. chestTier is ignored.
Chest inside any other instancechestTier * 10 for everything.

These are the levels passed to item generation. fixed items still retain their authored stats, and limited items still obey their configured cap; the chest does not override those scalability rules. On a normal survival world, scalable items track the player who opened the chest. Mimics use a different formula — see mimicCustomBossesList.

The ±1 loot calculations have a minimum result of level 1. If player inventory data is unavailable outside an instance, loot falls back to chestTier * 10.

Leaving this at the default of 0 gives a baseline loot level of 0.

Example
chestTier: 3

instanced​

Sets if the chest should be instanced (for use in instanced dungeons). For an instanced chest, normal timed restocking is not scheduled after looting: SINGLE removes the block, and GROUP lets each player loot that runtime chest once. Concurrent instances have separate runtime chest state.

There is a SINGLE limitation: unloading and reloading its chunk schedules restocking again, using the runtime restock deadline. It can therefore reappear in the same instance after that deadline. Use GROUP when you need the in-memory once-per-player restriction throughout the instance.

DO NOT SET THIS VALUE MANUALLY.

KeyValuesDefault
instancedBooleanfalse
Example
instanced: true

restockTime​

After a chest has been looted, the plugin will write this key to track restock time.

This is only used by the legacy single-chest format, where the chest's position lives in a location key instead of the locations list. As soon as a file has any locations entries, the restock time is written as a :unixTimestamp suffix on the matching locations entry instead and this key is left alone.

DO NOT SET THIS VALUE MANUALLY.

KeyValuesDefault
restockTimeUnix timestamp in seconds0
Example
restockTime: 1707394380

restockTimers​

Stores per-player cooldown data for GROUP mode chests. The plugin writes this automatically when a player loots the chest, and drops expired entries each time it writes. The cooldown is saved before any loot is handed out; if that save fails, the player is told to try again later and gets nothing.

Instanced chests do not use this list — inside an instance the per-player cooldown is kept in memory for the lifetime of that instance only.

DO NOT SET THIS VALUE MANUALLY.

KeyValuesDefault
restockTimersString Listnone
Example
restockTimers:
- '12345678-abcd-4ef0-8123-123456789012:1707394380'
- '09876543-abcd-4ef0-8123-098765432109:1707395000'

Each entry contains a player UUID and Unix timestamp in seconds separated by a colon.


Treasure Chest Config Example
isEnabled: true
chestType: CHEST
facing: NORTH
chestTier: 3
dropStyle: GROUP
lootList:
- filename=elite_scrap_tiny.yml:chance=0.90
- filename=magmaguys_toothpick.yml:chance=0.95
mimicChance: 0.50
mimicCustomBossesList:
- balrog.yml
- killer_rabbit_of_caerbannog.yml
restockTimer: 1
locations:
- world,0.0,-60.0,-14.0,0.0,0.0

Note that every loot entry above uses the filename= prefix. Writing magmaguys_toothpick.yml:chance=0.95 instead would be read as the legacy filename.yml:chance format, and chance=0.95 is not a number, so the entry would log a parse warning on every startup.

create_chest_chest.jpg