API
Formes de blocs
Un bloc n’a pas à être un cube. Tu décris sa forme comme une ou plusieurs boîtes, et Crafting le dessine, le rend solide et laisse passer la lumière et les faces des voisins là où il n’est pas plein. Pour un aspect bien à toi, donne-lui un modèle.
Forme : une liste de boîtes
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]]
}Chaque boîte est [x1, y1, z1, x2, y2, z2] en pixels, de 0 à 16 (16 correspond à un bloc entier). Le bloc est dessiné avec ces boîtes, avec sa texture sur chaque face, et il entre en collision avec elles : les joueurs se tiennent sur les boîtes et le contour de sélection les suit.
Modèle : un aspect personnalisé
block "lamp" {
model: "block/lamp"
shape: [[7, 0, 7, 9, 12, 9], [5, 12, 5, 11, 16, 11]]
light: 15
}| Propriété | Valeurs | Par défaut |
|---|---|---|
shape |
liste de boîtes [x1, y1, z1, x2, y2, z2], en pixels (0–16) |
un cube entier |
model |
chemin d’un modèle de bloc du mod : block/lamp est le fichier models/block/lamp.json du mod |
dessiné à partir de shape, ou un cube |
Le modèle est un modèle de bloc standard en JSON, comme ceux qu’exporte un éditeur de modèles. Les textures auxquelles il fait référence s’écrivent <id du mod>:block/<nom>. Avec shape en plus, c’est la forme qui sert aux collisions ; sans elle, le bloc entre en collision comme un cube entier.
Où vont les fichiers
| Mod | Où |
|---|---|
| CraftScript (dossier) | mods/lamps/models/block/lamp.json, mods/lamps/textures/block/lamp.png |
| Kotlin ou Java | src/main/resources/assets/lamps/models/block/lamp.json |
Formes selon l’état
shape_when donne à un bloc des boîtes qu’il n’a que dans certains de ses états (voir États de bloc dans Blocs, objets et recettes). Chaque clé est "state=value" ; dans chaque état, le bloc a les boîtes de shape plus celles de chaque clé qui correspond.
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]]
}
}Les valeurs s’écrivent comme l’état les montre : true ou false pour un interrupteur, un nombre, un nom, ou une direction comme north. Les boîtes sont ce avec quoi le bloc entre en collision et ce que suit son contour ; son apparence dans chaque état vient de ses textures ou de ses modèles pour cet état.
Bon à savoir
- Un bloc qui n’est pas un cube laisse passer de lui-même la lumière et les faces de ses voisins ; tu n’as pas besoin de le marquer
transparent. - Toutes les autres propriétés d’un bloc (
hardness,light,tool,loot…) fonctionnent pareil ; voir Blocs, objets et recettes.
En Kotlin
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
}Chaque box(x1, y1, z1, x2, y2, z2) ajoute une boîte ; model est le même chemin qu’en CraftScript. boxWhen(state, value, x1, y1, z1, x2, y2, z2) ajoute une boîte pour un seul état :
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)
}