API

Ang interface

Mga form na pinupunan ng player at mga elemento sa screen: boss bar at sidebar. Gumagana ang lahat ng ito sa anumang client, may naka-install mang Crafting o wala.

Mga form

May title, body text, mga field at mga button ang isang form. Idinedeklara mo ito sa isang file sa ilalim ng ui/ at ipinapakita kung saan mo kailangan (isang command, isang event, kapag ginamit ang isang item):

ui/shop.craftCraftScript
import { give_rubies } from "/lib/rewards"

const SHOP = form("Ruby shop", {
    body: "Rubies cost 10 emeralds each.",
    fields: [
        { slider: "amount", label: "Rubies", min: 1, max: 16, default: 1 },
        { toggle: "gift", label: "Wrap as a gift" },
        { choice: "pouch", label: "Pouch", options: ["leather", "silk"] },
        { text: "note", label: "Note" }
    ],
    buttons: [{ id: "buy", label: "Buy" }, "cancel"]
})

fun open_shop(p: Player) {
    p.show_form(SHOP, fun(r) {
        if r.button != "buy" { return }                  // closed with Esc or cancelled
        let n = int(r.number("amount") ?? 1)
        if p.inventory.count("minecraft:emerald") < n * 10 { p.send("&cNot enough emeralds"); return }
        give_rubies(p, n)
        if r.toggle("gift") { p.send("&dWrapped in {r.choice("pouch")}: {r.text("note")}") }
    })
}
commands/shop.craftCraftScript
import { open_shop } from "/ui/shop"

command shop describe "Buy rubies" {
    if player == null { return "Players only" }
    open_shop(player)
}
Patlang Paano isinusulat Paano binabasa
Text { text: "note", label: "Note", default: "" } r.text("note")
Toggle { toggle: "gift", label: "It's a gift", default: false } r.toggle("gift")
Slider { slider: "amount", label: "Amount", min: 1, max: 64, step: 1, default: 8 } r.number("amount")
Pagpipilian { choice: "color", label: "Color", options: ["red", "blue"], default: "red" } r.choice("color")
  • Gumagamit ng maliliit na titik, digit at _ ang key ng bawat field. Ang label ang nakikita ng player; kung wala ito, ang key ang ginagamit.
  • Ang buttons ay listahan ng { id, label } o mga id lang. Nagkakaroon ng button na “OK” ang form na walang button.
  • Sa sagot, ang r.button ay ang id ng pinindot na button, o null kung isinara ng player ang form (Esc). Ang r.values ay map na may lahat ng field.
  • Dumarating ang sagot sa function na ipinapasa mo sa show_form; patuloy na tumatakbo ang natitirang bahagi ng server habang nagpapasya ang player.

Sa Kotlin

ui/ShopForm.ktKotlin
package com.example.rubies.ui

object ShopForm {
    private val form = Form("Ruby shop").apply {
        body = "Rubies cost 10 emeralds each."
        slider("amount", "Rubies", 1.0, 16.0, default = 1.0)
        toggle("gift", "Wrap as a gift")
        choice("pouch", "Pouch", listOf("leather", "silk"))
        text("note", "Note")
        button("buy", "Buy")
        button("cancel", "Cancel")
    }

    fun show(player: Player) = player.showForm(form) { r ->
        if (r.button != "buy") return@showForm                 // closed with Esc or cancelled
        val n = (r.number("amount") ?: 1.0).toInt()
        if (player.inventory.count(Identifier.parse("minecraft:emerald")) < n * 10) { player.send("&cNot enough emeralds"); return@showForm }
        player.give(ItemStack.of(Items.RUBY, n))
        if (r.toggle("gift") == true) player.send("&dWrapped in ${r.choice("pouch")}: ${r.text("note")}")
    }
}

Form(title) na may body, text(key, label, default, maxLength), toggle(key, label, default), slider(key, label, min, max, step, default), choice(key, label, options, default) at button(id, label). Tumatanggap ang player.showForm(form) { r -> … } ng FormResponse na may button, values at text, toggle, number, choice.

