当前位置: 我的世界 > 游戏攻略 > 正文

我的世界1.12第9预览版17w17b 基于advancement的模块简述

小编:ahdy时间:2017-04-28 09:59回到游戏园首页

  我的世界1.12第9预览版17w17b 基于advancement的模块简述。今天给大家带来了我的世界1.12最新预览17w17b的基于advancement的模块简述。希望大家喜欢,

  游戏园我的世界官方群:325049520  256070479 欢迎各路喜爱我的世界的小伙伴们加入讨论!

  玩服务器的小伙伴们可以加入:141931866 群一起联机玩游戏哦!

  如果你是腐竹的话可以给我们投稿你的服务器哦~投稿地址点我进入

  如果你有心仪的作品或者心得分享的话,欢迎来游戏园投稿,大家可以点击>>>投稿<<<进行投稿哦~ 有奖品哦~

  在17w17a的更新之后,我们可以通过advancement的reward直接执行命令。

  以前我也是抱怨过advancement的reward和命令的联动太少,要是能返回分数都是相当棒的事,结果mojang这么一搞……使得这新东西能做的事情远超过之前的想象。

  rewards返回commands的格式如下:

  {

  "rewards": {

  "commands": [

  "say 1",

  "say 2",

  ...(command list)

  ]

  },

  ...

  }

  commands对应的是一个list,其中的命令会被从上到下依次执行,执行者视为达成advancement的玩家,类似于execute该玩家执行list内所有命令。

  游戏会在advancement达成的瞬时执行对应的rewards,而我们可以通过"trigger":"minecraft:impossible"来使得一个advancement能且仅能被命令触发,并可以通过在commands里直接revoke这个advancement来使得这个advancement的状态被重置,可以被再次激活。

  通过合理安排criteria,我们可以用advancement的commands reward来充当命令中一个可以即时调用的模块,或是作为非常方便的对以往所不能检测的一些条件的检测手段,甚至完全通过advancement构建一个命令循环。

  advancement模块

  通过上述的内容,我们可以很容易地理解,每一个rewards的command list都可以视为一个模块。它可以通过命令/advancement grant调用。

  有重复激活需求的模块,可以考虑在其command list里revoke其本身,这样就可以免去模块外重置的麻烦。

  例如命名空间cmdtest下,名为test的advancement:

  {

  "rewards": {

  "commands": [

  "advancement revoke @s only cmdtest:test",

  "say this is a module and the executor is @s",

  "say 3"

  ]

  },

  ...

  }

  这样,通过循环命令方块来高频执行

  advancement grant @p only cmdtest:test

  时,就会在每次命令激活时显示say的内容。

  模块的特性

  首先永远记住,advancement的执行是严格基于玩家的,因为只有玩家能够完成advancement。这就使得被advancement grant的玩家事实上成为了里面所有命令的执行者,一切和执行者相关的命令都请谨慎对待。当然,在需要检测是谁达成了advancement条件的时候,执行者本身能够轻易通过@s来选中绝对不是一件坏事情。

  模块的调用是即时的。也就是说,如果我执行如下命令链:

  say 1

  advancement grant @p only cmdtest:test

  say 2

  得到的输出将是:

  [@] 1

  [xuan_su] this is a module and the executor is xuan_su

  [xuan_su] 3

  [@] 2

  对多个模块之间互相调用的情况亦如是。我们创建同在cmdtest命名空间下的另一个名为main的advancement:

  {

  "rewards": {

  "commands": [

  "advancement revoke @s only cmdtest:main"

  "say 0"

  "advancement grant @s only cmdtest:test"

  "say -1"

  ]

  },

  ...

  }

  在上述命令链中,修改中间命令为advancement grant @p only cmdtest:main_loop的时候,输出将是:

  [@] 1

  [xuan_su] 0

  [xuan_su] this is a module and the executor is xuan_su

  [xuan_su] 3

  [xuan_su] -1

  [@] 2

  简单地说,就是这样的模块间调用全部都是即时的,通过模块1中的命令中途调用模块2,那么将会先执行完模块2中的命令,再继续执行模块1中剩余的命令。

分享到:更多

游戏信息

我的世界
我的世界类型:休闲娱乐平台:PC,iOS,安卓电脑版下载
  • 游戏大礼包
  • 手游开测表