🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
Ця сторінка написана для версії:
1.21.4
Ця сторінка написана для версії:
1.21.4
ПЕРЕДУМОВИ
Спершу переконайтеся, що ви виконали процес налаштування datagen.
Вам знадобляться різні постачальники (класи) для блоків, скринь і сутностей. Не забувайте додати їх усі до свого пакета у вашій DataGeneratorEntrypoint
у методі onInitializeDataGenerator
.
pack.addProvider(FabricDocsReferenceBlockLootTableProvider::new);
Таблиці здобичі визначають, що ви отримуєте від добування блоку (не включаючи вміст, як у скринях), вбивства сутності або відкриття щойно згенерованого контейнера. Кожна таблиця здобичі має пули, з яких вибираються предмети. Таблиці здобичі також мають функції, які певним чином змінюють отриману здобич.
Пули здобичі мають записи, умови, функції, кидки та бонусні кидки. Записи — це групи, послідовності або можливості предметів, або просто предмети. Умови — це речі, які перевіряються у світі, як-от чари на знаряддях або випадковий шанс. Мінімальна кількість записів, вибраних пулом, називається кидками, а все, що перевищує цю кількість, називається бонусним кидком.
Щоб з блоків випадали предмети, включаючи себе, нам потрібно створити таблицю здобичі. Створіть клас, який extends FabricBlockLootTableProvider
:
public class FabricDocsReferenceBlockLootTableProvider extends FabricBlockLootTableProvider {
protected FabricDocsReferenceBlockLootTableProvider(FabricDataOutput dataOutput, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
super(dataOutput, registryLookup);
}
@Override
public void generate() {
}
}
Обов’язково додайте цього постачальника до свого пакету!
Існує багато допоміжних методів, які допоможуть вам створити свої таблиці здобичі. Ми не будемо розглядати їх усі, тому обов’язково перевірте їх у своєму IDE.
Нумо додаймо якусь здобич у метод generate
:
// Make condensed dirt drop its block item.
// Also adds the condition that it survives the explosion that broke it, if applicable,
addDrop(ModBlocks.CONDENSED_DIRT);
// Make prismarine lamps drop themselves with silk touch only
addDropWithSilkTouch(ModBlocks.PRISMARINE_LAMP);
// Make condensed oak logs drop between 7 and 9 oak logs
addDrop(ModBlocks.CONDENSED_OAK_LOG, LootTable.builder().pool(addSurvivesExplosionCondition(Items.OAK_LOG, LootPool.builder()
.rolls(new UniformLootNumberProvider(new ConstantLootNumberProvider(7), new ConstantLootNumberProvider(9)))
.with(ItemEntry.builder(Items.OAK_LOG))))
);
Скриня здобичі трохи хитріша, ніж здобич блоків. Створіть клас, який розширює SimpleFabricLootTableProvider
, подібно до прикладу нижче, і додайте його до свого пакету.
public class FabricDocsReferenceChestLootTableProvider extends SimpleFabricLootTableProvider {
public FabricDocsReferenceChestLootTableProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
super(output, registryLookup, LootContextTypes.CHEST);
}
@Override
public void accept(BiConsumer<RegistryKey<LootTable>, LootTable.Builder> lootTableBiConsumer) {
}
}
We'll need a RegistryKey<LootTable>
for our loot table. Помістімо це в новий клас під назвою ModLootTables
. Якщо ви використовуєте розділені джерела, переконайтеся, що це джерело є у вашому main
наборі джерел.
public class ModLootTables {
public static RegistryKey<LootTable> TEST_CHEST_LOOT = RegistryKey.of(RegistryKeys.LOOT_TABLE, Identifier.of(FabricDocsReference.MOD_ID, "chests/test_loot"));
}
Потім ми можемо створити таблицю здобичі всередині методу generate
вашого постачальника.
lootTableBiConsumer.accept(ModLootTables.TEST_CHEST_LOOT, LootTable.builder()
.pool(LootPool.builder() // One pool
.rolls(ConstantLootNumberProvider.create(2.0f)) // That has two rolls
.with(ItemEntry.builder(Items.DIAMOND) // With an entry that has diamond(s)
.apply(SetCountLootFunction.builder(ConstantLootNumberProvider.create(1.0f)))) // One diamond
.with(ItemEntry.builder(Items.DIAMOND_SWORD) // With an entry that has a plain diamond sword
)
));