乙烯_中国
本帖最后由 乙烯_中国 于 2017-4-11 15:40 编辑

好的,这里是乙烯。整篇文章差不多是自己开着mc一点点就着原文件和wiki自己试出来的,如果有分歧或者谬误还请指出。由于草稿一不小心发出来了,这就没办法了,剩下的一点内容我会爆肝写完的。


新快照出了几天了,advancement这个替换成就的新的系统大家都很感到新奇,正巧这次快照更新有添加一些相关内容,今天我乙烯就来和大家说一说这样的一个新的系统要怎样的玩耍。那么我们先来简单的介绍一下吧。(其中部分资料源自Minecraft Wiki,英文的
什么是advancement?

这就是advancement。(迫真)


好了,这是一个替换了成就系统的新的成就系统,嗯,大概这么看的话好像是看不出和原来的区别有多大?好像确实不大,但是现在通过这样的整理可以很方便的使用json来自定义advancement。而且你也可以很方便的添加选项卡,是不是很厉害!然后成就还是需要你逐步解锁的,不过目前的成就还不能写注解,所以很sad。
完成advancement的时候右上角会有提示,并且支持多条提示


同样的,原来的成就指令achievement也被替换成advancement,这个的用法我们之后会说到。
如何自定义advancement
整个自定义推荐直接从0自己写,如果要基于官方的修改的话,请在完全熟悉系统以及官方成就的情况下修改。
据dinnerbone在推特上说,自定义advancement是与存档绑定的,也就是说相关的自定义文件要放在存档根目录的data/advancement里。是自定义里的豪杰。我们通过解压游戏的version jar可以很容易的确定这样的一个格式
  1. advancement
  2.      adventure
  3.      recipes
  4.      story
复制代码


如何创建一个选项卡

这里就不复述中间的过程直接上结论了。这里除了recipes每一个文件夹都被视为一个单独的选项卡。如果要创建一个新的选项卡请在advancement文件夹下新建一个新的文件夹,文件夹名字从简为佳,允许存在中文但是个人并不推荐。在这个选项卡的advancement如果没有解锁的话,那么这个选项卡是不会显示的。
Recipes文件夹我暂时还没有时间进行详细的实验,但是据源码观察是利用了成就的系统决定了合成表的解锁链,比如我在进入了水(船合成表的解锁条件之一)后便解锁了船的合成,在我使用合法的格式编辑了面包的json后,进入水中便解锁了面包的合成。所以工作原理是一样的。也就是说,合成虽然暂时不能自定义,但是合成链的解锁已经可以自定义了
创建一个选项卡除了新建一个文件夹,还要求这个选项卡有一个起始成就(下文称之为根成就),并且这个起始成就不能成为任何一个成就的子成就。如果这个成就是一个其他选项卡的子成就的话,显示上不仅不会显示新建选项卡,该成就以及其子成就还会显示到其他选项卡下面。这是我们不想要的。

大概加多了会这样。
当然这时候你们大概会说了:“哎呀我们不知道怎么写成就啊”,这个你们不要急,我们马上来说。
如何写一个单独的advancement
如果你已经按照上文操作,并自己写了成就的话,你的页面大概回事这个样子的。别急,这说明你的成就已经写的很接近了,让我们来看看成就应有的标准格式。

首先,要明确的是,大致会使用json格式是自定义成就的前提条件。所以让我们来简单介绍一下json格式。
这里我就折叠一下。


好的,这里就让我们来讲一下成就的结构是怎样的。下文均为小写,辣鸡word自动给我大写了,还有全文的引号必须为半角的引号,我这里尽量自己修一修,但word看不太出来。
  1. Display
  2.     Icon
  3.     Title
  4.     Frame
  5.     Background
  6. Parent
  7. Criteria
  8.     条件名
  9.         Trigger
  10.         Conditions
  11. Requirement
  12. Rewards
  13.     Recipes
  14.     Loot
  15.     Experience
复制代码



好,接下来逐条讲解.


display
Display其下所有的都用于设置这个成就是如何显示的。


parent

criteria

Requirement

Rewards

自此全标签讲解完成,留待二楼仔细说明判据,可能会在最后放出一个单独用于示例讲解的advancement。

a





2021.12 数据,可能有更多内容好的,这里是乙烯。整篇文章差不多是自己开着mc一点点就着原文件和wiki自己试出来的,如果有分歧或者谬误还请指出。由于草稿一不小心发出来了,这就没办法了,剩下的一点内容我会爆肝写完的。


新快照出了几天了,advancement这个替换成就的新的系统大家都很感到新奇,正巧这次快照更新有添加一些相关内容,今天我乙烯就来和大家说一说这样的一个新的系统要怎样的玩耍。那么我们先来简单的介绍一下吧。(其中部分资料源自Minecraft Wiki,英文的
什么是advancement?

这就是advancement。(迫真)


好了,这是一个替换了成就系统的新的成就系统,嗯,大概这么看的话好像是看不出和原来的区别有多大?好像确实不大,但是现在通过这样的整理可以很方便的使用json来自定义advancement。而且你也可以很方便的添加选项卡,是不是很厉害!然后成就还是需要你逐步解锁的,不过目前的成就还不能写注解,所以很sad。
完成advancement的时候右上角会有提示,并且支持多条提示



同样的,原来的成就指令achievement也被替换成advancement,这个的用法我们之后会说到。
如何自定义advancement
整个自定义推荐直接从0自己写,如果要基于官方的修改的话,请在完全熟悉系统以及官方成就的情况下修改。
据dinnerbone在推特上说,自定义advancement是与存档绑定的,也就是说相关的自定义文件要放在存档根目录的data/advancement里。是自定义里的豪杰。我们通过解压游戏的version jar可以很容易的确定这样的一个格式

代码:

  1. advancement
  2.   adventure
  3.   recipes
  4.   story


如何创建一个选项卡

这里就不复述中间的过程直接上结论了。这里除了recipes每一个文件夹都被视为一个单独的选项卡。如果要创建一个新的选项卡请在advancement文件夹下新建一个新的文件夹,文件夹名字从简为佳,允许存在中文但是个人并不推荐。在这个选项卡的advancement如果没有解锁的话,那么这个选项卡是不会显示的。
Recipes文件夹我暂时还没有时间进行详细的实验,但是据源码观察是利用了成就的系统决定了合成表的解锁链,比如我在进入了水(船合成表的解锁条件之一)后便解锁了船的合成,在我使用合法的格式编辑了面包的json后,进入水中便解锁了面包的合成。所以工作原理是一样的。也就是说,合成虽然暂时不能自定义,但是合成链的解锁已经可以自定义了。
创建一个选项卡除了新建一个文件夹,还要求这个选项卡有一个起始成就(下文称之为根成就),并且这个起始成就不能成为任何一个成就的子成就。如果这个成就是一个其他选项卡的子成就的话,显示上不仅不会显示新建选项卡,该成就以及其子成就还会显示到其他选项卡下面。这是我们不想要的。

大概加多了会这样。
当然这时候你们大概会说了:“哎呀我们不知道怎么写成就啊”,这个你们不要急,我们马上来说。
如何写一个单独的advancement
如果你已经按照上文操作,并自己写了成就的话,你的页面大概回事这个样子的。别急,这说明你的成就已经写的很接近了,让我们来看看成就应有的标准格式。

首先,要明确的是,大致会使用json格式是自定义成就的前提条件。所以让我们来简单介绍一下json格式。
这里我就折叠一下。
[spoiler]Json其实并不难,但是如果使用专业的说法可能导致一些人不太容易理解。如果你不擅长或者看完也没懂的话,有两种解决办法,一个是抄,抄原版游戏文件中的json,一个是问。
{“aa”:”bb”}
这就是最简单的json格式。并不难对吧。
{“aa”:”bb”,”cc”:”dd”}
这便是两者并列的json格式。使用逗号分隔。
{“aa”:”bb”,”cc”:”dd”,”ee”:{“ff”:”gg”}}
这便是一个上下级的关系。这里使用的都是大括号或者说叫花括号。
实例的结构可以简写为
Aa
Cc
Ee
  Ff
下文的结构也是如此。
使用中括号便是代表一个列表,这个难以一言蔽之,基本上你可以看官方怎么写就好了。
字符串用”“围起来,数值则不需要。还有一种特殊的true或者false。
最后的最后,所有的括号都必须成对,并且不能有多余的逗号。[/spoiler]


好的,这里就让我们来讲一下成就的结构是怎样的。下文均为小写,辣鸡word自动给我大写了,还有全文的引号必须为半角的引号,我这里尽量自己修一修,但word看不太出来。

代码:

  1. Display
  2.     Icon
  3.     Title
  4.     Frame
  5.     Background
  6. Parent
  7. Criteria
  8.     条件名
  9.   Trigger
  10.   Conditions
  11. Requirement
  12. Rewards
  13.     Recipes
  14.     Loot
  15.     Experience



好,接下来逐条讲解.

display
Display其下所有的都用于设置这个成就是如何显示的。
[spoiler]Icon:这个用于设置成就显示的标识
例子 ,这个的写法是

代码:

  1. "icon":"minecraft:map"

写进去的必须是一个物品名字
Title:这个用于设置成就的名字
例子 ,写法为

代码:

  1. "title": "Adventure"

,同时也可以使用同时也可以使用类似tellraw指令里面的json写法,比如"

代码:

  1. title":{"text":"test","color":"red","bold":true,"italic":true}

,这样的效果为
。也可以使用多段分开的 。

这里单独说一点,title和icon两者用于根成就时,都会被使用到这个选项卡的icon和title。
Frame:这个成就的边框,如果不填则默认为圆角矩形(task)。
现在mc提供三种边框。

从左到右为task,challenge和goal。例子,

代码:

  1. "frame": "goal"

,这样的效果为

同时也决定了完成advancement完成时的右上角提示,例如如果是goal完成的话右上角会提示goal完成。
Background:这个成就选项卡的背景。这一项仅限于根成就才拥有。这个后面可以填一个可用的图片地址
例子

代码:

  1. "background": "minecraft:textures/blocks/wool_colored_cyan.png"



这样的效果为

自此display系列标签全部讲解完成。[/spoiler]

parent
[spoiler]Parent无其下标签,其自己是用于确定该成就的父成就,也就是在界面中左边与哪个成就相连。可以在不完成父成就的情况下获得该成就。
解锁或已被列出的成就会列出其所有的父成就以及两个子成就。不得写在根成就中。写法,

代码:

  1. "parent": "adventure/root"

。内容必须为一个已经存在的成就。

自此parent系列标签全部讲解完成。[/spoiler]
criteria
[spoiler]Criteria其下为需列出获得成就的条件名,可以自己定义,但是不能与其他条件重名
每个条件名其下需要有相关的判据,判据会在下方列出。每个判据会有相关的条件。每个判据我都会详细的说明。后续版本更新的我也会慢慢的补齐。
一般来说都是这样的格式

代码:

  1. "criteria": {
  2.     "这里写条件名": {
  3.    "trigger": "minecraft:xxx",
  4.    "conditions": {
  5.   这里填条件
  6.    }
  7.     }



下文会慢慢举例子。这里先把目前所有的判据都举出来
该表格翻译自Minecraft 英文Wiki
判据名
触发条件:
可用的条件
minecraft:bred_animals
玩家喂食两只动物。
"parent","partner", "child"
minecraft:brewed_potion
玩家酿出药水。
"potion"
minecraft:construct_beacon
玩家改变了信标的结构(即信标更新自己时)。
"level"
minecraft:cured_zombie_villager
玩家治愈了一只僵尸村民。
"zombie,"villager"
minecraft:enchanted_item
玩家通过附魔台对物品进行附魔(而不是通过铁砧或者命令)
"item","levels"
minecraft:enter_block
玩家进入一个方块,也就是能响应execute @p ~ ~ ~ detect ~ ~ ~ 方块 损害值
"block","state"
minecraft:entity_killed_player
实体杀死玩家。
"entity"
minecraft:impossible
无,仅可通过指令获得。

minecraft:inventory_changed
玩家的背包发生变化。
"items","slots"
minecraft:location
每秒钟(20ticks)触发一次。
"position","biome"
minecraft:player_damaged
玩家收到伤害。
"damage"
minecraft:player_hurt_entity
玩家被一个实体伤到(包括自己)。
"damage"
minecraft:player_killed_entity
玩家杀死了一个实体。
"entity"
minecraft:recipe_unlocked
玩家解锁了一个合成表(例如使用知识之书)。
"recipe"
minecraft:slept_in_bed
玩家上床。
"location"
minecraft:summoned_entity
玩家召唤一个实体(生存可用的应该都是可用的,留待测试)。
"entity"
minecraft:used_ender_eye
玩家在生成要塞的世界里使用了末影之眼。
"distance"
minecraft:villager_trade
玩家与村民交易。
"villager","item"



相关的解析与例子由于排版问题我会放在二楼。[/spoiler]
Requirement
[spoiler]这里的话便是将在Criteria中写的判据进行应用。需要注意的是,如果判据写在Criteria中而你又写了requirement,那么这个判据是不会生效的。必须在这个条目中应用。如果不写则默认需要完成所有的criteria。
如果criteria非常简单的话(只有一个)则也可以选择不写requirement,但是个人建议为了避免某些意外性质的幺蛾子,还是每个都给写上比较好。
Requirement根据不同作用有两种写法。
首先requirement的外壳是

代码:

  1. "requirements": [ ]



注意了,这里的话是有一份中括号的。
然后如果是需要a和b两个判据同时生效的话,写法为

代码:

  1. "requirements": [["a", "b"]]



注意这里是新用了一个中括号将a和b扩起来,有两对中括号。
如果需要完成任一判据即可获得成就的话,写法为

代码:

  1. "requirements": [["a"], ["b"]]



这里是用分别用一对中括号将两个判据围起来。
这两种写法是可以混用的,但是一般来说是不必要的。

代码:

  1. "requirements": [["killed_something", "has_wheat"]]

这就是一份需要杀死过生物并且拥有小麦时能解锁的写法,但是前提是你必须定义过这两个判据
自此requirement系列标签讲解完成。[/spoiler]
Rewards
[spoiler]这个标签是用来确定获得成就以获得的奖励。多用于合成表解锁。
这个标签下面都是非常简单暴力的写法,让我来就着例子和大家说明一下。

代码:

  1.    "rewards": {
  2.   "recipes": ["minecraft:crafting_table", "minecraft:iron_block"],
  3.   "loot": ["minecraft:entities/zombie", "minecraft:gameplay/fishing/treasure"],
  4.   "experience": 7
  5.     }



这里是rewards的三种子标签:recipes,内部填写物品名称,负责解锁合成表,在将来能自定义合成的时候是很方便的;loot,内部填写任一个合法的loottable名字,奖励时进行抽取随机给予,前面两种标签都可以同时在中括号里写出多种奖励;experience,奖励固定的经验数,就目前所了解到的是只能填写一个固定的数值。


这是上面loot奖励获得的腐肉(僵尸掉落),马鞍(钓鱼宝藏)。[/spoiler]
自此全标签讲解完成,留待二楼仔细说明判据,可能会在最后放出一个单独用于示例讲解的advancement。
a



LRual
额,是不是因为太高端了导致看到了都不知道该怎么回复= =
果然
从我注册到现在
如果有唯一没变的东西
那就是:当时我是小白,现在我还是小白= =

下一页 最后一页