Bedrock Wiki
  • QQ
  • 原站
新手入门指南
  • Guide
    • 1. 简介
      指南
    • 2. 附加组件详解
    • 3. 软件与准备工作
    • 4. 项目设置
    • 5. 创建自定义物品
    • 6. 创建自定义实体
    • 7. Blockbench:建模、贴图与动画制作
    • 8. 添加战利品表、生成规则与合成配方
  • Extra
    • a. 理解JSON
    • b. 下载示例包
    • c. 故障排除
      帮助
    • d. 高级清单文件指南
    • e. 格式版本
    • f. Android 项目设置
JSON UI
  • General
    • JSON UI 入门指南
      指南
    • 最佳实践
      指南
  • Tutorials
    • Aseprite 动画
    • 保留标题文本
      中级
    • 修改服务器表单
      中级
    • 字符串与数字转换
      中级
    • 按钮与开关
      新手
    • 添加HUD界面元素
      新手
  • Documentation
    • JSON UI 文档
Meta
  • Style Guide
  • 使用JSON模式(Schemas)
  • 实用链接
  • 版本控制
  • 附加包性能优化
  • Q&A
    • GameTest 问答集 2021/08/06
    • 世界生成问答 2024/11/15
    • 延迟渲染技术预览问答 2024/02/23
    • 方块与物品问答 2024/08/30
    • 脚本与编辑器问答 2023/09/22
NBT
  • General
    • .mcstructure
  • Tutorials
    • 扩展结构限制
      简单
    • 教育版中的实验功能
      简单
  • NBT in Depth
    • NBT 库列表
      专家
    • NBT读取示例
      专家
    • 关于NBT(命名二进制标签)
      专家
世界生成
  • General
    • 世界生成入门
      指南
      实验性
    • 特性类型
      实验性
    • 生物群系
      指南
      实验性
  • Tutorials
    • 特征(Feature)的方块条件
      实验性
    • 生成地表区块
      实验性
    • 生成自定义矿石
      实验性
    • 生成自定义结构
      实验性
    • 高度图噪声地形
      实验性
  • Documentation
    • 生物群系标签
动画控制器
  • 动画控制器入门指南
    指南
  • 实体命令
    中级
  • AFK检测器
  • 将Molang变量转换为计分板数值
  • 死亡指令
  • 重生指令
命令
  • General
    • 命令方块入门指南
    • 函数
    • NBT 命令
    • 坐标系
    • 方块状态
    • 理解目标选择器
    • 记分板操作
  • Commands
    • Execute
      简单
    • Playanimation
    • 伤害
    • 播放音效
  • On Event Systems
    • 玩家首次加入时
    • On Player Join
    • 玩家离开时触发
    • 玩家死亡事件
    • 玩家重生事件系统
    • 首次加载世界时
  • Scoreboard Systems
    • 实体计数器
    • 计分板计时器
    • 比较与获取分数
  • Techniques
    • 执行逻辑门
    • MBE - Max的方块实体
    • FMBE - 创建显示实体的新方法
    • 视线检测
    • 移动状态检测
    • 轨道摄像机
  • Useful Creations
    • 多人位置重排系统
      函数
    • 自定义合成台
      简单
实体
  • General
    • Intro to Entities BP
      指南
      新手
    • 实体资源包入门
      指南
      新手
    • 实体问题排查指南
      帮助
    • NPC对话系统
      中级
    • 实体事件
      新手
    • 实体属性
    • 渲染控制器
      新手
    • 生成规则
  • Tutorials
    • 任意坐标系间的坐标转换(世界、实体、骨骼)
      中级
    • 创建船只
      中级
    • 实体手持物品
      中级
    • 实体攻击机制
      中级
    • 实体睡眠机制
      中级
    • 实体碰撞体
      中级
    • 实体移动
    • 实体计时器
      中级
    • 无敌实体
      新手
    • 村庄机制实现指南
    • 检测其他实体
      中级
    • 生成已驯服的实体
      脚本
      中级
    • 视线检测实体
      中级
    • 禁用队友伤害
      中级
    • 范围效果云入门指南
      中级
    • 虚拟实体
      新手
    • 飞行实体控制
      中级
  • Documentation
    • Vanilla Usage Spawn Rules
    • 原版使用组件
    • 抛射物
    • 虚拟组件
    • 运行时标识符
    • 非生物实体运行时标识符
