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):
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")}") }
})
}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. Anglabelang nakikita ng player; kung wala ito, ang key ang ginagamit. - Ang
buttonsay listahan ng{ id, label }o mga id lang. Nagkakaroon ng button na “OK” ang form na walang button. - Sa sagot, ang
r.buttonay ang id ng pinindot na button, onullkung isinara ng player ang form (Esc). Angr.valuesay 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
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:
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:
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)atplayer.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).
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.