本文标题:【教程】[1.14] 自定义进度:从入门到弃坑
本文链接:http://www.mcbbs.net/thread-892563-1-1.html
作 者:@Teenager_Yang 、@897412176
本帖部分内容引自 Minecraft 中文 Wiki 的 进度 和 命令 页面,并结合个人体验进行了部分修改。
如果有什么好的建议,或者本帖有什么错误,欢迎回复。
如果转载,请注明出处。切勿用于商业目的。
可参考:【1.13-1.14】数据包(原版模组)入门教程
简介

所有的自定义进度应该放置在数据包的 data/(命名空间)/advancements 文件夹下,每个 JSON 文件对应一个自定义进度,每一个根进度对应一个选项卡。(因此可以在 advancements 文件夹下,创建多个文件夹,再放入多个根进度来达到多个选项卡的效果)
注:
1、选项卡:就是图片(进度屏幕,默认按 L 键打开)里上面那一排东西
 ,这里有5个(图标从左到右依次是草方块、地图、地狱红砖、末地时和干草块)。
,这里有5个(图标从左到右依次是草方块、地图、地狱红砖、末地时和干草块)。2、根进度(文件名为 root.json):你看到那个草方块了没?(我说的是旁边连着木镐的那个),那个就是根进度!
你说那几个黄色的方格子,连起来像不像一棵树?
 对,那个就叫进度树。(根进度均位于进度树的最左边)
对,那个就叫进度树。(根进度均位于进度树的最左边)在教程正式开始之前,你需要对进度有一个大致的了解:点这里。
本节完。点击论坛界面右侧的粉色「书签」可以快速回到上方目录。
格式
概述
1.14 内进度的格式相比 1.12、1.13 没有较大改动。
一个较为复杂的自定义进度由以下几个部分组成:
- display:决定此进度在进度屏幕(默认 L 键打开)的显示效果。(就是你在前面那张图里看到的那个)
-parent:决定此进度的父进度(不适用于根进度)。
- criteria:决定完成此进度涉及的条件。(如:打僵尸、喝牛奶、放方块等)
- requirements:决定各个条件间的关系(与、或)(如:各个条件是都要完成还是挑几个完成?)。
- rewards:决定当此进度达成时获得的所有奖励。
注:
一个进度的父进度:在该进度的左侧,与该进度通过(折)线段相连的进度,如前面那张图中草方块就是木镐的父进度。子进度恰好相反。根进度没有父进度。
下面,我们一个个来讲。
本节完。点击论坛界面右侧的粉色「书签」可以快速回到上方目录。
格式
display 显示
决定一个进度在进度屏幕的显示效果。(就是你在前面那张图里看到的那个)
格式:
| (复合标签)根标签 -(复合标签)display:此进度的显示效果。可选,默认为不在进度屏幕显示。(你啥也看不见!) -(复合标签)icon:此进度显示的图标(物品)。必选。 -(字符串)item:物品的英文ID。必选。 -(字符串)nbt:物品的 Nbt 标签。可选,默认为没有 Nbt 标签。 -(字符串或复合标签)title:此进度的标题,可为JSON文本。可选,默认为标题为空。 -(字符串)frame:此进度使用的边框,一共有三种。可选,默认为普通进度边框。(就是那个黄色格子) -(字符串)background:此进度所在选项卡的背景图片,值为图片地址(仅适用于根进度)。必选。 -(字符串或复合标签)description:对此进度的描述,可为JSON文本。可选,默认为没有描述。 -(布尔型)show_toast:完成此进度后是否显示右上角的提示信息。可选,默认为是。 -(布尔型)announce_to_chat:完成此进度后是否显示聊天窗口的提示信息。(告诉所有人!)可选,默认为是。 -(布尔型)hidden:是否在进度屏幕隐藏此进度,直到此进度或此进度的一个下游进度被完成(对根进度无效)。可选,默认为否。 | 

