API

Formas de bloque

Un bloque no tiene por qué ser un cubo. Describes su forma como una o varias cajas, y Crafting lo dibuja, lo hace sólido y deja pasar la luz y las caras de los vecinos donde no está lleno. Para un aspecto propio, dale un modelo.

Forma: una lista de cajas

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

Cada caja es [x1, y1, z1, x2, y2, z2] en píxeles, de 0 a 16 (16 es un bloque entero). El bloque se dibuja con esas cajas, con su textura en todas las caras, y choca con ellas: los jugadores se paran sobre las cajas y el contorno de selección las sigue.

Modelo: un aspecto propio

content/lamp.craftCraftScript
block "lamp" {
    model: "block/lamp"
    shape: [[7, 0, 7, 9, 12, 9], [5, 12, 5, 11, 16, 11]]
    light: 15
}
Propiedad Valores Por defecto
shape lista de cajas [x1, y1, z1, x2, y2, z2], en píxeles (0–16) un cubo entero
model ruta de un modelo de bloque del mod: block/lamp es models/block/lamp.json del mod se dibuja con shape, o un cubo

El modelo es un modelo de bloque estándar en JSON, como los que exporta un editor de modelos. Las texturas a las que se refiere se escriben como <id del mod>:block/<nombre>. Si también pones shape, la forma es con lo que el bloque choca; sin ella, el bloque choca como un cubo entero.

Dónde van los archivos

Mod Dónde
CraftScript (carpeta) mods/lamps/models/block/lamp.json, mods/lamps/textures/block/lamp.png
Kotlin o Java src/main/resources/assets/lamps/models/block/lamp.json

Formas según el estado

shape_when da a un bloque cajas que solo tiene en algunos de sus estados (ver Estados de bloque en Bloques, ítems y recetas). Cada clave es "estado=valor"; en cada estado el bloque tiene las cajas de shape más las de cada clave que coincida.

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

Los valores se escriben como los muestra el estado: true o false para un interruptor, un número, un nombre o una dirección como north. Las cajas son con lo que el bloque colisiona y lo que sigue su contorno; cómo se ve en cada estado viene de sus texturas o modelos para ese estado.

Lo que conviene saber

  • Un bloque que no es un cubo deja pasar por sí solo la luz y las caras de sus vecinos; no hace falta marcarlo como transparent.
  • Todas las demás propiedades del bloque (hardness, light, tool, loot…) funcionan igual; ver Bloques, ítems y recetas.

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
}

Cada box(x1, y1, z1, x2, y2, z2) añade una caja; model es la misma ruta que en CraftScript. boxWhen(state, value, x1, y1, z1, x2, y2, z2) añade una caja para un estado:

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