Mga boss bar

Isang bar sa itaas ng screen, may title, kulay, progress at style. Gamitin ito para sa timer, event ng server o health ng isang bagay:

events/countdown.craftCraftScript
const TIMER = server.boss_bar("rubies:countdown", "&cRuby rush", "red", "segments_10")
let left = 60

on join { TIMER.show(player) }

every 1 second {
    left = max(0, left - 1)
    TIMER.progress = left / 60
    TIMER.title = "&cRuby rush: {left}s"
    if left == 0 { TIMER.remove() }
}
Miyembro Ano ang ginagawa nito
server.boss_bar(id, title?, color?, style?) Ginagawa ang bar o ibinabalik ang dati nang may ganoong id. Isang id bawat bar: hindi ito nadodoble kapag nag-reload ang mod.
bar.progress Mula 0 hanggang 1.
bar.title Ang text, may mga kulay na &.
bar.color pink, blue, red, green, yellow, purple, white.
bar.style solid, segments_6, segments_10, segments_12, segments_20.
bar.show(player), bar.hide(player) Kung sino ang nakakakita nito. Inililista sila ng bar.players.
bar.remove() Inaalis ito para sa lahat at pinapalaya ang id.

Sa Kotlin: Crafting.server?.bossBar("rubies:countdown", "Time", BarColor.RED, BarStyle.SEGMENTS_10), na may parehong mga property sa camelCase.

Panel sa gilid

Listahan ng hanggang 15 linya sa kanang bahagi ng screen, iba-iba para sa bawat player. Tawagin itong muli para i-update:

events/welcome.craftCraftScript
import { visits } from "/lib/storage"

on join {
    player.set_sidebar("&6Rubies", [
        "&fMga visit: &e{visits(player)}",
        "&fRubies: &c{player.inventory.count("rubies:ruby")}"
    ])
}
  • Ipinapakita o ina-update ito ng player.set_sidebar(title, lines); ang player na iyon lang ang nakakakita nito. Mga kulay gamit ang &.
  • Inaalis ito ng player.clear_sidebar().
  • Sa Kotlin: player.setSidebar(title, lines) at player.clearSidebar().

Mga key ng mod

Ang isang mod ay maaaring magdagdag ng sarili nitong mga key. Ideklara ang mga ito gamit ang key at tumugon gamit ang on key, na tumatakbo sa server para sa player na pumindot. Ang e.key ay ang id na may namespace ng mod (dashmod:dash).

content/keys.craftCraftScript
key "dash" { label: "Dash", default: "R" }
key "heal" { label: "Second wind", default: "G" }

on key(e) {
    let p = e.player
    if e.key == "dashmod:dash" && !p.has_cooldown("minecraft:feather") {
        let d = p.direction
        p.velocity = vector(d.x * 1.6, 0.35, d.z * 1.6)
        p.set_cooldown("minecraft:feather", 2)
    }
    if e.key == "dashmod:heal" { p.heal(6) }
}

Lumalabas ang mga key sa Options > Controls > Key Binds, sa isang seksyong ipinangalan sa mod. Maaaring baguhin ng mga player ang mga ito, at nananatili ang kanilang pinili. Ang default ay pangalan ng key tulad ng "R", "G", "F6" o "LEFT_ALT".

Kailangang naka-install ang Crafting sa laro ng mga player para magkaroon ng mga key. Sa Kotlin: ContentBuilder.key("dash", label = "Dash", default = "R") at Crafting.events.on<PlayerKeyEvent> { e -> … }.

Mabuting malaman

  • Nakikita ng anumang client ng Minecraft Java 26.3 ang mga form, bar at sidebar, may Crafting man o wala. Magagamit ito ng mod sa server nang walang kailangang mag-install ng anuman.
  • Nasa Ang mundo at ang mga manlalaro ang mga title, action bar at mensahe sa chat.
  • Wala pa ang sariling screen na may sarili mong layout (mga menu, inventory ng makina); tingnan ang roadmap.