00
:
00
:
00
:
00
Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

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.

  1. Nel tuo FabricDataGeneratorEntrypoint: ```java @Override public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { FabricDataGenerator.Pack pack = fabricDataGenerator.createPack(); pack.addProvider(ModLootTableProvider::new); } ```

  2. 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
    }
    

    } ```

  3. Esegui il task Gradle runDatagen. Questo genererà automaticamente i file JSON nella cartella generated.