API

Forme dei blocchi

Un blocco non deve per forza essere un cubo. Ne descrivi la forma come una o più scatole e Crafting lo disegna, lo rende solido e lascia passare la luce e le facce dei blocchi vicini dove non è pieno. Per un aspetto tutto tuo, dagli un modello.

Forma: un elenco di scatole

content/shapes.craftCraftScript
block "half" { shape: [[0, 0, 0, 16, 8, 16]] }

block "pedestal" {
    shape: [[2, 0, 2, 14, 2, 14], [5, 2, 5, 11, 12, 11], [3, 12, 3, 13, 14, 13]]
}

Ogni scatola è [x1, y1, z1, x2, y2, z2] in pixel, da 0 a 16 (16 è un blocco intero). Il blocco viene disegnato con quelle scatole, con la sua texture su ogni faccia, e ci collide: i giocatori stanno in piedi sulle scatole e il contorno di selezione le segue.

Modello: un aspetto tutto tuo

content/lamp.craftCraftScript
block "lamp" {
    model: "block/lamp"
    shape: [[7, 0, 7, 9, 12, 9], [5, 12, 5, 11, 16, 11]]
    light: 15
}
Proprietà Valori Predefinito
shape elenco di scatole [x1, y1, z1, x2, y2, z2], in pixel (0–16) un cubo intero
model percorso di un modello di blocco della mod: block/lamp è il file models/block/lamp.json della mod disegnato da shape, oppure un cubo

Il modello è un modello di blocco standard in JSON, come quelli esportati da un editor di modelli. Le texture a cui rimanda si scrivono <id della mod>:block/<nome>. Se c’è anche shape, è la forma a determinare le collisioni del blocco; senza, il blocco collide come un cubo intero.

Dove vanno i file

Mod Dove
CraftScript (cartella) mods/lamps/models/block/lamp.json, mods/lamps/textures/block/lamp.png
Kotlin o Java src/main/resources/assets/lamps/models/block/lamp.json

Forme per stato

shape_when dà a un blocco scatole che ha solo in alcuni dei suoi stati (vedi Stati del blocco in Blocchi, oggetti e ricette). Ogni chiave è "stato=valore"; in ogni stato il blocco ha le scatole di shape più quelle di ogni chiave che corrisponde.

content/column.craftCraftScript
block "stone_column" {
    states: [{ part: ["single", "bottom", "top"] }]
    shape: [[4, 0, 4, 12, 16, 12]]
    shape_when: {
        "part=single": [[2, 0, 2, 14, 2, 14], [2, 14, 2, 14, 16, 14]],
        "part=bottom": [[2, 0, 2, 14, 2, 14]],
        "part=top": [[2, 14, 2, 14, 16, 14]]
    }
}

I valori si scrivono come li mostra lo stato: true o false per un interruttore, un numero, un nome o una direzione come north. Le scatole sono ciò con cui il blocco collide e ciò che il suo contorno segue; l’aspetto in ogni stato deriva dalle sue texture o dai suoi modelli per quello stato.

Buono a sapersi

  • Un blocco che non è un cubo lascia passare da solo la luce e le facce dei blocchi vicini; non serve segnarlo come transparent.
  • Tutte le altre proprietà del blocco (hardness, light, tool, loot…) funzionano allo stesso modo; vedi Blocchi, oggetti e ricette.

In Kotlin

content/Shapes.ktKotlin
block("half") { box(0, 0, 0, 16, 8, 16) }

block("lamp") {
    model = "block/lamp"
    box(7, 0, 7, 9, 12, 9)
    box(5, 12, 5, 11, 16, 11)
    light = 15
}

Ogni box(x1, y1, z1, x2, y2, z2) aggiunge una scatola; model è lo stesso percorso di CraftScript. boxWhen(state, value, x1, y1, z1, x2, y2, z2) aggiunge una scatola per uno stato:

content/Column.ktKotlin
block("stone_column") {
    choice("part", "single", "bottom", "top")
    box(4, 0, 4, 12, 16, 12)
    boxWhen("part", "bottom", 2, 0, 2, 14, 2, 14)
    boxWhen("part", "top", 2, 14, 2, 14, 16, 14)
}