====== Adding items to existing loot tables ====== ===== Introduction ===== Sometimes you want to add items to [[https://minecraft.wiki/w/Loot_table|loot tables]], for example adding your own drops to a vanilla block or entity. The simplest solution, replacing the loot table file, can break other mods – what if they want to change them as well? We’ll take a look at how you can add items to loot tables without overriding the table. Our example will be adding eggs to the coal ore loot table. ===== Listening to loot table loading ===== Fabric API has an event that’s fired when loot tables are loaded, ''%%LootTableEvents.MODIFY%%''. You can register an event listener for it in your initializer. Let’s also check that the current loot table is the coal ore loot table. // No magic constants! private static final class_2960 COAL_ORE_LOOT_TABLE_ID = class_2246.COAL_ORE.getLootTableId(); // Actual code LootTableEvents.MODIFY.register((resourceManager, lootManager, id, tableBuilder, source) -> { // Let's only modify built-in loot tables and leave data pack loot tables untouched by checking the source. // We also check that the loot table ID is equal to the ID we want. if (source.isBuiltin() && COAL_ORE_LOOT_TABLE_ID.equals(id)) { // Our code will go here } }); ===== Adding items to the table ===== In loot tables, items are stored in //loot pool entries,// and entries are stored in //loot pools//. To add an item, we’ll need to add a pool with an item entry to the loot table. We can make a pool with '''', and add it to the loot table: LootTableEvents.MODIFY.register((resourceManager, lootManager, id, tableBuilder, source) -> { if (source.isBuiltin() && COAL_ORE_LOOT_TABLE_ID.equals(id)) { class_55.Builder poolBuilder = class_55.method_347(); tableBuilder.method_336(poolBuilder); } }); Our pool doesn’t have any items yet, so we’ll make an item entry and add it to the pool, and we're done: LootTableEvents.MODIFY.register((resourceManager, lootManager, id, tableBuilder, source) -> { if (source.isBuiltin() && COAL_ORE_LOOT_TABLE_ID.equals(id)) { class_55.Builder poolBuilder = class_55.method_347() .method_351(class_77.method_411(class_1802.field_8803)); tableBuilder.method_336(poolBuilder); } }); {{:tutorial:coal_ore_egg.png?400|}}