战利品、配方与交易
  • General
    • 交易行为
  • Documentation
    • 战利品表
    • 交易表
    • 合成配方
    • 物品函数
  • Tutorials
    • 随机化结构战利品
      简单
文档
  • Shared Constructs
  • Molang 查询详解
  • Vanilla Materials
    专家
  • 声音定义
  • 文件类型
  • 材质配置文件说明
    专家
  • 菜单分类
  • 资源包文件夹结构
  • 雾效ID
  • 高级Molang指南
方块
  • General
    • 方块入门指南
      指南
      新手
    • 方块组件
    • Block Tags
    • 方块状态
    • Block Traits
    • 方块排列组合
    • 方块事件
      脚本
    • 方块事件迁移指南
      帮助
    • 方块物品化
      中级
    • 方块问题排查指南
      帮助
  • Visuals
    • 方块剔除
      中级
    • 方块模型
      指南
      新手
      简单
    • 方块着色
      简单
    • 方块纹理动画
      中级
    • 方块纹理变体
      中级
  • Tutorials
    • Precise Interaction
      专家
      脚本
    • Precise Rotation
      专家
      脚本
    • 伪方块
      中级
    • 可旋转方块
    • 应用持续效果
      简单
      脚本
    • 矿石战利品表
      简单
      脚本
    • 规避状态值限制
      专家
  • Vanilla Re-Creations
    • 自定义作物
      中级
      脚本
    • 自定义活板门
      中级
      脚本
    • 自定义玻璃
      新手
      简单
      已弃用
    • 自定义釉面陶瓦
      简单
  • Documentation
    • 原版方块模型
      新手
    • 方块形状
    • 方块格式历史
    • 方块音效
服务器
  • Software
    • Bedrock Server Software
  • Protocols
    • Bedrock Protocol
    • NetherNet 协议
    • RakNet 协议
概念
  • contents.json
  • Molang
    中级
  • Rawtext
  • textures_list.json
  • 命名空间
  • 子包
  • 文本与本地化
  • 着色器
  • 纹理图集
    中级
  • 表情符号与特殊字符
  • 覆盖资源
    中级
  • 音效
    中级
物品
  • General
    • 物品入门指南
      指南
      新手
    • 物品组件
    • 物品标签
    • 物品事件
      脚本
    • Item Event Migration
      帮助
    • 物品问题排查指南
      帮助
  • Tutorials
    • Custom Pottery Sherds
    • 可投掷物品
      中级
    • 生成物品
      中级
    • 自定义武器
      简单
    • 自定义盔甲
    • 自定义食物
      简单
      脚本
    • 通过装备物品执行命令
      实验性
      中级
    • 高分辨率物品
  • Documentation
    • 附魔
    • Numerical Item IDs
    • Vanilla Usage Components
    • 原版物品标识符
      已弃用
    • 可附着物
      新手
    • 物品格式历史记录
视觉效果
  • General
    • 实体视觉效果简介
      指南
    • 基岩版建模指南
    • 动画中的特效
    • 基于数学的动画
      中级
    • 材质
      专家
    • 材质创作
      专家
    • 皮肤包制作指南
    • 自定义死亡动画
      中级
  • Tutorials
    • Glowing Entity Texture
    • 受伤动画
      中级
    • 实体纹理动画
      中级
    • 栓绳位置调整
      简单
    • 玩家几何模型
      新手
    • 移除实体阴影
      中级
    • 重绘生成蛋纹理
      新手
  • Ideas
    • 结构展示技巧
