Skip to main content

Custom Loot Table

Universal loot format. Used by EliteMobs in several different locations.

Please note that this is the latest format and the one that is recommended to use, but some alternative older formats exist.

Note: Legacy format support is still available using the colon-separated syntax: filename.yml:chance:permission. However, the modern format shown below is recommended for new configurations.

In that legacy syntax the chance is mandatory. Writing a bare filename.yml with nothing after it still drops the item at 100%, but it logs a Failed to parse entry ... due to invalid: chance warning on every startup, so prefer filename.yml:1.0 or the modern format.

Make sure to start your loot tables with uniqueLootList: before adding any settings otherwise the .yml config will error.

Not every entry type works from every loot table

The four entry types are parsed everywhere, but they are not delivered everywhere. On Custom Boss loot (uniqueLootList) specifically:

Entry typeputLootDirectlyIntoPlayerInventory: false (default)putLootDirectlyIntoPlayerInventory: true
Elite item (filename)DropsDrops
Vanilla item (material / type)DropsNothing happens
Elite coins (currencyAmount)Nothing happensNothing happens
Command (command=)Nothing happensNothing happens

Boss loot goes through a boss-aware delivery path so the drop can be attributed to the elite that produced it, and only the elite item entry (plus the vanilla entry, when loot is dropped on the ground) implements it. Currency and command entries are silently skipped — no warning is printed.

Treasure chests, quest rewards and arena rewards use the plain delivery path and handle all four entry types normally. If you want a boss to hand out coins or run a command, use the boss's onDeathCommands instead.

Dropping elite items:

KeyDetailsValuesDefault
filenameSets the file name of the Custom Item to use.Filenamenone
Example
uniqueLootList:
- filename: magmaguys_toothpick.yml

This will make the mob drop 1 of MagmaGuy's Toothpick with a 100% drop chance.

General settings:

KeyDetailsValuesDefault
chanceSets the chance of the loot dropping, where 1.0 is 100%.Double1.0
amountSets the amount of this loot entry to drop. Ignored by currency entries — use currencyAmount for those.Integer1
permissionSets the permission node required for players to receive this loot. Supported by elite item, currency and command entries. Vanilla item entries never read it, in either format.Stringnone
Example
uniqueLootList:
- filename: magmaguys_toothpick.yml
chance: 0.5
amount: 10
permission: elitemobs.loot.rare

This will make the mob drop 10 of MagmaGuy's Toothpick with a 50% drop chance, but only for players with the elitemobs.loot.rare permission.

Dropping elite coins:

KeyDetailsValuesDefault
currencyAmountSets the amount of coins that will be dropped.Integernone

Note that the shared amount key does nothing for currency entries — the coin payout comes from currencyAmount alone. In the colon-separated string format only, an entry that ends up with a currencyAmount of 0 is rejected with a warning instead of being registered.

Example
uniqueLootList:
- currencyAmount: 344
chance: 0.5

This will make the mob drop 344 Elite Coins with a 50% drop chance.

Dropping vanilla items:

KeyDetailsValuesDefault
materialSets the material of the item dropped. Accepts Minecraft material names (case-insensitive). You can also use type instead of material.Materialnone
Example
uniqueLootList:
- material: APPLE
chance: 0.3
amount: 5

This will make the mob drop 5 Apples with a 30% drop chance.

Executing commands on loot drop:

You can execute console commands when loot drops. This is useful for integrating with other plugins or providing custom rewards. Command entries use the colon-separated string format only.

KeyDetailsValuesDefault
commandSets the console command to execute. Use %player% as a placeholder for the player's name.Stringnone

The command itself must not contain a : or a second =, because the entry is split on both of those characters when it is parsed.

How chance behaves for commands

Command entries roll chance twice, and the second roll is inverted, so the command actually runs chance × (1 - chance) of the time:

  • chance=1.0 (the default when you omit it) means the command never runs at all.
  • chance=0.5 gives the highest achievable rate, 25%.
  • chance=0.9 gives 9%.

Always set an explicit chance below 1.0 on command entries, and expect the real firing rate to be lower than the number you wrote.

Example
uniqueLootList:
- command=give %player% diamond 1:chance=0.5:amount=1:permission=elitemobs.loot.command

This will execute the command give <player> diamond 1 from the console when the mob is killed, roughly 25% of the time (see the warning above). The %player% placeholder will be replaced with the actual player's name. Only players with the elitemobs.loot.command permission will trigger this command.

Arena rewards:

When making arena loot tables, please make sure that you start your loot table with rawArenaReward: instead of uniqueLootList:.

KeyDetailsValuesDefault
waveSets the wave at which this loot entry will drop. Only for use in arenas. Supported in the map format for vanilla item entries, but only in the string format for elite item (filename) entries.Integer-1
itemLevelSets the level of the loot drop. Only for use in arenas, and only read for elite item (filename) entries. Only available in the string format, not the map format.Integer1
Both of these have traps
  • Only entries with a wave of 1 or higher are ever registered as wave rewards. An arena reward entry with no wave is parsed and accepted, but no wave will ever hand it out.
  • itemLevel defaults to 1, not to the arena or player level. A scalable elite item awarded by an arena without an explicit itemLevel therefore drops as a level 1 item.
Example
rawArenaReward:
- material: BREAD
wave: 1
amount: 10
chance: 0.5
- filename=magmaguys_toothpick.yml:wave=1:itemLevel=2

When the players beat the first wave then this will make the arena drop 10 Bread with a 50% drop chance and 1 MagmaGuy's Toothpick that is level 2 with a 100% drop chance.

Note that the elite item (filename) entry uses the string format here, because wave and itemLevel are only parsed for elite item entries in the string format. Vanilla item entries (like the material: BREAD one above) accept wave in the map format.

Instanced Dungeons:

KeyDetailsValuesDefault
difficultyIDSets the instanced dungeon difficulty this loot will drop for. Only for use in instanced dungeons.Stringnone

difficultyID is only read for elite item (filename) entries written in the map format shown below. It is not parsed in the colon-separated string format, and it is not read for vanilla, currency or command entries.

It also only takes effect on Custom Boss loot. Treasure chest, quest and arena loot never evaluate it.

Inside an instanced dungeon the entry behaves as follows:

  • Dungeon difficulty matches the difficultyID: the item goes into the boss's shared group loot table rather than being handed straight to one player. The boss's eligible combat contributors can claim from it; players who are already locked out from that boss are removed before the vote.
  • Dungeon difficulty does not match: the entry is skipped.
  • The player is not in an instanced dungeon at all: the difficultyID is ignored. The item uses party Need / Greed when at least two eligible party members are nearby, or follows the normal personal delivery path otherwise.
Example
uniqueLootList:
- filename: magmaguys_toothpick.yml
chance: 0.5
difficultyID: 1

This will make the mob drop 1 MagmaGuy's Toothpick with a 50% drop chance if the players defeated the boss on difficulty 1.