API
Виды блоков
Блок может быть одним из видов блоков игры: лестницей, которая соединяется на углах, дверью высотой в два блока, забором, который соединяется с соседями, сундуком, табличкой, посевом, рудой. Укажи kind, и блок создастся как игровой блок этого вида, с его формой, состояниями и поведением, но с твоей текстурой.
Виды и материалы
block "jade_bricks" { hardness: 2, tool: "pickaxe" }
block "jade_stairs" { kind: "stairs", base: "jade_bricks", texture: "mymod:block/jade_bricks" }
block "jade_slab" { kind: "slab", texture: "mymod:block/jade_bricks" }
block "jade_wall" { kind: "wall", texture: "mymod:block/jade_bricks" }
block "willow_log" { kind: "pillar", material: "wood", sound: "wood" }
block "willow_door" { kind: "door", material: "wood", sound: "wood" }
block "jade_door" { kind: "door", material: "metal" }
block "willow_fence" { kind: "fence", material: "wood", texture: "mymod:block/willow_planks" }| Вид | Что это |
|---|---|
cube |
обычный блок (по умолчанию) |
pillar |
бревно или колонна: лежит вдоль оси, по которой её поставили |
slab, stairs, wall, fence, fence_gate |
строительные блоки, которые соединяются с соседями, как игровые. Лестница берёт блок, из которого она сделана, из base |
door, trapdoor, button, pressure_plate |
двери высотой в два блока; нажимная плита либо включена, либо выключена |
leaves, lantern, vine, ladder, carpet, bars, chain |
решётки и панели тонкие и соединяются с соседями; цепь лежит вдоль оси, по которой её поставили |
plant, water_plant, crop |
растения (ниже) |
barrel, bookshelf, chiseled_bookshelf, shelf, composter, crafting_table, chest, furnace |
блоки, которые работают (ниже) |
sign, hanging_sign |
таблички (ниже) |
path, ore |
тропы и руды (ниже) |
material — это stone (по умолчанию), wood или metal, для видов, где это важно: деревянная дверь или люк открывается рукой, металлическая только редстоуном. Полублоки, лестницы, заборы, кнопки, плиты и колонны тоже создаются как игровые из этого материала.
Что блок берёт у игрового блока. Без собственных файлов блок вида берёт состояния блока и модели игры с твоей texture (по умолчанию textures/block/<id>.png), его предмет, его дроп и его теги: заборы соединяются с заборами, брёвна считаются брёвнами, дверь выдаёт один предмет. Если игровой блок использует несколько текстур, берётся твоя текстура с тем же окончанием, когда она есть в моде: <id>_top.png и <id>_bottom.png для двери, <id>_top.png для колонны, <id>_front.png и <id>_front_on.png для печи. Если у блока есть собственные модели, добыча или теги, используются они. hardness, sound, light и другие свойства со страницы Блоки, предметы и рецепты работают как у любого блока.
Растения и посевы
block "glow_grass" { kind: "plant", hardness: 0, grows_on: ["#minecraft:dirt", "mymod:glow_moss"] }
block "reed" { kind: "water_plant", hardness: 0 }
block "rice" { kind: "crop", hardness: 0 }plant: рисуется как два скрещённых изображения, как трава, цветок, гриб или саженец. Ничто с ним не сталкивается, и ему нужна земля.water_plant: растение, которое растёт под водой, как морская трава.crop: растёт по возрастам от 0 до 3 само и от костной муки. Его состояниеageможно прочитать черезblock.state("age"), а<id>_stage0.png…<id>_stage3.png— его текстуры в каждом возрасте.
grows_on перечисляет блоки, на которых оно стоит: id или теги, например #minecraft:dirt. Без него растение растёт там, где растёт игровое растение того же вида (посев — на грядке). Растение, у которого пропала земля, ломается.
Блоки, которые работают
block "willow_barrel" { kind: "barrel", sound: "wood" }
block "willow_chest" { kind: "chest", sound: "wood" }
block "willow_bookshelf" { kind: "bookshelf", sound: "wood" }
block "jade_furnace" { kind: "furnace", hardness: 3.5, tool: "pickaxe" }Они хранят свои предметы, открывают свой экран и работают как игровые: бочка вмещает 27 стаков, резной книжный шкаф — 6 книг, полка — 3 предмета, компостер наполняется, верстак крафтит, печь плавит и горит, пока работает.
chest рисуется с textures/entity/chest/<id>.png, а два сундука рядом образуют двойной сундук, который рисуется с <id>_left.png и <id>_right.png в той же папке. Они устроены так же, как текстуры игровых сундуков.
Таблички
block "willow_sign" { kind: "sign", sound: "wood" }
block "willow_hanging_sign" { kind: "hanging_sign", sound: "wood" }Игроки пишут на них, как на игровых. Объявляя табличку, ты объявляешь и её настенную форму, блок, который её предмет ставит на стену: к jade_sign прилагается jade_wall_sign, а к jade_hanging_sign — jade_wall_hanging_sign. Через wall этот id задаёшь ты сам. Настенная форма выдаёт табличку. Подвесная табличка висит под блоком, а её настенная форма — сбоку от блока.
Тропы и руды
block "moss_path" { kind: "path", base: "minecraft:moss_block" }
block "jade_ore" { kind: "ore", hardness: 3, tool: "pickaxe", tier: "iron", xp: [1, 4] }path чуть ниже блока, как игровая тропинка. Лопата делает её из base, если сверху воздух. Она снова становится своим base, когда её накрывает блок, и выдаёт свой base.
ore даёт опыт, когда его ломают без шёлкового касания: xp — число или [min, max]. Чтобы он выпадал сам с шёлковым касанием и давал больше с удачей, смотри «Дроп: инструменты и удача» на странице Блоки, предметы и рецепты.
Прикреплённые блоки
С attached: true блок крепится к блоку, к которому его поставили, и ломается, когда тот пропадает. Эти свойства работают у любого блока, с видом или без.
block "crystal_shard" {
attached: true
states: ["facing_all"]
model: "block/crystal_shard"
}
block "glow_bulb" {
attached: true
floor_state: "standing"
states: ["standing"]
light: 12
}- С состоянием
"facing"или"facing_all"он смотрит от того, что его держит:facing_allсмотрит ещё вверх и вниз, так что осколок может стоять на полу, на стене или на потолке (см. «Состояния блока» на странице Блоки, предметы и рецепты). floor_stateназывает состояние-переключатель, которое включено, когда блок стоит на полу, и выключено, когда он висит на потолке, как у фонаря. Объяви этот переключатель и вstates.
Сиденья и блоки высотой в два
block "stool" { seat: 9, shape: [[3, 0, 3, 13, 9, 13]] }
block "throne" {
model: "block/throne"
seat: 10
upper: "top"
states: ["facing", "top"]
}seat позволяет игрокам садиться на блок кликом пустой рукой, на столько пикселей выше его низа (от 0 до 16; у стула около 10). Если у блока есть on_use, который забирает клик, игрок не садится.
upper делает блок высотой в два блока, как дверь или высокий стул: он называет состояние-переключатель, которое включено в его верхней половине. Когда сверху есть место, при установке ставятся обе половины, при разрушении одной ломаются обе, а выдаёт блок только нижняя половина. На двухблочное сиденье садятся на нижней половине. Объяви этот переключатель и в states. У верхней половины свой облик, как у любого состояния: здесь это models/block/throne_top.json.
Растения в столбик
block "glow_vine" {
plant: true
column: "hanging"
states: [{ shape: ["top", "middle", "bottom"] }]
}column заставляет растение расти столбиком, как свисающая лоза. Его состояние shape следует за таким же растением сверху и снизу: bottom, если снизу нет, top, если нет сверху, middle между ними. Объяви его в states как { shape: ["top", "middle", "bottom"] }; текстуры <id>_middle.png и <id>_bottom.png — его облик в этих местах.
hanging: свисает с блока сверху, которым может быть такое же растение, листва или блок, твёрдый снизу.standing: стоит на своей земле (grows_on) или на таком же растении.
Без того, что его держит, оно ломается, а растения, которые на нём висят или стоят, пропадают вместе с ним.
Свойства
| Свойство | Значения | По умолчанию |
|---|---|---|
kind |
один из видов выше | cube |
material |
stone, wood, metal |
stone |
base |
для лестниц и троп: блок, из которого они сделаны, твой или игровой | — |
grows_on |
для растений: id блоков и теги | земля его вида |
wall |
для табличек: id настенной формы | jade_sign → jade_wall_sign |
xp |
для руд: число или [min, max] |
— |
attached |
крепится к блоку, к которому поставлен | false |
floor_state |
вместе с attached: переключатель, который включён, когда блок стоит на полу |
— |
seat |
пикселей выше низа блока, где сидят игроки (0–16) | не сиденье |
upper |
высота в два блока: переключатель, который включён в верхней половине | — |
column |
hanging или standing |
— |
На Kotlin
block("jade_stairs") { kind = BlockKind.STAIRS; base = "jade_bricks"; texture = "mymod:block/jade_bricks" }
block("willow_door") { kind = BlockKind.DOOR; material = BlockMaterial.WOOD; sound = SoundGroup.WOOD }
block("glow_grass") { kind = BlockKind.PLANT; growsOn = listOf("#minecraft:dirt") }
block("jade_ore") { kind = BlockKind.ORE; xp = 1..4 }
block("crystal_shard") { attached = true; facingAll() }
block("throne") {
seat = 10
upper = "top"
facing()
toggle("top")
}
block("glow_vine") {
plant = true
column = Column.HANGING
choice("shape", "top", "middle", "bottom")
}Виды находятся в BlockKind, а материалы — в BlockMaterial. У остальных свойств те же имена в camelCase: growsOn, floorState, xp = 1..4, column = Column.HANGING. Состояния объявляют facingAll() и choice(name, …).