promotional bannermobile promotional banner

Randomized Block & Mob Drops

This mod randomizes all block and mob drops in Minecraft — including modded ones.

File Details

RBMD 2.0.3

  • R
  • Mar 22, 2026
  • 31.00 KB
  • 25
  • 1.21.1
  • NeoForge

File Name

rbmd-2.0.3.jar

Supported Versions

  • 1.21.1

Curse Maven Snippet

NeoForge

implementation "curse.maven:rbmd-1332736:7795715"
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

[2.0.3] — 2026-03-22 — Commands, Safety & Polish

🚀 New Features

  • /rbmdfind <item> (renamed from /rbmditemdrops) — shows what blocks and mobs drop a specific item, now displays the actual block/mob name from the loot table path instead of the item ID. Blocks show under Mine, mobs under Kill.
  • /rbmdmob <mob> (renamed from /rbmdmobdrops) — shows what a mob drops now. Reads the written datapack file on disk so results are accurate. Both commands have full tab completion with filtered suggestions (items for /rbmdfind, entities for /rbmdmob).
  • /rbmdcheck — OP command to verify blacklists are applied correctly. Shows which blacklisted items are still in the pool (bug indicator), validates mob/mod blacklist IDs against the registry, and shows total pool size.
  • /rbmddump — OP command that exports the full drop mapping to datapacks/rbmd_randomizer/rbmd_dump.txt. Lists every block and mob with their randomized drops — useful for reviewing changes and copy-pasting IDs into the blacklist.
  • chaos_mode config option — skips all blacklists, spawn egg filter, and the natural drop filter. Every registered item enters the pool. A warning is shown in chat and logs when enabled.
  • Natural drop filter — the permutation pool now only includes items that appear in at least one loot table. Items with no natural source (creative-only, unobtainables) are automatically excluded, preventing them from absorbing a pool slot and making other items unreachable.
  • First join welcome message now shows a ⚠ CHAOS MODE is ON warning when chaos mode is enabled.
  • Config values logged on startup — active config printed to latest.log on every world load including chaos mode status.

🐛 Bug Fixes

  • Fixed: /rbmdmob always saying "hardcoded drops" on world rejoin. COVERED_TABLES is an in-memory set that was empty on rejoin since makeDatapack only ran on first load. Added populateCoveredTablesFromDisk() which scans the existing datapack folder on load and repopulates the set.
  • Fixed: .json suffix mismatch in COVERED_TABLES. rm.listResources() returns paths with .json but getLootTable().location() does not — causing the double-randomization check to always miss and some mobs to drop nothing. The check now appends .json before comparing.
  • Fixed: /rbmdfind not showing mob drops. The old logic compared item IDs against entity table names (e.g. minecraft:rotten_flesh vs minecraft:zombie) which never matched. Now reads the actual datapack files to find which table each item came from.
  • Fixed: randomize_mobs=false and randomize_blocks=false not applying to existing worlds. The existing-world code path returned early before checking config. Config is now checked before scheduling the reload.
  • Fixed: datapack not generated when randomize_blocks=false but randomize_mobs=true. Generation was gated entirely on randomize_blocks. Now runs if either toggle is on.
  • Fixed: commands invisible to non-OP players. sendSuccess() was used for all output which can be invisible on some servers. Switched to sendSystemMessage() for players. Read-only commands (/rbmdhelp, /rbmdfind, /rbmdmob) now allow all players with .requires(src -> true). State-changing commands require OP level 2.
  • Fixed: item blacklist defaults not loading (item_blacklist_size=0). The defineList supplier overload was silently falling back to an empty list. Switched to defineListAllowEmpty with a direct List.of(...).
  • Fixed: all compiler warnings — removed unused imports, simplified always-true/false null checks, renamed unused modBus parameter.

⚙️ Technical / Internal

  • Commands renamed: /rbmditemdrops/rbmdfind, /rbmdmobdrops/rbmdmob.
  • ResourceLocationArgument.id() used for item/mob arguments — enables proper namespace:id input and tab completion filtered to valid items/entities.
  • Verbose inline comments stripped throughout — only section headers and short one-liners remain.
  • collectDropNamesStatic added as a static helper for use inside Permutation.ensureBuilt before instance context is available.