Random Drops Challenge
Wood does not give planks. Iron ore does not give iron. Nothing gives what it should.
A Fabric mod for Minecraft 26.2 that reassigns what every block and every mob in the game drops. Each one is given a single, fixed, randomly chosen item — the same one, forever, for that world. Stone might drop white wool. A zombie might drop mangrove roots. Some unremarkable block might hand you a fully enchanted bow.
Traditional progression is gone. You cannot craft your way forward, because you have no idea where anything comes from. The world becomes a search: everything you need to reach the End is out there, hidden in blocks that have no business holding it, and the only way forward is to find them.
Every drop is fixed, never rolled. Once you learn that a block gives you a particular item, it gives you that item for the rest of the run. The challenge is discovery, not luck.
⚠️ SPOILER WARNING
Do not read past the Spoilers heading at the bottom of this page.
Everything above it is safe: what the mod does, how to install and configure it, and how it works internally. The final section gives away which items are guaranteed, how deep they are buried, and what kinds of blocks hide them — which is the entire puzzle.
If you are going to play this, stop at License.
Contents
Safe to read
- How a run plays
- Installation
- Configuration
- Commands
- How it works
- Compatibility and caveats
- Building from source
- License
Spoilers
- Spoilers — the guaranteed routes, chain depths, and treasure list
How a run plays
You spawn with nothing and no idea what anything does. So you start breaking things.
Dirt gives you something useless. Sand gives you something useless. Then an ordinary block drops food, and suddenly you are not going to starve. A while later something else hands you a crafting table, and the game opens up.
From there it is detective work. You need obsidian, and obsidian is somewhere. You need a way to light the portal. And when you finally reach the nether, you find that the last things standing between you and the End are buried in blocks that only exist down there.
Some items are not one break away. They sit behind a chain: break an ordinary block, get a placeable one, place it, break that, and get something else. When a plain grey rock drops a lime concrete, that is not a reward — it is a clue.
Everything you need is findable. Nothing you need is obvious. The run is always completable; a set of items is placed deliberately before the random shuffle runs, so no world can be dealt an unwinnable hand.
Installation
Requires:
| Minecraft | 26.2 |
| Fabric Loader | 0.19.3+ |
| Fabric API | 0.157.0+26.2 |
| Java | 25+ |
Drop the jar into mods/ alongside Fabric API.
This mod is entirely server-side. Clients need nothing installed — it works on a dedicated server with vanilla clients, and in single-player with only you having it.
Start a new world. The table is generated the first time a world runs with the mod and written into the save. Adding it to an existing world works, but you will already know where everything is, which rather defeats the point.
Configuration
Written to config/randomdrops.json on first launch, and editable live with /randomdrops set <option> <value>.
Most of these only matter when the table is generated. A world keeps the table it was created with, so changing guaranteeProgression or netherGating later does nothing until you run /randomdrops reroll.
| Option | Default | What it does |
|---|---|---|
enabled |
true |
Master switch. Off means completely vanilla drops. |
randomizeBlockDrops |
true |
Blocks drop their assigned item instead of their normal loot. |
randomizeEntityDrops |
true |
Mobs drop their assigned item instead of their normal loot. |
guaranteeProgression |
true |
Reserve blocks for the guaranteed routes, so the run is always completable. Turning this off makes the world a pure lottery, and very probably unfinishable. |
netherGating |
true |
Anchor the End-critical items on nether-only blocks, forcing the trip. Off puts them all in the overworld and makes for a much shorter run. |
enableTreasureDrops |
true |
Hide a handful of named, pre-enchanted items in the world. |
requireCorrectTool |
false |
Require the proper tool before a block drops anything. Off by default: you start with no way to make a pickaxe, so gating stone behind one is a soft lock. |
minDropCount |
1 |
Smallest fixed stack a drop can be. |
maxDropCount |
2 |
Largest fixed stack a drop can be. Each block still always drops the same amount. |
maxChainLength |
3 |
Ceiling on how many breaks deep a guaranteed item can be buried. Raise it for a longer run. |
tableSeed |
0 |
Seed for the shuffle. 0 derives it from the world seed, so every new world is a different puzzle. Set it to share an exact layout with someone else. |
Commands
The whole tree needs gamemaster permission (op level 2), because most of it gives the game away. /rd is an alias.
| Command | What it does |
|---|---|
/randomdrops config |
List every option and its current value. |
/randomdrops status |
Table seed, and how many blocks, entities and routes it holds. |
/randomdrops set <option> <value> |
Change an option and save it. Tab-completes option names. |
/randomdrops reload |
Re-read the config file. Does not rebuild the table. |
/randomdrops reroll <seed> |
Rebuild the entire table from a new seed. Anything already collected stays collected. |
/randomdrops progression |
⚠️ Spoilers. Print every guaranteed route, nether ones in red. |
/randomdrops lookup block <block> |
⚠️ Spoilers. What does this block drop? |
/randomdrops lookup item <item> |
⚠️ Spoilers. Which blocks drop this item? |
Examples:
/rd status
/rd set netherGating false
/rd set maxChainLength 4
/rd reroll 12345
How it works
Block drops are intercepted at BlockBehaviour.BlockStateBase.getDrops. That single method is the funnel for all block loot — both Block.getDrops overloads build a LootParams.Builder and call it, and Block.dropResources goes through those in turn. Intercepting there catches mining, explosions, pistons and anything else that destroys a block, while leaving container contents alone, since those drop by a separate path.
Because the vanilla loot table never runs, Silk Touch and Fortune have no effect and the tool requirement is skipped unless requireCorrectTool asks for it.
Mob drops are intercepted at LivingEntity.dropAllDeathLoot, which is cancelled outright. The loot table, the rare-drop rolls and the mob's equipment are all replaced by the one fixed item. Players are excluded — their death drops are their inventory, and replacing that would just delete people's things.
Coverage is total. Every block in the registry gets a mapping except air, technical blocks and shulker boxes, and every entity type gets one with no exceptions — around 1150 blocks and 158 entities in a vanilla 26.2 install. Modded blocks and items join automatically, since the registries are read at generation time.
The table is generated once per world and written to randomdrops.json in the save folder. It is persisted rather than re-derived on every load, so adding a mod, changing the config, or updating this mod cannot reshuffle a run someone is halfway through.
Generation order matters: the guaranteed routes claim their blocks first, then the treasure claims its hosts, then everything left over gets a straight shuffle. That ordering is what makes the run always finishable no matter how the rest falls.
Compatibility and caveats
- Server-side only. No client mod, no custom packets, no rendering changes.
- Modded blocks and items are included automatically — they are read from the registries, so anything another mod adds joins the shuffle.
- Shulker boxes are excluded, since replacing their drop would delete their contents. So are technical blocks that never drop anything anyway.
- Silk Touch and Fortune do nothing. The vanilla loot table is bypassed entirely.
- Container contents are safe. Chests, barrels and hoppers still spill their inventory when broken; only the block itself is replaced.
- XP is unaffected. Experience drops by a separate path and behaves normally.
- Structure loot, fishing and trading are untouched. Only block and mob drops are reassigned, so a village chest is still a village chest.
randomdrops.jsonin the save folder is a complete spoiler file. Delete it to reroll the world from scratch.
Building from source
git clone https://github.com/AB-70/RandomDrops
cd RandomDrops
./gradlew build
The jar lands in build/libs/. ./gradlew runServer starts a dev dedicated server.
Project layout:
src/main/java/dev/sattar/randomdrops/
├── RandomDrops.java entry point, event wiring
├── command/RandomDropsCommand.java /randomdrops
├── config/
│ ├── DropsConfig.java every option
│ └── DropsConfigManager.java load, save, reflective set
├── drop/
│ ├── DropEntry.java one fixed drop, with optional enchantments
│ ├── DropTable.java the whole mapping, JSON persistence, lookups
│ ├── DropTableGenerator.java routes, treasure, and the shuffle
│ ├── DropsManager.java the running server's table
│ └── ProgressionChain.java one guaranteed route
└── mixin/
├── BlockStateBaseMixin.java replaces block loot
└── LivingEntityMixin.java replaces mob loot
License
All Rights Reserved. Copyright (c) 2026 AB-70.
You may download and use this mod in your own game. You may not copy, modify, redistribute, re-upload, or include it or its source code in modpacks or other projects without prior written permission. See LICENSE.
Spoilers
🛑 Last chance to turn back
Everything below gives away the puzzle: which items are guaranteed, how many breaks deep each one sits, and what kinds of blocks hide them. It will not tell you the answers for your world — those depend on your seed — but it will tell you exactly where to start looking, which is most of the difficulty.
If you intend to play this, close the page now.
<details> <summary>Show me how chains work (mild spoiler)</summary>
Some items sit behind a chain of breaks. A real one from a test world:
stone -> white wool -> red wool -> DIAMOND
Breaking stone gives white wool. That is not a reward, it is a clue. Placing the white wool and breaking it gives red wool. Placing that and breaking it gives diamonds — and now stone is a diamond farm.
Chain links are deliberately artificial blocks: wool, concrete, terracotta, sea lanterns, looms, smithing tables. When an ordinary grey rock drops a lime concrete, that is the mod telling you to keep going. Nothing in the natural world drops those by accident, so a link is always a signal.
</details> <details> <summary>Show me the guaranteed items and how deep they are (full spoiler)</summary>A pure shuffle would produce unfinishable worlds, so nine items are placed by hand before the shuffle runs. Each gets its own chain, and the blocks used are reserved so nothing can overwrite them.
| Item | Depth | Where | Why it is guaranteed |
|---|---|---|---|
| Crafting table | 1 break | overworld | A run that cannot craft is not a challenge, it is a soft lock |
| Bread | 1 break | overworld | You have to eat before you have to solve anything |
| Furnace | 2 breaks | overworld | Smelting |
| Iron ingot | 2 breaks | overworld | Buckets, flint and steel, basic gear |
| Flint and steel | 2 breaks | overworld | Lighting the portal |
| Diamond | 3 breaks | overworld | Gear, and mining obsidian back out |
| Obsidian | 3 breaks | overworld | The portal itself |
| Blaze rod | 3 breaks | nether | Eyes of ender |
| Ender pearl | 3 breaks | nether | Eyes of ender |
The two nether items are anchored on blocks that only occur in the nether — netherrack, soul sand, basalt, blackstone, nether brick and friends. There is no overworld route to them. You have to go.
Anchors are chosen from common blocks on purpose. A chain anchored on diamond ore would be found by accident by everyone on their first trip down; a chain anchored on one of roughly thirty ordinary stones, dirts, sands and logs has to be genuinely searched for.
Run /randomdrops progression in game for your own world's answers.
Eight named, pre-enchanted items are hidden in the world. They are not required to finish, but they change how a run feels when you hit one.
| Name | Item | Enchantments |
|---|---|---|
| Nightbreaker | Netherite sword | Sharpness V, Looting III, Fire Aspect II, Unbreaking III |
| Skullcrusher | Mace | Density V, Breach IV, Unbreaking III |
| The Prospector | Diamond pickaxe | Efficiency V, Fortune III, Unbreaking III, Mending |
| Hunter's Verdict | Bow | Power V, Flame, Infinity, Unbreaking III |
| Stormcaller | Trident | Loyalty III, Channeling, Unbreaking III |
| Bulwark of the Lost | Netherite chestplate | Protection IV, Unbreaking III, Mending |
| Voidwalker's Tread | Diamond boots | Feather Falling IV, Depth Strider III, Protection IV |
| Wings of the Forgotten | Elytra | Unbreaking III, Mending |
Hosts are restricted to blocks that really generate — mostly ores, plus a few structure and cave blocks — so the reward lands where the effort already is. Breaking a coal ore and pulling out a Sharpness V netherite sword is the point.
</details>