Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 2798|回复: 23

[新版本预览] [CBL|玄素]17w13a 新成就系统及自定义

[复制链接]
发表于 2017-3-31 02:40:20 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 玄素 于 2017-4-4 21:00 编辑

17w13a里,整个成就体系发生了巨大的改动……


/achievement命令被重做,新命令为/advancement。

  1. /advancement <grant|revoke|test> <player> <advancement> [criterion]
复制代码

目前语言文件有错误,后两个的显示十分有毒。可能这次快照出的非常赶,很快就会发现酱猪蹄不止一处……

作用分别是给予/夺取/检测玩家是否有某个成就项。虽然现在叫它成就已经很不妥当,但是由于叫顺口了不想改了就先这么叫着吧23333

可选参数criterion会匹配某成就项下的某条准则。这些准则和它们的具体内容可以在成就文件中找到。

命令返回信息的语言文件存在同样的问题……

同时这个更改也宣告,过去版本通过检测achievement进行e键检测这个做法废了……真是个悲伤的故事。


加入了新命令/recipe,效果是给予/清除玩家的某个合成配方。

  1. /recipe <give|take> [player] <name|*>
复制代码

虽然官方给出的格式如此,但是如果你省略玩家名/选择器就会出现“在执行此命令时出现了未知的错误”,所以我还是没搞懂为什么player是个可选参……

可以用*来指代全部合成配方。


加入了新gamerule:doLimitedCrafting,默认值为false。

当值为true时,玩家将只能合成自己已经有合成配方的物品,无论游戏模式。


加入了物品knowledge_book,目前只能用指令调出,不存在于创造物品栏中。右键使用,会消耗该物品,并使得玩家解锁其携带的配方(怀疑通过触发合成表解锁条件的has_the_recipe)。

可用标签Recipes指定其携带的合成配方,例如:

  1. /give @p minecraft:knowledge_book 1 0 {Recipes:["minecraft:torch","minecraft:redstone_torch"]}
复制代码

将给予玩家一本使用后能解锁火把和红石火把合成表的姿势知识之书。




玩家可以自行定义新的成就/合成配方获取方式/合成表。

前两者的自定义文件保存在路径saves\xxxxx\data\advancements下,和loot table、structure一样都是跟着存档走的东西。合成表现在还没有开放比较正常的自定义方式,但文件可以在17w13a.jar\assets\minecraft\recipes下找到。


成就文件的格式如下:

  1. {
  2.     "display": {
  3.         "icon": "minecraft:glass_bottle",        //显示时使用的图标
  4.         "title": "Brew a Potion"        //显示名
  5.     },
  6.     "parent": "minecraft:story/obtain_blaze_rod",        //父成就(在成就树显示中所属于的成就)
  7.     "criteria": {
  8.         "potion": {        //准则名,仅调取用
  9.             "trigger": "minecraft:inventory_changed",        //触发要求(种类)
  10.             "conditions": {        //触发要求具体内容
  11.                 "items": [
  12.                     {
  13.                         "item": "minecraft:potion"
  14.                     }
  15.                 ]
  16.             }
  17.         }
  18.     }
  19. }
复制代码

每个成就list存在一个root.json,作为整条成就树的根成就存在。只有当根成就被满足,成就树才会在选项/advancement里显示(?)。

定义根成就时不需指定父成就。


合成配方获取方式文件格式如下:

  1. {
  2.   "rewards": {        //获取的合成配方,怀疑能获得别的?
  3.     "recipes": [
  4.       "minecraft:wooden_pickaxe"
  5.     ]
  6.   },
  7.   "criteria": {
  8.     "has_stick": {        //准则名
  9.       "trigger": "minecraft:inventory_changed",        //触发要求
  10.       "conditions": {        //触发要求的具体内容
  11.         "items": [
  12.           {
  13.             "item": "minecraft:stick"
  14.           }
  15.         ]
  16.       }
  17.     },
  18.     "has_the_recipe": {
  19.       "trigger": "minecraft:recipe_unlocked",
  20.       "conditions": {
  21.         "recipe": "wooden_pickaxe"
  22.       }
  23.     }
  24.   },
  25.   "requirements": [        //需求满足的准则,同一个list内的准则需同时满足
  26.     [
  27.       "has_stick"
  28.     ],
  29.     [        //不同list之间并列,只要满足任意一个list即算满足条件
  30.       "has_the_recipe"
  31.     ]
  32.   ]
  33. }
复制代码

其中,目前扒出来的trigger有以下这些:

名称匹配具体要求内容
minecraft:impossible无法完成(?)//
minecraft:inventory_changed 物品栏改变(某种意义
上,获得过该物品)
items,slots:{occupied,full,
empty}
item_format,range
minecraft:construct_beacon 构造信标levelint
minecraft:player_damaged伤害相关信息damage:{blocked,is_projectile,
is_explosion,bypasses_armor,
bypasses_invulnerability,
bypasses_magic,is_fire,is_magic,
dealt(range),taken(range),
source_entity(type)}
没写单位的全是bool
minecraft:enchanted_item附魔物品 item,levelsitem_format,range
minecraft:enter_block进入方块block,state:{}block ID,state
minecraft:used_ender_eye使用末影之眼distance(我没猜到具体指啥,
距离最终落点距离?)
range
minecraft:summoned_entity生成实体entitytype
minecraft:recipe_unlocked 配方解锁recipe recipe name
minecraft:location位置position:{x,y,z},biomerange,biome name
minecraft:player_killed_entity生物击杀entitytype
minecraft:bred_animals动物喂养(包括繁殖和
喂养小动物长大)
parents:[],childtype
minecraft:brewed_potion药水酿造potionpotion name
*其中item_format许可内容为{item(string), count(range), data(int), enchantments[{enchantment(string),
levels(range)}...], potion(string)}

这玩意儿我感觉和pe的Add-on的准则一个习性……官方写了的你知道可以这么用,然而并不知道到底有哪些用法。

期待后续有人拆了mc。

↑感谢梨子@andylizi 真的就把mc拆了……以其内容对上面的表格做了更新并再次十分感谢。然而就算说了方法我也不会拆23333

由于MC-115067的存在,其中不少项目尚不可用(可被定义,也能正常被显示,但是无法用正常方式完成)。据说下个版本修复。


合成表的定义方式很简洁明了……还是拿木镐做例子吧:

  1. {
  2.   "type": "crafting_shaped",        //是否为有序合成
  3.   "pattern": [        //配方图
  4.     "XXX",
  5.     " # ",
  6.     " # "
  7.   ],
  8.   "key": {        //上图中key对应的value
  9.     "#": {
  10.       "item": "minecraft:stick"
  11.     },
  12.     "X": {
  13.       "item": "minecraft:planks"
  14.     }
  15.   },
  16.   "result": {        //合成结果
  17.     "item": "minecraft:wooden_pickaxe"
  18.   }
  19. }
复制代码

书本/地图的复制不由这种方法指定合成表。至少我找了半天也是没找到。


加了(?)的为存疑内容,困了不想试了果断还是先睡觉……

↑二更一发,后面发现了有趣的细节再继续补充吧↑

附带一个笑一年的mjsb:


来自群组: Command Block Logic

评分

参与人数 16人气 +33 金粒 +263 收起 理由
回调然后他 + 2 + 20 mjsb~~~最后一个让我笑会儿
897412176 + 1 大触我们做朋友吧!
贰逼 + 3 + 33 MCBBS有你更精彩~
Zero_Exact + 3 + 30 官方逼死同人
syz666 + 1 + 10 官逼模
我是小苦 + 1 + 10 mjsb逼死mod系列
langyo + 2 + 35 .
pca006132 + 2 + 50 MCBBS有你更精彩~
Smokey_Days + 3 + 25 MCBBS有你更精彩~
pineapple_ + 1 + 15 MCBBS有你更精彩~
zhengzhi + 2 Wonderful
混乱 + 3 + 20 楼主你太帅了~
chyx + 3 楼主你太帅了~
a6809936 + 2 成就狂魔系列地图即将抵达战场...
Java_command + 2 + 15 MCBBS有你更精彩~
ruhuasiyu + 2 期待更详细的教程

查看全部评分

回复

使用道具 举报

发表于 2017-3-31 02:49:06 | 显示全部楼层
最后一条。。也不是不可以嘛。。

评分

参与人数 1金粒 +1 收起 理由
玄素 + 1 我从未见过如此厚颜无耻之龙

查看全部评分

回复

使用道具 举报

发表于 2017-3-31 06:38:57 | 显示全部楼层
喂喂喂,又来收膝盖了吗
回复

使用道具 举报

头像被屏蔽
发表于 2017-3-31 06:47:01 | 显示全部楼层
可惜快照直接反编译根本不是人看得,不然还真能拆

评分

参与人数 1金粒 +1 收起 理由
玄素 + 1 然后梨子就拆了

查看全部评分

回复

使用道具 举报

发表于 2017-3-31 07:15:56 | 显示全部楼层
试着研究了 但是怎么也不知道触发器能写什么没研究成(其实还是害怕以后再改)




听说这个版本切换成gm2能够清理合成列表


还加了一个新的物品 绿色的书
能够往里面写合成列表 右键就能获得里面写的合成列表

评分