2、一个进度的上游进度:该进度的父进度、该进度的父进度的父进度、该进度的父进度的父进度的父进度……直到根进度的统称。根进度无上游进度。
3、一个进度的下游进度:该进度的子进度、该进度的子进度的子进度、该进度的子进度的子进度的子进度……直到没有子进度的进度的统称。
例子:
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
效果:

使用了 JSON 文本的 "title" 和 "description" 的例子:
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
本节完。点击论坛界面右侧的粉色「书签」可以快速回到上方目录。
格式
parent 父进度
决定此进度的父进度(不适用于根进度)。
格式:
| (复合标签)根标签 -(字符串)parent:此进度的父进度(不适用于根进度),值为父进度的地址。必选。 | 
例子:
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
注意:这里的地址的实际位置是 data\apple\advancements\root.json 。
本节完。点击论坛界面右侧的粉色「书签」可以快速回到上方目录。
格式
criteria 和 requirements 条件
criteria:决定完成此进度涉及的条件。
requirements:决定各个条件间的关系(与、或)。
格式:
| (复合标签)根标签 -(复合标签)criteria:完成此进度涉及的条件。必选。 -(复合标签)条件名称:此条件的名称(可以为任何字符串,必须唯一)。必选。 -(字符串)trigger:此条件的触发器。必选。 -(复合标签)conditions:当触发器激活时所有需要达成的条件。必选。 -(列表)requirements:各个条件间的关系。可选,默认为完成此进度涉及的条件均要完成。 | 
criteria 决定完成此进度涉及的条件。
例子:
条件1:繁殖奶牛
条件2:从酿造台里拿出速度药水
条件3:获得至少3颗钻石
条件4:获得钻石
(条件1-4分别命名为 thing1-thing4)
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
requirements 决定各个条件间的关系。
例子:
让玩家必须在条件1和条件2中,条件3和条件4中各挑一个完成,才能达成进度,
也就是:达成进度=(条件1 或 条件2)与(条件3 或 条件4)
(条件1-4分别命名为 thing1-thing4)
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
更多关于触发器的内容,我们会在以后讲到。
格式
rewards 奖励
决定当此进度达成时获得的所有奖励。
格式:
| (复合标签)根进度 -(复合标签)rewards:当进度达成时获得的所有奖励。可选,默认为没有奖励。 -(列表)recipes:解锁的配方,值为配方列表。可选,默认为没有配方被解锁。 -(列表)loot:获得的战利品,值为战利品表列表。可选,默认为没有战利品。 -(整型)experience:获得的经验值。可选,默认为没有经验。 -(字符串)function:以进度获得者为执行者,在其所在的位置执行的函数,值为函数地址。可选,默认为没有函数。 | 
例子:
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
本节完。点击论坛界面右侧的粉色「书签」可以快速回到上方目录。
触发器
由于 Minecraft Wiki 在这一部分讲解的比较详细且较为简单,可以参考:进度/触发器列表
可根据 Wiki 给出的格式和例子自行学习。
如果例子看不懂,可以试着将例子中的英文单词翻译成中文。
当然,为了方便读者,我们也给出了例子的中文翻译。
另外,根据 ruhuasiyu 所说,对于触发器 minecraft:consume_item (食用或饮下物品)在物品是药水的情况下,无法识别药水的自定义 nbt,但可以识别 不存在的效果数字 id 。与记分版不同的是,CustomPotionEffects(自定义药水效果)在消耗之前可以被进度检测到,而记分板则是在之后。
数据标签键值数据类型 可能对你会有帮助。

