Loot Tables
Cos’è una Loot Table?
Una Loot Table (tabella del bottino) è un file JSON che definisce cosa generare in un determinato contesto. Si usano per:
- Drop dei blocchi (block drops)
- Drop delle entità (mob drops)
- Contenuto delle chest (dungeon loot)
- Pesca, regali, ecc.
Se hai creato un blocco ma non definisci una loot table, quando lo rompi non otterrai nulla (nemmeno il blocco stesso!).
Struttura base
Il percorso standard per i drop dei blocchi è:
src/main/resources/data/tutorialmod/loot_tables/blocks/ruby_block.json
Nota: Usa data, non assets! I loot tables sono dati lato server (datapack), non risorse client.
Ecco una loot table semplice che droppa il blocco stesso (come la pietra o il legno):
```json { “type”: “minecraft:block”, “pools”: [ { “rolls”: 1, “entries”: [ { “type”: “minecraft:item”, “name”: “tutorialmod:ruby_block” } ], “conditions”: [ { “condition”: “minecraft:survives_explosion” } ] } ] } ```
Drop Condizionali (Ore Drops)
Se vuoi che il blocco droppi un item diverso (come un minerale che droppa gemme), la struttura cambia leggermente.
Esempio: ruby_ore che droppa ruby.
```json { “type”: “minecraft:block”, “pools”: [ { “rolls”: 1, “entries”: [ { “type”: “minecraft:item”, “name”: “tutorialmod:ruby”, “functions”: [ { “function”: “minecraft:apply_bonus”, “enchantment”: “minecraft:fortune”, “formula”: “minecraft:ore_drops” }, { “function”: “minecraft:explosion_decay” } ] } ] } ] } ```
Datagen (Automazione)
Scrivere questi JSON a mano è noioso e prono a errori. Fabric offre un potente sistema di Data Generation.
-
Nel tuo
FabricDataGeneratorEntrypoint: ```java @Override public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { FabricDataGenerator.Pack pack = fabricDataGenerator.createPack(); pack.addProvider(ModLootTableProvider::new); } ``` -
Crea la classe
ModLootTableProvider: ```java public class ModLootTableProvider extends FabricBlockLootTableProvider { protected ModLootTableProvider(FabricDataOutput dataOutput) { super(dataOutput); }@Override public void generate() { addDrop(ModBlocks.RUBY_BLOCK); // Drop semplice (se stesso) addDrop(ModBlocks.RUBY_ORE, oreDrops(ModBlocks.RUBY_ORE, ModItems.RUBY)); // Drop come minerale }} ```
-
Esegui il task Gradle
runDatagen. Questo genererà automaticamente i file JSON nella cartellagenerated.