# Chaos Drops - KubeJS Addon
Chaos Drops turns progression into pure uncertainty.
Every player-killed entity drops a Chaos Loot Bag instead of its normal loot. Open the bag to receive a random item from the game, including modded and creative items, while debug and command-block/admin items are excluded by default.
Block mode is enabled by default and replaces player-broken block drops with random item drops too, making every block a gamble. To make the start gentler, each player receives 3 Stabilizer Charges once on first login. A Stabilizer Charge breaks one block with its normal drops instead of chaos drops, and it can also be crafted early game.
This is a KubeJS addon/customization, not a standalone Java mod and not a pure datapack.
## Requirements
- Minecraft 1.21.1
- NeoForge
- KubeJS for NeoForge
Built for All the Mods 10 / ATM10 using KubeJS `2101.7.2`. But should be used on any other modpack. Just a fun test to see if it could be completed with this tweak.
## Features
- Player-killed living entities drop `kubejs:chaos_loot_bag` instead of their normal drops.
- Entity loot tables are generated for living entities, so things like boats should not drop the bag when broken by a player. If they do drop, this its a bug. I wish you report what none-living thing dropped items.
- Right-clicking a Chaos Loot Bag consumes it and gives one random item.
- Block mode is enabled by default and replaces player-broken block drops with one random item directly, not a bag.
- Block mode has exact block and tag blacklists for noisy blocks like grass, bushes, flowers, leaves, crops, and saplings.
- Block mode can be filtered by hand breaks, tool breaks, wrong-tool breaks, and blocks that require a correct tool.
- `kubejs:stabilizer_charge` is a one-use helper item. Right-click a block with it to break that block with normal drops instead of chaos drops.
- Players receive 3 starter Stabilizer Charges once on first login. Can be turned off.
- Fake players and machine-style block breaking are ignored by default.
- Player deaths are ignored so inventory drops are not replaced.
## Installation
Copy the contents of this zip into the root folder of your Minecraft instance or server.
The final layout should look like this:
<instance root>/kubejs/startup_scripts/random_loot_bag.js
<instance root>/kubejs/server_scripts/random_loot_bag.js
<instance root>/kubejs/client_scripts/random_loot_bag_tooltips.js
<instance root>/random_loot_config.json
Restart the game or server after installing. The custom items are registered during startup, so `/reload` is not enough for the first install.
## Configuration
Edit `random_loot_config.json` in the instance root.
Block mode:
"block_mode": {
"enabled": true,
"only_real_players": true,
"require_recent_player_break": false,
"only_blocks_with_normal_drops": true,
"skip_block_entities": true,
"tool_filters": {
"allow_hand_breaks": true,
"allow_tool_breaks": true,
"allow_wrong_tool_breaks": true,
"only_blocks_that_require_correct_tool": false,
"exclude_blocks_that_require_correct_tool": false
}
}
Set `"enabled": false` if you only want entity loot bags.
`"only_real_players": true` is the main safety gate that prevents machine and fake-player block drops from being randomized. `"require_recent_player_break"` is an extra strict gate and is off by default because some KubeJS event orderings do not mark the break before the drop event.
`"only_blocks_with_normal_drops": true` means chaos block drops only happen when the original block break would have dropped at least one item. This prevents no-drop blocks, such as unfinished amethyst buds, from becoming free random loot. Set it to `false` if you want every allowed player-broken block to roll chaos loot even when vanilla would drop nothing.
`"skip_block_entities": true` means blocks with block entities are not chaos-replaced. This protects containers and stateful blocks such as chests, shulker boxes, barrels, and many modded machines from losing their contents when broken.
Tool filters:
- `"allow_hand_breaks": false` stops hand-broken blocks from becoming chaos drops.
- `"allow_tool_breaks": false` stops any held-tool block break from becoming a chaos drop.
- `"allow_wrong_tool_breaks": false` stops blocks mined with the wrong tool from becoming chaos drops.
- `"only_blocks_that_require_correct_tool": true` makes chaos block drops apply only to blocks that need a correct tool for normal drops.
- `"exclude_blocks_that_require_correct_tool": true` makes chaos block drops skip blocks that need a correct tool for normal drops.
Block drop blacklist examples:
"random_drop_block_blacklist": [
"minecraft:short_grass",
"minecraft:tall_grass",
"minecraft:dead_bush"
],
"random_drop_block_tag_blacklist": [
"minecraft:flowers",
"minecraft:leaves",
"minecraft:crops"
]
Remove entries from these lists to let those blocks roll random drops again, or add more block IDs/tags to exclude them.
Starter player charges:
"stabilizer_charge_on_first_login": true,
"starter_stabilizer_charge_count": 3
`stabilizer_charge_on_first_login` is the intended starter option when Lootr is installed, because Lootr can replace the vanilla bonus chest loot path.
## Stabilizer Charge Recipe
The recipe makes 2 charges:
[ ][S][ ]
[L][C][L]
[ ][R][ ]
- `S` = String
- `L` = Leather
- `C` = Copper Ingot
- `R` = Redstone
## Textures
The package includes custom vanilla-style 16x16 textures for:
- `kubejs:chaos_loot_bag`
- `kubejs:stabilizer_charge`
Restart the game after changing item textures. `/reload` is enough for server script behavior, but not for startup-registered item model changes.