1.9瞬间多次调用及执行模块概念详解

时间:2017-08-16 来源:88130安卓下载 作者:佚名

  1.9瞬间多次调用及执行模块概念详解。那下面给大家分享的是我的世界1.9里面的关于瞬间多次调用及执行模块概念的一个研究分析,那感兴趣的玩家不妨进来看看哦~希望对大家有所帮助。

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

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

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

  传送门:我的世界1.9更新内容汇总

  在研究icb,ccb,rcb的机制时,我发现了一个挺特别的东西,现在就跟大家分享一下

  就是当ccb被替换成另一个ccb,它是能够马上接受信号的,举个例子

  icb:

  say start

  setblock ~ ~1 ~ 1 replace {Command:"say hi",auto:1b}

  say bye

  say end

  假设这cb链是向上的,那么它就会把原本为say bye的ccb变为say hi,当信号到第四个cb也就是被替换了的那个,它能够执行say hi这个指令而不是等下一次有信号才会执行(输出就是start, hi, end)

  因此,我们能够得到一个结论: cb的替换是即时的,也就是只替换NBT而不是整个方块替换

  其实还有一个特性的,就是替换后的朝向是会被忽略的(数据值和NBT的修改不是同时的?这就不清楚了,然而我们可以肯定的就是不能如此瞬间转向)

  可能你会问,这样子有什么用?

  我只能说我也不知道,然而我给了一个技术上可行然而麻烦到不得了的概念你们看看吧,就是模块的调用

  整个概念:

  把需要执行的模块clone进去主要的执行串(主模块)里,做到多次调用同样模块及1gt内执行尽量多的循环类系统

  如果剩余空间不足,则会自动把剩下模块放进暂存等待下一个gt执行

  **代码块里的那些是懒癌卫士里的表达方式,不懂的话可以来这里看:懒癌卫士

  //调用模块{:

  //检测空间是否足够

  scoreboard players operation @e[name=start] length -= @e[name=(储存模块长度的marker)] length

  scoreboard players test @e[name=start] length 1

  //如果空间足够,则把模块clone到之后的cb里

  cond:/clone (该模块坐标) ~ ~ ~1

  //如果空间不足,则把模块放进暂存里,并且把之后的命令删除

  execute @e[name=start,score_length=0] ~ ~ ~ clone (该模块坐标) (暂存的位置(可能为相对坐标,即暂存里start marker的相对位置))

  cond:fill ~ ~ ~ ~ ~ ~20 stone 0 replace chain_command_block 3

  //即使cond的ccb无法被删除,也不能执行(前面的cb都被删除了,不可能成功)

  //}

  执行空间完结: 转向

  原因: 避免被 "fill ~ ~ ~ ~ ~ ~20 stone 0 replace chain_command_block 3"错误删除

  执行空间完结的指令是必须执行的,否则就有可能出现bug

  //完结: {

  /scoreboard players set @e[name=start] length 11

  /clone (暂存) (执行空间)

  mark:blankCount

  //先执行scb和stats block (下一个cb的位置) AffectedBlocks @e[name=blankCount,c=1] length

  //上方的只需要执行一次,得到stats的链接就可以了

  /testforblocks (暂存) (空置的比较用暂存)

  //把length = 暂存里空置的地方

  /scoreboard players operation @e[name=start] length = @e[name=blankCount] length

  //清空暂存

  fill -12 4 75 -12 4 85 minecraft:chain_command_block 3

  //}

  模块的切割

  由于这个系统里,调用模块会把之后的命令覆盖掉,所以我们需要把调用模块之后的命令放进另外一个模块里

  (或者在调用的模块里再写一次也可以)

  例子1:

  {

  say hi

  module 1

  say bye

  }

  如果是这种情况,就可以把say bye放进module1,或者是把say bye放进module2,然后在module1最后的地方调用。

  而主模块里则不需要写say bye(因为必定会被覆盖)

  例子2:

  {

  say hi

  if (testfor @e[name=pca])

  module 1

  say bye

  }

  这种情况应该也是最常见的,就可以把say bye放进module1,并且在主模块也写一次(一共两次)。

  或者是把say bye放进module2,分别在主模块和module1里调用

  例子里主模块的长度就十几个ccb,当然真正要做的话就不是那样子了,而是起码一百个,不然这就没什么用了

  这样子我们就能尽情的压榨MC的能力,而不会压榨到崩溃

  而且也能够更好的做到模块化(虽然是被阉割了的)

  当然,现在看来很麻烦,然而我觉得也是那些弄成生成器就会好很多的东西了

  可惜的就是这系统很多地方依赖clone,也就是说要作出大量的坐标计算(或者是直接用绝对坐标)

  而且这个系统效率也不是一般的低...还需要优化(目前一大堆命令才能调用一个模块)

  然而我觉得这个系统如果优化一下和弄一个生成器的话,加上本人无延迟逻辑这个帖子,相信能够在MC里做到接近编程的效果,虽然很差就是了

  而且这个概念对一些需要多次循环、大量条件操作的情况下挺适用的,因为这样子就能够减低运行所需的时间,也能够避免因为穷举运行大量命令而造成的超长游戏刻及卡顿。

  PS:在此非常感谢我的世界玩家pca006132的分享。

  以上就是1.9瞬间多次调用及执行模块概念详解。更多精彩尽在游戏园我的世界专区。

  相关攻略推荐:

  我的世界1.9舒服细致材质包下载

  超省材料的1.9最新全自动刷铁轨机详解

  我的世界1.9自动钓鱼机制作教程 最节省材料的钓鱼机

  1.9女巫塔修理方法 怎么修复坏掉的女巫塔

  1.9瞬间多次调用及执行模块概念详解。那下面给大家分享的是我的世界1.9里面的关于瞬间多次调用及执行模块概念的一个研究分析,那感兴趣的玩家不妨进来看看哦~希望对大家有所帮助。

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

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

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

  传送门:我的世界1.9更新内容汇总

  在研究icb,ccb,rcb的机制时,我发现了一个挺特别的东西,现在就跟大家分享一下

  就是当ccb被替换成另一个ccb,它是能够马上接受信号的,举个例子

  icb:

  say start

  setblock ~ ~1 ~ 1 replace {Command:"say hi",auto:1b}

  say bye

  say end

  假设这cb链是向上的,那么它就会把原本为say bye的ccb变为say hi,当信号到第四个cb也就是被替换了的那个,它能够执行say hi这个指令而不是等下一次有信号才会执行(输出就是start, hi, end)

  因此,我们能够得到一个结论: cb的替换是即时的,也就是只替换NBT而不是整个方块替换

  其实还有一个特性的,就是替换后的朝向是会被忽略的(数据值和NBT的修改不是同时的?这就不清楚了,然而我们可以肯定的就是不能如此瞬间转向)

  可能你会问,这样子有什么用?

  我只能说我也不知道,然而我给了一个技术上可行然而麻烦到不得了的概念你们看看吧,就是模块的调用

  整个概念:

  把需要执行的模块clone进去主要的执行串(主模块)里,做到多次调用同样模块及1gt内执行尽量多的循环类系统

  如果剩余空间不足,则会自动把剩下模块放进暂存等待下一个gt执行

  **代码块里的那些是懒癌卫士里的表达方式,不懂的话可以来这里看:懒癌卫士

  //调用模块{:

  //检测空间是否足够

  scoreboard players operation @e[name=start] length -= @e[name=(储存模块长度的marker)] length

  scoreboard players test @e[name=start] length 1

  //如果空间足够,则把模块clone到之后的cb里

  cond:/clone (该模块坐标) ~ ~ ~1

  //如果空间不足,则把模块放进暂存里,并且把之后的命令删除

  execute @e[name=start,score_length=0] ~ ~ ~ clone (该模块坐标) (暂存的位置(可能为相对坐标,即暂存里start marker的相对位置))

  cond:fill ~ ~ ~ ~ ~ ~20 stone 0 replace chain_command_block 3

  //即使cond的ccb无法被删除,也不能执行(前面的cb都被删除了,不可能成功)

  //}

  执行空间完结: 转向

  原因: 避免被 "fill ~ ~ ~ ~ ~ ~20 stone 0 replace chain_command_block 3"错误删除

  执行空间完结的指令是必须执行的,否则就有可能出现bug

  //完结: {

  /scoreboard players set @e[name=start] length 11

  /clone (暂存) (执行空间)

  mark:blankCount

  //先执行scb和stats block (下一个cb的位置) AffectedBlocks @e[name=blankCount,c=1] length

  //上方的只需要执行一次,得到stats的链接就可以了

  /testforblocks (暂存) (空置的比较用暂存)

  //把length = 暂存里空置的地方

  /scoreboard players operation @e[name=start] length = @e[name=blankCount] length

  //清空暂存

  fill -12 4 75 -12 4 85 minecraft:chain_command_block 3

  //}

  模块的切割

  由于这个系统里,调用模块会把之后的命令覆盖掉,所以我们需要把调用模块之后的命令放进另外一个模块里

  (或者在调用的模块里再写一次也可以)

  例子1:

  {

  say hi

  module 1

  say bye

  }

  如果是这种情况,就可以把say bye放进module1,或者是把say bye放进module2,然后在module1最后的地方调用。

  而主模块里则不需要写say bye(因为必定会被覆盖)

  例子2:

  {

  say hi

  if (testfor @e[name=pca])

  module 1

  say bye

  }

  这种情况应该也是最常见的,就可以把say bye放进module1,并且在主模块也写一次(一共两次)。

  或者是把say bye放进module2,分别在主模块和module1里调用

  例子里主模块的长度就十几个ccb,当然真正要做的话就不是那样子了,而是起码一百个,不然这就没什么用了

  这样子我们就能尽情的压榨MC的能力,而不会压榨到崩溃

  而且也能够更好的做到模块化(虽然是被阉割了的)

  当然,现在看来很麻烦,然而我觉得也是那些弄成生成器就会好很多的东西了

  可惜的就是这系统很多地方依赖clone,也就是说要作出大量的坐标计算(或者是直接用绝对坐标)

  而且这个系统效率也不是一般的低...还需要优化(目前一大堆命令才能调用一个模块)

  然而我觉得这个系统如果优化一下和弄一个生成器的话,加上本人无延迟逻辑这个帖子,相信能够在MC里做到接近编程的效果,虽然很差就是了

  而且这个概念对一些需要多次循环、大量条件操作的情况下挺适用的,因为这样子就能够减低运行所需的时间,也能够避免因为穷举运行大量命令而造成的超长游戏刻及卡顿。

  PS:在此非常感谢我的世界玩家pca006132的分享。

  以上就是1.9瞬间多次调用及执行模块概念详解。更多精彩尽在游戏园我的世界专区。

  相关攻略推荐:

  我的世界1.9舒服细致材质包下载

  超省材料的1.9最新全自动刷铁轨机详解

  我的世界1.9自动钓鱼机制作教程 最节省材料的钓鱼机

  1.9女巫塔修理方法 怎么修复坏掉的女巫塔

相关下载

热门搜索

手游排行榜

  • 最新排行
  • 最热排行
  • 评分最高