Per-player loot for naturally-generated chests, barrels, shulker boxes, and minecarts — server-side only, no client install required.
Every player who opens a naturally-generated container gets their own personal copy of the loot. Open a mineshaft chest and get your roll; your friend opens that same chest and gets a separate roll of their own. No more racing to dungeons, and nobody arrives to find an empty chest after someone else already cleared it out.
Containers you place yourself are never touched — chests, barrels, and shulker boxes you build behave exactly like vanilla.
Fabric, NeoForge, and Forge 1.20.1.
SlashLoot runs entirely on the server. Players connect with plain vanilla Fabric or NeoForge: they don't install the mod, and they don't have to update when you do. SlashLoot never replaces the block or its block-state, so the container always stays a real minecraft:chest (or barrel, shulker, minecart, etc.). Datapack predicates, /data queries, scoreboard selectors, and structure saves keep seeing ordinary vanilla blocks.
/slashloot forget here|at|player to wipe personal loot when needed.mods/ folder.That's it. Clients connect with an unmodified game — nothing to install on their end.
25 JARs — 13 Fabric, 11 NeoForge, 1 Forge — pick the one that matches your server's Minecraft version and loader.
Forge is 1.20.1 only. The same Forge file also runs on NeoForge 1.20.1, so 1.20.1 NeoForge servers use it too. It needs nothing beyond the loader.
NeoForge coverage differs slightly: no 1.20.5 line of its own, and no stable 21.6 / 21.7 / 21.9 builds, so MC 1.21.6-1.21.8 and 1.21.9-1.21.10 are covered by the 21.8 and 21.10 builds. The 26.1.2, 26.2 and 26.3 bands ship for both loaders. The 26.3 NeoForge build is published as beta because NeoForge 26.3 itself has no stable release yet.
| Minecraft | Fabric API |
|---|---|
| 1.20.1 | 0.92.2+1.20.1 |
| 1.20.5 | 0.97.8+1.20.5 |
| 1.21 | 0.102.0+1.21 |
| 1.21.1 | 0.115.6+1.21.1 |
| 1.21.2 | 0.106.1+1.21.2 |
| 1.21.4 | 0.114.0+1.21.4 |
| 1.21.5 | 0.127.1+1.21.5 |
| 1.21.6 | 0.128.1+1.21.6 |
| 1.21.9 | 0.134.1+1.21.9 |
| 1.21.11 | 0.141.2+1.21.11 |
| 26.1.2 | 0.146.1+26.1.2 |
| 26.2 | 0.158.0+26.2 |
| 26.3 | 0.161.0+26.3 |
A config/slashloot.json file is created on first launch:
{
"enabled": true,
"dimensionBlocklist": [],
"lootTableBlocklist": [],
"handleUnknownContainers": false,
"delegateContainerAnimation": true,
"playOpenCloseSounds": true,
"cleanupOnBreak": true,
"pruneIntervalTicks": 6000,
"pruneBatchSize": 256,
"debugLogging": false
}
enabled — master switch. false makes SlashLoot inert; every container behaves like vanilla.dimensionBlocklist — dimensions (e.g. "minecraft:the_nether") served as ordinary shared vanilla loot.lootTableBlocklist — loot tables (e.g. "minecraft:chests/buried_treasure") to skip. Useful for adventure maps with intentionally shared loot.handleUnknownContainers — instance modded containers SlashLoot doesn't specifically recognise. Off by default. Cobblemon's real Gilded Chests are recognized regardless of this setting.delegateContainerAnimation — forward open/close to the real container so lids animate, barrels open, and trapped chests emit redstone.playOpenCloseSounds — manual open sound, used only when delegateContainerAnimation is false.cleanupOnBreak — drop a container's stored loot when it's destroyed.pruneIntervalTicks / pruneBatchSize — background sweep that reclaims entries for containers that no longer exist. 0 disables it.debugLogging — log one line per container with its position, loot table, and SlashLoot's verdict.Missing keys take their defaults. /slashloot reload re-reads the file without a restart.
All require permission level 2 (op).
| Command | Effect |
|---|---|
/slashloot forget here |
Wipe every player's personal loot at the block you're looking at |
/slashloot forget at <x> <y> <z> |
Same, by coordinate |
/slashloot forget player <player> |
Wipe a player's personal loot at every container in the current dim |
/slashloot forget all |
Wipe every stored container in the current dimension |
/slashloot prune |
Drop stored entries whose container no longer exists |
/slashloot stats |
Stored entry counts for the current dimension |
/slashloot reload |
Re-read config/slashloot.json |