参与人数 1金粒 +1 收起 理由
玄素 + 1 我说我怎么觉得还是漏了啥……补上去(哭.

查看全部评分

回复

使用道具 举报

发表于 2017-3-31 12:55:28 | 显示全部楼层
本帖最后由 andylizi 于 2017-4-1 09:24 编辑

我还找到了/补充以下trigger:(省略前缀minecraft:)

预定义类型 range,其结构为 {min(float), max(float)}value(float)
预定义类型 item_format,其结构为 {item(string), count(range), data(int), enchantments[{enchantment(string), levels(range)}...], potion(string)}
预定义类型 entity,其结构为 {type(string)}

  • impossible
    无条件,顾名思义的不可能获得
  • location
    条件:{position{x(range), y(range), z(range)}, biome(string)}
  • player_killed_entity
    条件:{entity(entity)}
  • bred_animals
    条件:{parents[entity...], child(entity)}
  • brewed_potion
    条件:{potion(string)}
  • inventory_changed
    条件:{items[item_format...], slots{occupied(range), full(range), empty(range)}}
  • enchanted_item
    条件:{item(item_format), levels(range)}
  • enter_block
    条件:{block(string),state{}}
  • player_damaged
    条件:{is_projectile, is_explosion, bypasses_armor, bypasses_invulnerability, bypasses_magic, is_fire, is_magic, dealt(range), taken(range), blocked, source_entity(entity)}
    (没标明类型的全部为 boolean)
  • recipe_unlocked
    条件:{recipe(string)}


查找方法:


edit:后来发现其实有个叫 m 的类里面集中了所有的trigger,所以其实完全不用一个个找的…………哭

点评

厉害,去试试  详情 回复 发表于 2017-4-7 18:24
那个 扔末影之眼有哪些?  详情 回复 发表于 2017-3-31 21:45
谢谢!!! 你一定是拆了游戏吧!  详情 回复 发表于 2017-3-31 13:00

评分

参与人数 6人气 +10 金粒 +123 收起 理由
syz666 + 1 + 20 拆快照系列
ruhuasiyu + 1 我擦
langyo + 2 + 35 你居然拆了快照,Good
吕易天 + 1 + 5 厉害了!快照都能拆。。。。
混乱 + 3 + 30 很棒的作品!
玄素 + 2 + 33 十分感谢

查看全部评分

回复

使用道具 举报

发表于 2017-3-31 13:00:09 | 显示全部楼层
andylizi 发表于 2017-3-31 12:55
我还找到了/补充以下trigger:(省略前缀minecraft:)

预定义类型 range,其结构为 {min(float), max(floa ...

谢谢!!!
你一定是拆了游戏吧!

评分

参与人数 2人气 +1 金粒 +1 收起 理由
langyo + 1 这新编辑的方法有点笨…不过却有效.
andylizi + 1 编辑进了我查找使用的方法

查看全部评分

回复

使用道具 举报

头像被屏蔽
发表于 2017-3-31 13:27:15 | 显示全部楼层
看不懂。。。。。不太会用

评分

参与人数 1人气 -1 金粒 -10 收起 理由
Zero_Exact -1 -10 无意义

查看全部评分

回复

使用道具 举报

发表于 2017-3-31 21:45:08 | 显示全部楼层
andylizi 发表于 2017-3-31 12:55
我还找到了/补充以下trigger:(省略前缀minecraft:)

预定义类型 range,其结构为 {min(float), max(floa ...

那个 扔末影之眼有哪些?
回复

使用道具 举报

发表于 2017-4-1 09:28:29 | 显示全部楼层
chyx 发表于 2017-3-31 21:45
那个 扔末影之眼有哪些?

不清楚。末影之眼的trigger的“判定是否触发”的类(代码里称之为“CriterionInstance”)里,逻辑是这样的:传入一个double,然后判断:
  • 如果 distance 的 min * min > 传入的参数,则返回 false
  • 如果 distance 的 max * max < 传入的参数 ,则返回 false
  • 否则返回 true

关键在于:传入的参数究竟是什么东西,而这个我没找到。。

另:我发现我在筛选250个使用了 md 的类时,漏掉了 recipe_unlocked,已经补进去了。

@langyo 我又发现了一个完全不笨的新查找方法→_→这下不麻烦了吧→_→新方法编辑进去了

评分

参与人数 1人气 +2 收起 理由
langyo + 2 →_→

查看全部评分

回复

使用道具 举报

发表于 2017-4-2 07:00:33 | 显示全部楼层
666
话说mjsb是什么……
感谢教程,正在做生成器:

                               
登录/注册后可看大图

评分

参与人数 1金粒 +1 收起 理由
玄素 + 1 mjsb=mojang sb

查看全部评分

回复

使用道具 举报

发表于 2017-4-2 22:19:04 | 显示全部楼层
没实操过依旧是懵逼的雷鸣鸣x所以窝要抱抱啦x!

评分

参与人数 1金粒 +1 收起 理由
玄素 + 1 抱抱!

查看全部评分

回复

使用道具 举报

发表于 2017-4-3 00:36:23 | 显示全部楼层
没实际操作过,懵逼的我,
回复

使用道具 举报

发表于 2017-4-3 08:20:12 | 显示全部楼层
为什么我输入
/recipe give Fred minecraft:book
就提示
commands.recipe.unknownrecipe
回复

使用道具 举报

 楼主| 发表于 2017-4-3 08:47:49 | 显示全部楼层
2656072228 发表于 2017-4-3 08:20
为什么我输入
/recipe give Fred minecraft:book
就提示

语言文件锅,没有在lang里找到对应条目就直接把索引扔给你了。
不过光看这个索引也就够了,book压根就没有合成表啊2333那肯定就unknown recipe了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 手机版本

GMT+8, 2017-11-20 08:21 , Processed in 0.115047 second(s), 12 queries , Memcache On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标。本站与Mojang以及微软公司没有从属关系。

© 2010-2017 我的世界中文论坛 版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。

快速回复 返回顶部 返回列表