API

Kształty bloków

Blok nie musi być sześcianem. Opisujesz jego kształt jako jedno lub kilka pudełek, a Crafting go rysuje, robi z niego bryłę i przepuszcza światło oraz ściany sąsiednich bloków tam, gdzie nie jest pełny. Jeśli chcesz mieć własny wygląd, nadaj mu model.

Kształt: lista pudełek

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

Każde pudełko to [x1, y1, z1, x2, y2, z2] w pikselach, od 0 do 16 (16 to cały blok). Blok jest rysowany z tych pudełek, z jego teksturą na każdej ścianie, i koliduje z nimi: gracze stoją na pudełkach, a obrys zaznaczenia ich się trzyma.

Model: własny wygląd

content/lamp.craftCraftScript
block "lamp" {
    model: "block/lamp"
    shape: [[7, 0, 7, 9, 12, 9], [5, 12, 5, 11, 16, 11]]
    light: 15
}
Właściwość Wartości Domyślnie
shape lista pudełek [x1, y1, z1, x2, y2, z2], w pikselach (0–16) pełny sześcian
model ścieżka modelu bloku z moda: block/lamp to models/block/lamp.json moda rysowany z shape albo sześcian

Model to standardowy model bloku w JSON, taki jak eksportują edytory modeli. Tekstury, do których się odwołuje, zapisuje się jako <id moda>:block/<nazwa>. Gdy podasz też shape, to kształt decyduje o kolizji bloku; bez niego blok koliduje jak pełny sześcian.

Gdzie trafiają pliki

Mod Gdzie
CraftScript (folder) mods/lamps/models/block/lamp.json, mods/lamps/textures/block/lamp.png
Kotlin lub Java src/main/resources/assets/lamps/models/block/lamp.json

Kształty zależne od stanu

shape_when daje blokowi pudełka, które ma tylko w niektórych stanach (zobacz Stany bloku w Bloki, przedmioty i receptury). Każdy klucz to "state=value"; w każdym stanie blok ma pudełka z shape oraz te z każdego pasującego klucza.

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

Wartości zapisuje się tak, jak pokazuje je stan: true lub false dla przełącznika, liczba, nazwa albo kierunek, na przykład north. Pudełka to to, z czym blok koliduje i czego trzyma się jego obrys; jak wygląda w każdym stanie, zależy od jego tekstur lub modeli dla tego stanu.

Warto wiedzieć

  • Blok, który nie jest sześcianem, sam przepuszcza światło i ściany sąsiadów; nie musisz oznaczać go jako transparent.
  • Wszystkie pozostałe właściwości bloku (hardness, light, tool, loot…) działają tak samo; zobacz Bloki, przedmioty i receptury.

W Kotlinie

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
}

Każde box(x1, y1, z1, x2, y2, z2) dodaje pudełko; model to ta sama ścieżka co w CraftScript. boxWhen(state, value, x1, y1, z1, x2, y2, z2) dodaje pudełko dla jednego stanu:

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