API

Formas de blocos

Um bloco não precisa ser um cubo. Você descreve a forma dele como uma ou mais caixas, e o Crafting o desenha, o torna sólido e deixa passar a luz e as faces dos blocos vizinhos onde ele não é cheio. Para um visual só seu, dê a ele um modelo.

Forma: uma lista de caixas

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 caixa é [x1, y1, z1, x2, y2, z2] em pixels, de 0 a 16 (16 é um bloco inteiro). O bloco é desenhado com essas caixas, com a textura dele em cada face, e colide com elas: os jogadores ficam em pé sobre as caixas e o contorno de seleção as acompanha.

Modelo: um visual só seu

content/lamp.craftCraftScript
block "lamp" {
    model: "block/lamp"
    shape: [[7, 0, 7, 9, 12, 9], [5, 12, 5, 11, 16, 11]]
    light: 15
}
Propriedade Valores Padrão
shape lista de caixas [x1, y1, z1, x2, y2, z2], em pixels (0–16) um cubo inteiro
model caminho de um modelo de bloco do mod: block/lamp é o models/block/lamp.json do mod desenhado a partir de shape, ou um cubo

O modelo é um modelo de bloco padrão em JSON, como os que um editor de modelos exporta. As texturas a que ele se refere são escritas como <id do mod>:block/<nome>. Se houver também shape, é a forma que define a colisão do bloco; sem ela, o bloco colide como um cubo inteiro.

Onde ficam os arquivos

Mod Onde
CraftScript (pasta) mods/lamps/models/block/lamp.json, mods/lamps/textures/block/lamp.png
Kotlin ou Java src/main/resources/assets/lamps/models/block/lamp.json

Formas por estado

shape_when dá a um bloco caixas que ele só tem em alguns dos seus estados (veja Estados de bloco em Blocos, itens e receitas). Cada chave é "estado=valor"; em cada estado o bloco tem as caixas de shape mais as de cada chave que combina.

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

Os valores são escritos como o estado os mostra: true ou false para um interruptor, um número, um nome ou uma direção como north. As caixas são aquilo com que o bloco colide e o que o seu contorno segue; a aparência em cada estado vem das suas texturas ou modelos para esse estado.

Bom saber

  • Um bloco que não é um cubo deixa passar sozinho a luz e as faces dos vizinhos; você não precisa marcá-lo como transparent.
  • Todas as outras propriedades do bloco (hardness, light, tool, loot…) funcionam do mesmo jeito; veja Blocos, itens e receitas.

Em 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) adiciona uma caixa; model é o mesmo caminho do CraftScript. boxWhen(state, value, x1, y1, z1, x2, y2, z2) adiciona uma caixa para um 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)
}