粒子效果
  • General
    • 粒子效果入门
      指南
  • Tutorials
    • 禁用粒子效果
      新手
  • Documentation
    • 原版粒子效果
脚本编写
  • General
    • 脚本编程入门
    • 什么是Script API?
    • API 模块
  • Tutorials
    • GameTests
      实验性
    • 简易聊天命令
      实验性
    • 脚本核心功能
    • 脚本表单
      实验性
    • 脚本请求API
      实验性
    • 阻止方块放置
  • Documentation
    • JavaScript 问题排查指南
    • Script Resources
    • Script Watchdog
      实验性
    • TypeScript
    • 引擎环境
虚拟现实
  • General
    • 启用VR模式
      指南
    • 配置资源包
      专家
  • Tutorials
    • 编辑你的第一个模型
      专家

交易表

交易表
  • 集成方式
  • 结构说明
    • 交易层级
    • 交易组
    • 交易项
    • 选项组
    • 物品定义

交易表是实体进行物品交易时的基础数据框架。交易表不能独立存在,必须通过实体组件引用。利用交易表提供的随机化特性,即使所有实体都指向同一个交易表,不同实体实例间的交易内容、物品数量和价格计算也可能各不相同。

交易表没有版本标识机制。与战利品表类似,交易表不支持Molang表达式,而是依赖JSON结构(如范围对象和功能函数)。虽然结构不同,交易表同样支持注释功能。

集成方式 ​

交易表不像方块或生物群系那样属于核心附加系统。它们不需要放置在特定目录中注册,而是通过实体引用来生效。交易表可以存放在行为包的任意位置。

TIP

建议遵循原版规范,将所有交易表统一放置在行为包根目录下的trading文件夹中。在此目录下可以自由建立子目录结构。

      • 📝minister.json
        • 📝cleric_trades.json

下文将通过这个示例文件进行详细解析:

