zh_cn:tutorial:datagen_loot
战利品表生成
在阅读本教程之前,请确认你已经阅读 开始了解数据生成,并且知晓有一个类可以实现 DataGenerationEntrypoint
。
首先,创建一个类(或者多个,你需要一个给方块、箱子和实体)来继承(extends) SimpleFabricLootTableProvider
,然后像这样注册它:
初始化
要开始使用方块战利品掉落,要先创建一个战利品表生成器
private static class MyBlockLootTables extends SimpleFabricLootTableProvider { public MyBlockLootTables(FabricDataGenerator dataGenerator) { super(dataGenerator, LootContextTypes.BLOCK); } @Override public void accept(BiConsumer<Identifier, LootTable.Builder> biConsumer) { // ... } } // ... @Override public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { fabricDataGenerator.addProvider(MyBlockLootTables::new); }
让我们为战利品表创建一个简单的矿石方块和它的掉落物。添加到你的方块初始化中,或者本实例中的 Tutorial
类中。
public static final Block TEST_ORE = Registry.register(Registry.BLOCK, new Identifier("tutorial", "test_ore"), new Block(...)); public static final Item TEST_ITEM = Registry.register(Registry.ITEM, new Identifier("tutorial", "test_item", new Item(...)); // 请不要在乎没有这个方块的细节 😅
添加方块战利品掉落
private static class MyBlockLootTables extends SimpleFabricLootTableProvider { public MyBlockLootTables(FabricDataGenerator dataGenerator) { super(dataGenerator, LootContextTypes.BLOCK); } @Override public void accept(BiConsumer<Identifier, LootTable.Builder> biConsumer) { // The BlockLootTableGenerator class contains a behemoth of utility methods. Just take some time and go through the methods available to override. biConsumer.accept(new Identifier("tutorial", "test_block"), BlockLootTableGenerator.drops(Tutorial.TEST_BLOCK, Tutorial.TEST_ITEM, ConstantLootNumberProvider.create(9.0F))); } }
好啦,我们现在成功地添加了一个方块,然后让我们创建一个箱子战利品掉落。
添加箱子战利品掉落
在开始的时候,我们需要一个标识。这个标识将会指向装有你的箱子掉落物的容器的 json 文件。
// 在 Tutorial 类中 public static final Identifier TEST_CHEST = new Identifier("tutorial", "chests/test_loot");
让我们一起创建一个箱子战利品表,然后像这样注册它:
private static class MyChestLootTables extends SimpleFabricLootTableProvider { public MyChestLootGenerator(FabricDataGenerator dataGenerator) { super(dataGenerator, LootContextTypes.CHEST); } @Override public void accept(BiConsumer<Identifier, LootTable.Builder> biConsumer) { biConsumer.accept(Tutorial.TEST_CHEST, LootTable.builder() .pool(LootPool.builder().rolls(ConstantLootNumberProvider.create(1.0F)) .with(ItemEntry.builder(Items.DIAMOND) .apply(SetCountLootFunction.builder(ConstantLootNumberProvider.create(1.0F))) .with(ItemEntry.builder(Items.DIAMOND_SWORD)).apply(EnchantWithLevelsLootFunction.create(UniformLootNumberProvider.create(20.0F, 39.0F)))) ); } } // ... @Override public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { fabricDataGenerator.addProvider(MyChestLootTables::new); }
zh_cn/tutorial/datagen_loot.txt · Last modified: 2023/02/17 14:58 by hanatomizu