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 [2022/09/16 16:26] – [ADDING BLOCK LOOT] nexus-dino | tutorial:datagen_loot [2024/06/10 20:02] (current) – [Adding Chest Loot] Added a missing parentheses to first .with() statement lunathegaymer | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | Before reading this, make sure you have a class that implements '' | + | ====== Loot Table Generation ====== |
- | To get started, make a class (or a few, you need one for blocks, chests and entities) that extends '' | + | Before reading this, make sure you've read [[datagen_setup|Getting |
+ | |||
+ | To begin, make a class (or a few, you need one for blocks, chests and entities) that extends '' | ||
==== Setting Up ==== | ==== Setting Up ==== | ||
+ | To get started with block loot, create a block loot table generator | ||
+ | |||
<code java> | <code java> | ||
- | private static class MyBlockLootTables extends | + | private static class MyBlockLootTables extends |
- | public MyBlockLootTables(FabricDataGenerator dataGenerator) { | + | public MyBlockLootTables(FabricDataOutput dataOutput) { |
- | | + | |
} | } | ||
| | ||
@Override | @Override | ||
- | public void accept(BiConsumer< | + | public void generate() { |
// ... | // ... | ||
} | } | ||
Line 21: | Line 25: | ||
@Override | @Override | ||
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { | public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { | ||
- | fabricDataGenerator.addProvider(MyBlockLootTables:: | + | |
+ | FabricDataGenerator.Pack myPack = fabricDataGenerator.createPack(); | ||
+ | myPack.addProvider(MyBlockLootTables:: | ||
+ | // ... | ||
} | } | ||
</ | </ | ||
+ | |||
+ | If you're using versions pre-1.20, please replace '' | ||
Let's just create a simple ore block and an item to drop from it for a block loot table. Add this to your block init or '' | Let's just create a simple ore block and an item to drop from it for a block loot table. Add this to your block init or '' | ||
Line 34: | Line 43: | ||
</ | </ | ||
- | ==== ADDING BLOCK LOOT ==== | + | ==== Adding Block Loot ==== |
<code java> | <code java> | ||
- | private static class MyBlockLootTables extends | + | private static class MyBlockLootTables extends |
- | public MyBlockLootTables(FabricDataGenerator dataGenerator) { | + | public MyBlockLootTables(FabricDataOutput dataOutput) { |
- | | + | |
} | } | ||
- | + | | |
@Override | @Override | ||
- | public void accept(BiConsumer< | + | public void generate() { |
- | // The BlockLootTableGenerator class contains a behemoth of utility methods. Just take some time and go through the methods available to override. | + | |
- | | + | |
} | } | ||
} | } | ||
Line 51: | Line 59: | ||
Now that we successfully adding a block. Now let's add chest loot. | Now that we successfully adding a block. Now let's add chest loot. | ||
- | ==== ADDING CHEST LOOT ==== | + | ==== Adding Chest Loot ==== |
- | Firstly, we need an identifier. | + | Firstly, we need an identifier. This identifier points to a json file that contains your chest loot. |
<code java> | <code java> | ||
Line 60: | Line 68: | ||
</ | </ | ||
- | Let's create a chest loot table now. | + | Let's create a chest loot table generator and register it like so. |
<code java> | <code java> | ||
- | public | + | private static |
+ | public MyChestLootGenerator(FabricDataOutput dataGenerator) | ||
+ | super(dataGenerator, | ||
+ | } | ||
@Override | @Override | ||
public void accept(BiConsumer< | public void accept(BiConsumer< | ||
Line 70: | Line 82: | ||
.pool(LootPool.builder().rolls(ConstantLootNumberProvider.create(1.0F)) | .pool(LootPool.builder().rolls(ConstantLootNumberProvider.create(1.0F)) | ||
.with(ItemEntry.builder(Items.DIAMOND) | .with(ItemEntry.builder(Items.DIAMOND) | ||
- | .apply(SetCountLootFunction.builder(ConstantLootNumberProvider.create(1.0F))) | + | .apply(SetCountLootFunction.builder(ConstantLootNumberProvider.create(1.0F)))) |
.with(ItemEntry.builder(Items.DIAMOND_SWORD)).apply(EnchantWithLevelsLootFunction.create(UniformLootNumberProvider.create(20.0F, | .with(ItemEntry.builder(Items.DIAMOND_SWORD)).apply(EnchantWithLevelsLootFunction.create(UniformLootNumberProvider.create(20.0F, | ||
); | ); | ||
Line 76: | Line 88: | ||
} | } | ||
+ | // ... | ||
+ | |||
+ | @Override | ||
+ | public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { | ||
+ | FabricDataGenerator.Pack myPack = fabricDataGenerator.createPack(); | ||
+ | myPack.addProvider(MyChestLootTables:: | ||
+ | } | ||
</ | </ | ||
+ | |||
+ | If you're using versions pre-1.20, please replace '' |
tutorial/datagen_loot.1663345616.txt.gz · Last modified: 2022/09/16 16:26 by nexus-dino