====== Добавление предметов в существующие таблицы добычи ====== ===== Введение ===== Иногда вы хотите добавить элементы в [[https://minecraft.fandom.com/ru/wiki/Таблицы_добычи|таблицы добычи]], например, добавляя свои собственные капли в ванильный блок или объект. Самое простое решение, замена файла таблицы добычи, может сломать другие моды – что, если они тоже захотят их изменить? Мы рассмотрим, как вы можете добавлять предметы в таблицы добычи, не переопределяя таблицу. Нашим примером будет добавление яиц в таблицу добычи угольной руды. ===== Прослушивание загрузки таблицы добычи ===== В API Fabric есть событие, которое запускается при загрузке таблиц добычи, ''%%LootTableLoadingCallback%%''. Вы можете зарегистрировать для него прослушиватель событий в своем инициализаторе. Давайте также проверим, что текущая таблица добычи - это таблица добычи угольной руды: // Никаких магических констант! private static final Identifier COAL_ORE_LOOT_TABLE_ID = Blocks.COAL_ORE.getLootTableId(); // Фактический код LootTableLoadingCallback.EVENT.register((resourceManager, lootManager, id, table, setter) -> { if (COAL_ORE_LOOT_TABLE_ID.equals(id)) { // Наш код будет здесь } }); ===== Добавление элементов в таблицу ===== В таблицах добычи предметы хранятся в //записях добычи,// а записи хранятся в //пулах добычи//. Чтобы добавить предмет, нам нужно будет добавить пул с записью предмета в таблицу добычи. Мы можем создать пул с помощью ''%%FabricLootPoolBuilder%%'' и добавить его в таблицу добычи: LootTableLoadingCallback.EVENT.register((resourceManager, lootManager, id, table, setter) -> { if (COAL_ORE_LOOT_TABLE_ID.equals(id)) { FabricLootPoolBuilder poolBuilder = FabricLootPoolBuilder.builder() .rolls(ConstantLootTableRange.create(1)); // То же, что и "rolls": 1 в таблице добычи json table.pool(poolBuilder); } }); В нашем пуле еще нет никаких предметов, поэтому мы внесем элемент и добавим его в пул, и все готово: LootTableLoadingCallback.EVENT.register((resourceManager, lootManager, id, table, setter) -> { if (COAL_ORE_LOOT_TABLE_ID.equals(id)) { FabricLootPoolBuilder poolBuilder = FabricLootPoolBuilder.builder() .rolls(ConstantLootTableRange.create(1)) .with(ItemEntry.builder(Items.EGG)); table.pool(poolBuilder); } }); {{:tutorial:coal_ore_egg.png?400|}}