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

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]]
}

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é

content/lamp.craftCraftScript
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.

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]]
    }
}

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

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
}

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 :

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)
}