跳到主要内容

Group 与 Option

Group 定义选择方式和组计数,Option 定义单项数量、价格、条件与奖励。两者都不写 key;公式别名从完整注册 ID 自动生成。

Group​

文件为 data/<namespace>/spb/group/<path>.json。

字段类型必填默认值作用
title文本组件是—组标题
description文本组件否无组说明
modesingle / multiple是—单选或多选
count_modedistinct / total否distinct已选种类数或总份数
min_countNumberProvider否0最少组计数,向上取整
max_countNumberProvider否单选 1,多选为组容量最多组计数,向下取整
visible_conditionSaturn EntityCondition否始终显示整组的显示条件
optionsOption ID 或 #tag 数组是—选项及显示顺序
data/example/spb/group/profession.json
{
"title": {"text": "职业"},
"mode": "single",
"min_count": 1,
"max_count": 1,
"options": ["example:warrior", "example:scholar"]
}

single 总是最多选一项,组内每个 Option 的 hard_max 必须是 1。选择新项会在一次编辑中清除旧项。min_count: 1 表示必选;省略时允许不选。

多选组中,若训练选了 4 份、弓术选了 1 份,则 distinct 计数为 2,total 为 5。多选组的默认容量分别为选项种类数或各项 hard_max 之和。显式最大值仍受组容量限制。

动态上限例如 "max_count": "1 + selected_example_scholar":选择学者后,多选组名额从 1 变为 2。上下限必须产生合法非负范围;无效范围阻止完成。

Option​

文件为 data/<namespace>/spb/option/<path>.json。

字段类型必填默认值作用
name文本组件是—选项名称
description文本组件否无悬停说明
iconSaturn IconReference否无物品或纹理图标
hard_max正整数否1固定硬上限,也是网络编辑的数量边界
min_countNumberProvider否1选中时最少份数,向上取整
max_countNumberProvider否hard_max动态最大份数,向下取整并受硬上限限制
visible_conditionSaturn EntityCondition否始终显示是否显示
enabled_conditionSaturn EntityCondition否始终可用是否允许增加;允许取消已选项
validation_rules校验规则数组否[]已选时检查的前置、互斥或组合规则
resource_changes已定义 resource ID → NumberProvider否{}每份选择贡献的有符号数值
outcomesOutcome 数组否[]选中且条件通过时的提交奖励
data/example/spb/option/strength.json
{
"name": {"text": "力量训练"},
"icon": {"id": "minecraft:iron_pickaxe"},
"hard_max": 4,
"min_count": 1,
"max_count": "2 + 2 * selected_example_warrior",
"resource_changes": {"example:points": -1, "example:strength": 1}
}

选中战士时最多 4 份,否则 2 份。每份减少 1 点预算、增加 1 点力量。引用的选项和资源需在 Plan 中可用;本例是完整示例的一个选项。

q=0 始终表示未选,不要求满足 Option 的 min_count。要强制玩家选择,使用 Group 的 min_count 或完成规则。购买多份只将 resource_changes 乘以份数,奖励不会自动复制。

物品图标写成对象 {"id":"minecraft:iron_sword"};裸字符串会被 Saturn 当作纹理 ID。更多格式见通用数据类型。

显示、可用和校验规则​

visible_condition 控制显示,enabled_condition 控制能否增加,validation_rules 允许保留暂时不合法的选择但阻止确认。规则格式如下,放在 Option 中:

{
"validation_rules": [
{
"key": "requires_warrior",
"condition": {
"type": "spb:compare",
"left": "selected_example_warrior",
"operator": ">=",
"right": 1
},
"message": {"text": "需要先选择战士。"}
}
]
}

规则中的 key 与 condition 必填,message 可选,省略时显示包含 key 的失败提示。互斥可比较 selected_example_a + selected_example_b <= 1,并将规则放在相关选项上;定义这两个 ID 后再引用。

隐藏不会免除数量或规则检查。已选项变为隐藏、不可用或超过动态上限时仍保留数量,在界面中提供移除入口。修改前置后完整重算,不自动取消其他选择,也不按旧价格反向退款。