API

Blockformen

Ein Block muss kein Würfel sein. Du beschreibst seine Form als eine oder mehrere Boxen, und Crafting zeichnet ihn, macht ihn fest und lässt Licht und die Flächen der Nachbarn dort durch, wo er nicht voll ist. Für ein ganz eigenes Aussehen gibst du ihm ein Modell.

Form: eine Liste von Boxen

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

Jede Box ist [x1, y1, z1, x2, y2, z2] in Pixeln, von 0 bis 16 (16 ist ein ganzer Block). Der Block wird aus diesen Boxen gezeichnet, mit seiner Textur auf jeder Fläche, und kollidiert mit ihnen: Spieler stehen auf den Boxen, und der Auswahlrahmen folgt ihnen.

Modell: ein eigenes Aussehen

content/lamp.craftCraftScript
block "lamp" {
    model: "block/lamp"
    shape: [[7, 0, 7, 9, 12, 9], [5, 12, 5, 11, 16, 11]]
    light: 15
}
Eigenschaft Werte Standard
shape Liste von Boxen [x1, y1, z1, x2, y2, z2], in Pixeln (0–16) ein ganzer Würfel
model Pfad eines Blockmodells der Mod: block/lamp ist models/block/lamp.json der Mod aus shape gezeichnet, oder ein Würfel

Das Modell ist ein Standard-Blockmodell in JSON, wie es ein Modelleditor exportiert. Texturen, auf die es verweist, schreibst du als <Mod-ID>:block/<Name>. Gibst du zusätzlich shape an, kollidiert der Block mit dieser Form; ohne sie kollidiert er als ganzer Würfel.

Wohin die Dateien kommen

Mod Wo
CraftScript (Ordner) mods/lamps/models/block/lamp.json, mods/lamps/textures/block/lamp.png
Kotlin oder Java src/main/resources/assets/lamps/models/block/lamp.json

Formen je nach Zustand

shape_when gibt einem Block Boxen, die er nur in manchen seiner Zustände hat (siehe Blockzustände in Blöcke, Gegenstände und Rezepte). Jeder Schlüssel ist "state=value"; in jedem Zustand hat der Block die Boxen von shape plus die jedes passenden Schlüssels.

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

Die Werte werden so geschrieben, wie der Zustand sie zeigt: true oder false für einen Schalter, eine Zahl, ein Name oder eine Richtung wie north. Die Boxen sind das, womit der Block kollidiert und dem seine Umrisslinie folgt; wie er in jedem Zustand aussieht, kommt von seinen Texturen oder Modellen für diesen Zustand.

Gut zu wissen

  • Ein Block, der kein Würfel ist, lässt Licht und die Flächen seiner Nachbarn von selbst durch; du musst ihn nicht als transparent markieren.
  • Alle anderen Blockeigenschaften (hardness, light, tool, loot…) funktionieren gleich; siehe Blöcke, Gegenstände und Rezepte.

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
}

Jedes box(x1, y1, z1, x2, y2, z2) fügt eine Box hinzu; model ist derselbe Pfad wie in CraftScript. boxWhen(state, value, x1, y1, z1, x2, y2, z2) fügt eine Box für einen Zustand hinzu:

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