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:24] – 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 '' | ||
- | <code java ExampleModDataGenerator > | + | <code java ExampleModDataGenerator.java> |
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.1743513842.txt.gz · Last modified: 2025/04/01 13:24 by solidblock