交易表示例文件
BP/trading/minister.json
json
{
    "tiers": [
        {
            "groups": [
                {
                    "num_to_select": 1,

                    "trades": [
                        {
                            "wants": [
                                {
                                    "item": "wiki:blessing_glyph",
                                    "quantity": {
                                        "min": 2,
                                        "max": 4
                                    },

                                    "price_multiplier": 0.5
                                },
                                {
                                    "item": "minecraft:book"
                                }
                            ],
                            "gives": [
                                {
                                    "item": "minecraft:enchanted_book",
                                    "functions": [
                                        {
                                            "function": "enchant_book_for_trading",

                                            "base_cost": 4,
                                            "base_random_cost": 12,
                                            "per_level_cost": 4,
                                            "per_level_random_cost": 8
                                        }
                                    ]
                                }
                            ],
                            "max_uses": 7,

                            "trader_exp": 3
                        },
                        {
                            "wants": [
                                {
                                    "item": "wiki:crystalline_spiritite",
                                    "quantity": 32,

                                    "price_multiplier": 0.125
                                }
                            ],
                            "gives": [
                                {
                                    "item": "wiki:exalted_blade",
                                    "functions": [
                                        {
                                            "function": "enchant_with_levels",

                                            "treasure": true,
                                            "levels": {
                                                "min": 15,
                                                "max": 25
                                            }
                                        }
                                    ]
                                }
                            ],
                            "max_uses": 2,

                            "reward_exp": false,
                            "trader_exp": 8
                        }
                    ]
                }
            ]
        },
        {
            "total_exp_required": 28,

            "trades": [
                {
                    "wants": [
                        {
                            "choice": [
                                {
                                    "item": "wiki:sacred_stones",
                                    "quantity": {
                                        "min": 4,
                                        "max": 6
                                    },

                                    "price_multiplier": 0.5
                                },
                                {
                                    "item": "wiki:blessed_beads",
                                    "quantity": {
                                        "min": 16,
                                        "max": 24
                                    },

                                    "price_multiplier": 0.5
                                }
                            ]
                        }
                    ],
                    "gives": [
                        {
                            "item": "wiki:aeleon_jewels",
                            "quantity": {
                                "min": 4,
                                "max": 6
                            }
                        }
                    ],
                    "max_uses": 2
                }
            ]
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120

结构说明 ​

交易表采用无版本号、无命名空间的JSON对象结构。

#
json
{
	"tiers": [
		{
			"groups": […]
		},
		{
			"total_exp_required": 28,

			"trades": […]
		}
	]
}
1
2
3
4
5
6
7
8
9
10
11
12

交易表使用层级结构来组织交易内容。顶层必须包含"tiers"数组属性。层级在交易界面中按定义顺序显示。

交易层级 ​

层级代表可解锁的交易集合,是交易表中的最高级分组单位。

#/tiers/0
json
{
	"groups": […]
}
1
2
3
#/tiers/1
json
{
	"total_exp_required": 28,

	"trades": […]
}
1
2
3
4
5

每个层级必须包含交易组("groups")或交易项("trades")中的至少一种。若定义交易项,该层级将显示所有指定交易;若定义交易组,则根据组配置从各组中选择交易项显示。

注意

若同时定义"trades"和"groups",系统将优先采用交易组定义而忽略交易项。

同一层级中的交易项按定义顺序显示。若采用分组结构,交易组及其内部交易项也都按定义顺序排列。不同组的交易项在界面上没有视觉区分,只有不同层级之间会有明显分隔标识。

经验需求 ​

当交易者积累足够经验值时会解锁新层级。每个交易者都有独立的内置经验值系统,通过与玩家交易获得成长。单次交易获得的经验量由交易者经验奖励决定。可选属性"total_exp_required"用于设定解锁该层级所需的总经验值。

#/tiers/1/
json
"total_exp_required": 28
1

默认情况下,所需经验值等于层级索引值(从0开始)。例如第二层级需要1点经验,第三层级需要2点,以此类推。首层级始终自动解锁,不受经验阈值限制。

层级解锁机制 ​

层级按顺序逐个解锁。当新层级解锁时,系统会立即检查后续层级是否也满足经验条件,若满足则继续解锁,形成连锁反应。这种检查会在以下情况触发:(1)单次交易奖励的经验值足以解锁多个层级;(2)游戏正确更新后,初始经验值满足后续层级的解锁条件。

注意

由于层级是逐个检查的,若中间某个层级未满足条件,即使后续层级已达标也不会被检查。

初始层级经验 ​

首层级的非零经验阈值有特殊处理逻辑:若为负值,将解锁所有层级;若为正值,则将该值设为交易者的初始经验。

WARNING

当首层级设置非零经验阈值时,需要手动刷新才能使交易界面正确显示。此时需要完成一次交易或重新打开交易界面,系统才会更新显示状态(初始仅显示首层级)。

层级冻结 ​

除初始层级外,可以通过特殊设置冻结层级进度:

层级冻结示例
json
"total_exp_required": -1
1

当满足前置条件时,负经验需求的层级会正常解锁,但玩家将永远无法解锁后续层级。

交易组 ​

交易组用于为单个交易者随机选择该层级可用的交易项。

#/tiers/0/groups/0
json
{
	"num_to_select": 1,

	"trades": […]
}
1
2
3
4
5

必须通过"trades"数组定义候选交易项列表,每个元素都是一个交易项。可选属性"num_to_select"决定每组为交易者选取的交易项数量,默认为0表示选择全部交易项。

注意

交易组不支持嵌套结构实现复杂概率选择。

TIP

目前无法随机决定选取数量,也不支持按权重选择。但可以通过在数组中重复添加相同交易项来提高其被选中的概率。

交易项 ​

交易项代表交易者与玩家之间的具体交易协议。

#/tiers/0/trades/1
json
{
	"wants": […],
	"gives": […],
	"max_uses": 2,

	"reward_exp": false,
	"trader_exp": 8
}
1
2
3
4
5
6
7
8

交易项一旦被选中放入交易槽,其核心内容就不会改变。只有数量可能在某些情况下产生波动。

TIP

单个交易项定义不仅能影响交易本身。值得注意的是,实体可以根据玩家手持物品做出特定反应。

需求与给予物品 ​

交易的核心内容通过"wants"和"gives"定义:玩家提供"wants"换取"gives"。这两个属性都是必须的数组。

#/tiers/0/trades/1/
json
"wants": […],
"gives": […]
1
2

每个交易项可包含1-2个需求项,但必须恰好1个给予项。数组中的每个元素可以是物品或选项。

交易界面会根据需求物品数量自动调整布局。某些情况下(如数量修正附魔函数)只对第一个需求物品生效。

注意

若某个元素同时包含物品和选项属性,系统只会识别选项部分而忽略物品定义。

交易次数限制 ​

交易者通常有单次交易项的使用上限,超过后需要补货。数值属性"max_uses"用于配置这个上限。

#/tiers/0/trades/1/
json
"max_uses": 2
1

使用限制是每个交易项独立的。一个交易项的库存耗尽不会影响其他交易项,即使它们的需求/给予物品完全相同。默认情况下,交易者可以执行7次相同交易后才需要补货。

注意

补货行为由实体组件("minecraft:trade_resupply": {})控制。

设为0时,该交易项会显示但无法使用。设为负值时,该交易项可无限次使用。

玩家经验奖励 ​

通过布尔属性"reward_exp"可以禁用交易给玩家带来的经验球奖励。

#/tiers/0/trades/1/
json
"reward_exp": false
1

默认为true,玩家完成交易将获得经验值。奖励经验量不可配置。

交易者经验奖励 ​

数值属性"trader_exp"决定交易完成后交易者获得的经验值,这是建立层级进度系统的关键。

#/tiers/0/trades/1/
json
"trader_exp": 8
1

该属性可选,默认值为1。通过合理设置不同层级的经验奖励,可以实现非线性成长曲线。

TIP

通常高阶层的交易会设置更高经验奖励,使低阶交易对升级影响较小。

选项组 ​

选项组用于从多个物品中随机选择交易内容,每个交易者实例会独立随机。

#/tiers/1/trades/0/wants/0
json
{
	"choice": [
		{
			"item": "wiki:sacred_stones",
			…
		},
		{
			"item": "wiki:blessed_beads",
			…
		}
	]
}
1
2
3
4
5
6
7
8
9
10
11
12

选项组必须包含"choice"数组属性,其中每个元素都是物品定义。至少需要提供一个选项。

注意

选项组不支持嵌套结构。

TIP

目前无法直接设置选项权重,但可以通过重复添加相同物品来提高选中概率。

物品定义 ​

物品定义是交易的主体内容,需求与给予物品共享定义格式,但根据使用位置有不同影响。

#/tiers/1/trades/0/wants/0/choice/0
json
{
    "item": "wiki:sacred_stones",
    "quantity": {
        "min": 4,
        "max": 6
    },

    "price_multiplier": 0.5
}
1
2
3
4
5
6
7
8
9
#/tiers/0/groups/0/trades/1/gives/0
json
{
    "item": "wiki:exalted_blade",
    "functions": [
        {
            "function": "enchant_with_levels",

            "treasure": true,
            "levels": {
                "min": 15,
                "max": 25
            }
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

物品引用 ​

通过必须的"item"字符串属性指定交易物品。

#/tiers/1/trades/0/wants/0/choice/0/
json
"item": "wiki:exalted_blade"
1

必须使用有效的物品ID。可以直接在引用中添加数据值后缀:

数据值示例
json
"item": "minecraft:log:2"
1

TIP

数据值也可以通过set_data函数设置(且支持更灵活的随机化)。

对于需求物品,若未指定数据值则接受任意数据值的该物品。对于给予物品,未指定时默认为0。

物品数量 ​

可选属性"quantity"决定交易物品的数量。

#/tiers/1/trades/0/wants/0/choice/0/
json
"quantity": {
	"min": 4,
	"max": 6
}
1
2
3
4

可以是固定数值或范围对象(如上例)。使用范围时会随机选取区间内的整数值(包含边界)。未设置时默认数量为1。

注意

数量受堆叠上限限制,且只能影响单个交易槽。例如无法通过单槽要求100个木板(但可以用2个需求项实现),也无法通过单次交易给予2把无法堆叠的剑。

价格乘数 ​

"price_multiplier"决定物品基础数量在某些事件影响下的波动幅度。

#/tiers/1/trades/0/wants/0/choice/0/
json
"price_multiplier": 0.5
1

该属性可选,默认为0。系统支持新旧两套价格计算机制:现代机制仅影响第一个需求物品,旧机制可影响所有需求物品。

价格波动因素 ​

交易价格会在以下情况产生波动:

  • 多次补货后对同一物品需求增加
  • 交易者刚被治愈(如僵尸村民变回村民)
  • 附近有其他刚被治愈的交易者
  • 与拥有"村庄英雄"效果的玩家交易

除"村庄英雄"效果在使用新公式时采用固定值外,其他情况都受价格乘数影响。

价格计算公式 ​

价格乘数直接影响因需求增加导致的价格上涨。基础需求值为0且不会低于该值。当交易项耗尽后补货时需求值+1,若补货期间未发生交易则需求值-1。

仅考虑需求增长的价格计算公式如下(线性增长):

c = p × (1 + m * d)

变量说明:

变量含义
c总成本
p基础成本(含数量修正)
m价格乘数
d当前需求值

注意

其他情况的价格计算还涉及实体属性,此处不做赘述。

若乘数为0,在多数情况下数量保持恒定("村庄英雄"使用新公式时除外)。

注意

负乘数不会影响需求增长导致的价格上涨(此时乘数视为0),但会影响治愈相关事件和"村庄英雄"使用旧公式时的价格。

功能函数 ​

通过"functions"数组可以对物品进行各种修改。该属性可选。

#/tiers/0/groups/0/trades/1/gives/0/
json
"functions": [
	{
		"function": "enchant_with_levels",

		"treasure": true,
		"levels": {
			"min": 15,
			"max": 25
		}
	}
]
1
2
3
4
5
6
7
8
9
10
11

交易表与战利品表共享函数库。当用于需求物品时(受限条件),这些函数会限制需求物品的属性,且仅对第一个需求物品有效。

通用限制函数 ​

以下函数在交易表中完全无效:

  • set_count
  • furnace_smelt
  • looting_enchant
  • trader_material_type

注意

set_count的功能已被数量属性替代

trader_material_type仅在原版某个交易表中出现,理论上应根据实体的mark变种设置物品数据值,但无法自定义使用。

无效的需求物品函数 ​

以下函数用于需求物品时不会强制匹配,因此没有实际效果:

  • set_name
  • set_lore
  • set_damage
  • set_book_contents
  • random_dye
  • fill_container
数量修正附魔函数 ​

有两个函数作为给予物品使用时,会覆盖第一个需求物品的数量:

  • enchant_with_levels
  • enchant_book_for_trading

注意

虽然覆盖了数量,但所有价格波动机制仍正常运作。这些函数无法影响第二个需求物品的数量(即使使用旧公式)。若用于需求物品则不会触发数量覆盖。

附魔等级函数 ​

enchant_with_levels会像附魔台一样随机附魔物品。

贡献者

编辑 交易表

Bedrock Wiki by Bedrock OSS ,Translate by 8aka-Team

"Minecraft"是Mojang AB的注册商标。

Bedrock OSS、Bedrock Wiki以及 bedrock.dev 与Microsoft及Mojang AB不存在任何隶属关系。

  • 隐私政策
  • 加入QQ社区
  • 参与贡献指南
  • 访问代码仓库