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
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
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.
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
transparentmarkieren. - Alle anderen Blockeigenschaften (
hardness,light,tool,loot…) funktionieren gleich; siehe Blöcke, Gegenstände und Rezepte.
In 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
}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:
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)
}