API
ブロックの形
ブロックは立方体である必要はありません。形を 1 つ以上のボックスで記述すると、Crafting がそれを描画し、当たり判定を持たせ、満たされていない部分では光や隣接する面を通します。独自の見た目にしたい場合は、モデルを与えます。
形:ボックスの一覧
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]]
}各ボックスは、ピクセル単位の [x1, y1, z1, x2, y2, z2] で、0 から 16 まで(16 がブロック 1 つ分)です。ブロックはそのボックスで描画され、すべての面にそのテクスチャが貼られ、ボックスと衝突します。プレイヤーはボックスの上に立て、選択枠もボックスに沿います。
モデル:独自の見た目
block "lamp" {
model: "block/lamp"
shape: [[7, 0, 7, 9, 12, 9], [5, 12, 5, 11, 16, 11]]
light: 15
}| プロパティ | 値 | デフォルト |
|---|---|---|
shape |
ピクセル単位(0〜16)のボックス [x1, y1, z1, x2, y2, z2] の一覧 |
完全な立方体 |
model |
Mod のブロックモデルのパス:block/lamp は Mod の models/block/lamp.json |
shape から描画、なければ立方体 |
モデルは JSON の標準的なブロックモデルで、モデルエディターが書き出すものと同じです。参照するテクスチャは <mod id>:block/<name> と書きます。shape も指定した場合、ブロックが衝突するのは shape のほうです。指定しない場合は、完全な立方体として衝突します。
ファイルの置き場所
| Mod | 場所 |
|---|---|
| CraftScript(フォルダー) | mods/lamps/models/block/lamp.json、mods/lamps/textures/block/lamp.png |
| Kotlin または Java | src/main/resources/assets/lamps/models/block/lamp.json |
ステートによる形
shape_when は、ブロックに特定のステートのときだけ持つボックスを与えます(ブロック、アイテム、レシピのブロックステートを参照)。各キーは "state=value" で、各ステートでは、shape のボックスに、一致するすべてのキーのボックスを加えたものがブロックのボックスになります。
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]]
}
}値は、ステートが表示するとおりに書きます:トグルなら true か false、数値、名前、または north のような向きです。ボックスはブロックが衝突する対象で、選択枠もそれに沿います。各ステートでの見た目は、そのステート用のテクスチャやモデルで決まります。
知っておくと良いこと
- 立方体でないブロックは、光と隣接ブロックの面を自動的に通します。
transparentを付ける必要はありません。 - 他のブロックのプロパティ(
hardness、light、tool、loot…)はすべて同じように使えます。ブロック、アイテム、レシピを参照してください。
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
}box(x1, y1, z1, x2, y2, z2) を呼ぶたびにボックスが 1 つ追加されます。model は CraftScript と同じパスです。boxWhen(state, value, x1, y1, z1, x2, y2, z2) は、1 つのステートのためのボックスを追加します:
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)
}