本节完。点击论坛界面右侧的粉色「书签」可以快速回到上方目录。
例子
1、可通过自行解压 版本.jar 文件来获得原版的进度。
2、可参考 Wiki 或坛内 dalao 给出的例子。
3、不懂的可以去原版问答版提问。
4、下面是一个较为复杂的例子。
(条件1-4分别命名为 thing1-thing4)
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
本节完。点击论坛界面右侧的粉色「书签」可以快速回到上方目录。
advancement 命令
给予或移除玩家的进度。
语法:
| 进度 | 
| <给予 | 移除> | 
| <玩家> | 
| <只有 | 直到 | 始于 | 经过 | 全部> | 
| <进度> | 
| [条件] | 
| advancement | 
| <grant | revoke> | 
| <目标玩家> | 
| <only> | 
| <进度> | 
| [条件] | 
| <until | from | through> | 
| <everything> | 
参数:
| <grant | revoke> 说明是给予还是移除玩家的进度。grant 是给予,revoke 是移除。 <目标玩家> 说明给予或移除哪个(些)玩家的进度,必须为玩家名或目标选择器。 <only> 仅操作玩家的指定进度。 <until> 操作玩家的指定进度及其全部上游进度。 <from> 操作玩家的指定进度及其全部下游进度。 <through> 操作玩家的指定进度及其全部的上游进度和下游进度。 <everything> 操作玩家全部已载入的进度。 <进度> 指定要给予或移除的进度。必须是有效的进度地址。 [条件] 指定要操作的进度的条件。 | 
例子:
代码:
- advancement grant @s everything
代码:
- advancement revoke @s through minecraft:story/form_obsidian
代码:
- advancement revoke @s only minecraft:adventure/kill_all_mobs minecraft:zombie
本节完。
教程完。
上面有个目录,
翻页啊喂!
我写的教程竟然连怎么看都有人不知道……
这个真的算是一个纯正的水贴了,完全没有讲自定义进度如何操作
触发器 - Wiki 例子翻译
持续更新,已完成 31 个。
minecraft:bred_animals 繁殖动物
玩家繁殖两个动物时触发。
注: 倍率 = 等级 - 1
minecraft:brewed_potion 酿造药水
玩家从酿造台中拿出一瓶药水时触发。
minecraft:changed_dimension 改变维度
玩家在两个维度间旅行时触发。
minecraft:channeled_lightning 引雷
玩家成功使用引雷附魔击杀实体时触发。
没有例子。
minecraft:construct_beacon 修建信标
玩家更改信标结构时触发。
minecraft:consume_item 损耗物品
玩家损耗了物品时触发。
minecraft:cured_zombie_villager 治愈僵尸村民
玩家治愈了僵尸村民时触发。
minecraft:effects_changed 改变状态效果
玩家获得/消除状态效果时触发。
注:持续时间的单位为游戏刻,1秒=20游戏刻。
minecraft:enchanted_item 附魔物品
玩家通过附魔台附魔物品时触发(使用铁砧或命令时不触发)。
minecraft:enter_block 进入方块
玩家进入方块时触发。
minecraft:entity_hurt_player 实体伤害玩家
实体伤害玩家时触发。
minecraft:entity_killed_player 实体杀死玩家
实体杀死玩家时触发。
minecraft:filled_bucket 填充桶
玩家填充桶时触发。
没有例子。
minecraft:fishing_rod_hooked 钓鱼竿钩住
玩家成功通过钓鱼竿取得物品或者使用钓鱼竿推实体时触发。
没有例子。
minecraft:impossible 无法触发
仅可使用命令触发。
minecraft:inventory_changed 改变物品栏
玩家物品栏变化时触发。
minecraft:item_durability_changed 改变物品耐久
物品栏中任何物品以任何形式损害时触发。
minecraft:levitation 漂浮
玩家获得漂浮状态效果时触发。
minecraft:location 位置
每个游戏刻(每秒20次)检查玩家的位置。
minecraft:nether_travel 下界旅行
玩家进入下界,然后返回主世界时触发。
minecraft:placed_block 放置方块
玩家放置方块时触发。
minecraft:player_hurt_entity 玩家伤害实体
玩家伤害实体(包括自己)时触发。
minecraft:player_killed_entity 玩家杀死实体
玩家杀死实体时触发。
minecraft:recipe_unlocked 解锁配方
玩家解锁配方时触发(例如用知识之书)。
minecraft:slept_in_bed 上床睡觉
玩家上床睡觉时触发。
minecraft:summoned_entity 召唤实体
玩家召唤了实体时触发。例如通过放置方块来召唤铁傀儡、雪傀儡、末影龙和凋灵。使用发射器来放置凋灵骷髅头颅或南瓜也能激活此触发器。刷怪蛋、命令和刷怪箱不会激活此触发器。
minecraft:tame_animal 驯服动物
玩家驯服动物时触发。
minecraft:tick 每刻触发
每个游戏刻触发(每秒20次)。
minecraft:used_ender_eye 使用末影之眼
玩家使用末影之眼(在有要塞生成的世界)时触发。
minecraft:used_totem 使用图腾
玩家使用图腾时触发。
minecraft:villager_trade 村民交易
玩家与村民交易时触发。
持续更新,已完成 31 个。
minecraft:bred_animals 繁殖动物
玩家繁殖两个动物时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:brewed_potion 酿造药水
玩家从酿造台中拿出一瓶药水时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:changed_dimension 改变维度
玩家在两个维度间旅行时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:channeled_lightning 引雷
玩家成功使用引雷附魔击杀实体时触发。
没有例子。
minecraft:construct_beacon 修建信标
玩家更改信标结构时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:consume_item 损耗物品
玩家损耗了物品时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:cured_zombie_villager 治愈僵尸村民
玩家治愈了僵尸村民时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:effects_changed 改变状态效果
玩家获得/消除状态效果时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:enchanted_item 附魔物品
玩家通过附魔台附魔物品时触发(使用铁砧或命令时不触发)。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:enter_block 进入方块
玩家进入方块时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:entity_hurt_player 实体伤害玩家
实体伤害玩家时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:entity_killed_player 实体杀死玩家
实体杀死玩家时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:filled_bucket 填充桶
玩家填充桶时触发。
没有例子。
minecraft:fishing_rod_hooked 钓鱼竿钩住
玩家成功通过钓鱼竿取得物品或者使用钓鱼竿推实体时触发。
没有例子。
minecraft:impossible 无法触发
仅可使用命令触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:inventory_changed 改变物品栏
玩家物品栏变化时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:item_durability_changed 改变物品耐久
物品栏中任何物品以任何形式损害时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:levitation 漂浮
玩家获得漂浮状态效果时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:location 位置
每个游戏刻(每秒20次)检查玩家的位置。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:nether_travel 下界旅行
玩家进入下界,然后返回主世界时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:placed_block 放置方块
玩家放置方块时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:player_hurt_entity 玩家伤害实体
玩家伤害实体(包括自己)时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:player_killed_entity 玩家杀死实体
玩家杀死实体时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:recipe_unlocked 解锁配方
玩家解锁配方时触发(例如用知识之书)。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:slept_in_bed 上床睡觉
玩家上床睡觉时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:summoned_entity 召唤实体
玩家召唤了实体时触发。例如通过放置方块来召唤铁傀儡、雪傀儡、末影龙和凋灵。使用发射器来放置凋灵骷髅头颅或南瓜也能激活此触发器。刷怪蛋、命令和刷怪箱不会激活此触发器。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:tame_animal 驯服动物
玩家驯服动物时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:tick 每刻触发
每个游戏刻触发(每秒20次)。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:used_ender_eye 使用末影之眼
玩家使用末影之眼(在有要塞生成的世界)时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:used_totem 使用图腾
玩家使用图腾时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
minecraft:villager_trade 村民交易
玩家与村民交易时触发。
| 代码 | 
| 翻译 | 
| 代码: 
 | 
| 代码: 
 | 
在?
你不放飞自我了?
你不放飞自我了?