tutorial:datagen_loot
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| tutorial:datagen_loot [2025/04/01 13:23] – solidblock | tutorial:datagen_loot [2025/04/01 13:47] (current) – solidblock | ||
|---|---|---|---|
| Line 4: | Line 4: | ||
| ===== Block loot tables ===== | ===== Block loot tables ===== | ||
| - | To create | + | To add a data generation for block loot tables, just create a class which extends '' |
| <code java TutorialBlockLootTableProvider.java> | <code java TutorialBlockLootTableProvider.java> | ||
| Line 20: | Line 20: | ||
| And then, add this data generation in the entrypoint (we use '' | And then, add this data generation in the entrypoint (we use '' | ||
| - | < | + | < |
| public class ExampleModDataGenerator implements DataGeneratorEntrypoint { | public class ExampleModDataGenerator implements DataGeneratorEntrypoint { | ||
| @Override | @Override | ||
| Line 34: | Line 34: | ||
| In the previous [[blocks]] tutorial, we created an //example block//. Now let's use the data generator to generate its loot table. It's as simple as: | In the previous [[blocks]] tutorial, we created an //example block//. Now let's use the data generator to generate its loot table. It's as simple as: | ||
| - | <code java TutorialBlockLootTableProvider> | + | <code java TutorialBlockLootTableProvider.java> |
| @Override | @Override | ||
| public void generate() { | public void generate() { | ||
| Line 48: | Line 48: | ||
| addDrop(TutorialBlocks.EXAMPLE_BLOCK, | addDrop(TutorialBlocks.EXAMPLE_BLOCK, | ||
| | | ||
| - | // drops a dirt when mined | + | // drops a dirt block |
| addDrop(TutorialBlocks.EXAMPLE_BLOCK, | addDrop(TutorialBlocks.EXAMPLE_BLOCK, | ||
| | | ||
| Line 60: | Line 60: | ||
| addDrop(TutorialBlocks.EXAMPLE_BLOCK, | addDrop(TutorialBlocks.EXAMPLE_BLOCK, | ||
| | | ||
| - | // drops three blocks | + | // drops five blocks |
| - | addDrop(TutorialBlocks.EXAMPLE_BLOCK, | + | addDrop(TutorialBlocks.EXAMPLE_BLOCK, |
| + | | ||
| </ | </ | ||
| - | You can also generate | + | You can also generate |
| <code java> | <code java> | ||
| - | addDrop(TutorialBlocks.CUSTOM_CROP, | + | addDrop(TutorialBlocks.CUSTOM_CROP, |
| </ | </ | ||
| - | ==== Adding Chest Loot ==== | + | ===== Simple |
| - | Firstly, we need an identifier. This identifier points to a json file that contains your chest loot. | + | To add a simple loot table, which can also be used in many occasions, such as chests, we just extend '' |
| + | <code java TutorialChestLootTableProvider.java> | ||
| + | public class TutorialChestLootTableProvider extends SimpleFabricLootTableProvider { | ||
| + | public TutorialChestLootTableProvider(FabricDataOutput output, CompletableFuture< | ||
| + | super(output, | ||
| + | } | ||
| - | <code java> | + | |
| - | // In Tutorial class | + | |
| - | public static final Identifier | + | |
| - | </ | + | |
| - | Let's create a chest loot table generator and register it like so. | + | |
| - | + | public void accept(BiConsumer< | |
| - | <code java> | + | |
| - | + | .pool(LootPool.builder().rolls(ConstantLootNumberProvider.create(1.0F)) | |
| - | private static class MyChestLootTables extends SimpleFabricLootTableProvider { | + | .with(ItemEntry.builder(Items.DIAMOND) |
| - | public MyChestLootGenerator(FabricDataOutput dataGenerator) { | + | .apply(SetCountLootFunction.builder(ConstantLootNumberProvider.create(1.0F)))) |
| - | super(dataGenerator, | + | .with(ItemEntry.builder(Items.DIAMOND_SWORD))) |
| - | } | + | ); |
| - | + | } | |
| - | | + | |
| - | public void accept(BiConsumer< | + | |
| - | | + | |
| - | .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, | + | |
| - | ); | + | |
| - | } | + | |
| } | } | ||
| + | </ | ||
| - | // ... | + | And then in your entry point: |
| + | <code java ExampleModDataGenerator.java> | ||
| + | public class ExampleModDataGenerator implements DataGeneratorEntrypoint { | ||
| + | @Override | ||
| + | public void onInitializeDataGenerator(FabricDataGenerator generator) { | ||
| + | | ||
| - | @Override | + | pack.addProvider(TutorialChestLootTableProvider::new); |
| - | public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { | + | } |
| - | FabricDataGenerator.Pack myPack = fabricDataGenerator.createPack(); | + | |
| - | myPack.addProvider(MyChestLootTables::new); | + | |
| } | } | ||
| </ | </ | ||
| - | If you're using versions pre-1.20, please replace '' | + | > If you're using versions pre-1.20, please replace '' |
| + | |||
| + | Now run the data generator, then start Minecraft and run the command ''/ | ||
tutorial/datagen_loot.1743513827.txt.gz · Last modified: 2025/04/01 13:23 by solidblock