Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 1581|回复: 10

[命令方块] 【1.9】瞬间多次调用、执行模块概念

[复制链接]
发表于 2016-3-15 21:47:48 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 pca006132 于 2016-10-16 13:11 编辑

在本pca死之前就搬这东西过来给大家看看吧
说明一下,这教程我也曾经在别的地方发过,因此别百度找到别的帖子是同样内容就说我剽窃什么的
而且这只是一个概念,只是由于我懒得大幅优化和弄生成器才拿出来的,可能大家能帮忙优化一下吧

注意: 现在可以使用stb去取代clone, 这样就不需要绝对坐标了

在研究icb,ccb,rcb的机制时,我发现了一个挺特别的东西,现在就跟大家分享一下
就是当ccb被替换成另一个ccb,它是能够马上接受信号的,举个例子
  1. icb:
  2. say start
  3. setblock ~ ~1 ~ 1 replace {Command:"say hi",auto:1b}
  4. say bye
  5. say end
复制代码
假设这cb链是向上的,那么它就会把原本为say bye的ccb变为say hi,当信号到第四个cb也就是被替换了的那个,它能够执行say hi这个指令而不是等下一次有信号才会执行(输出就是start, hi, end)
因此,我们能够得到一个结论: cb的替换是即时的,也就是只替换NBT而不是整个方块替换
其实还有一个特性的,就是替换后的朝向是会被忽略的(数据值和NBT的修改不是同时的?这就不清楚了,然而我们可以肯定的就是不能如此瞬间转向)

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

=========优雅的分隔线=========


                               
登录/注册后可看大图

整个概念:
把需要执行的模块clone进去主要的执行串(主模块)里,做到多次调用同样模块及1gt内执行尽量多的循环类系统
如果剩余空间不足,则会自动把剩下模块放进暂存等待下一个gt执行

**代码块里的那些是懒癌卫士里的表达方式,不懂的话可以来这里看:懒癌卫士
  1. //调用模块{:
  2.     //检测空间是否足够
  3.     scoreboard players operation @e[name=start] length -= @e[name=(储存模块长度的marker)] length
  4.     scoreboard players test @e[name=start] length 1
  5.     //如果空间足够,则把模块clone到之后的cb里
  6.     cond:/clone (该模块坐标) ~ ~ ~1
  7.     //如果空间不足,则把模块放进暂存里,并且把之后的命令删除
  8.     execute @e[name=start,score_length=0] ~ ~ ~ clone (该模块坐标) (暂存的位置(可能为相对坐标,即暂存里start marker的相对位置))
  9.     cond:fill ~ ~ ~ ~ ~ ~20 stone 0 replace chain_command_block 3
  10.     //即使cond的ccb无法被删除,也不能执行(前面的cb都被删除了,不可能成功)
  11. //}
复制代码


执行空间完结: 转向
原因: 避免被 "fill ~ ~ ~ ~ ~ ~20 stone 0 replace chain_command_block 3"错误删除
执行空间完结的指令是必须执行的,否则就有可能出现bug
  1. //完结: {
  2.     /scoreboard players set @e[name=start] length 11
  3.     /clone (暂存) (执行空间)
  4.     mark:blankCount
  5.     //先执行scb和stats block (下一个cb的位置) AffectedBlocks @e[name=blankCount,c=1] length
  6.     //上方的只需要执行一次,得到stats的链接就可以了
  7.     /testforblocks (暂存) (空置的比较用暂存)
  8.     //把length = 暂存里空置的地方
  9.     /scoreboard players operation @e[name=start] length = @e[name=blankCount] length
  10.     //清空暂存
  11.     fill -12 4 75 -12 4 85 minecraft:chain_command_block 3
  12. //}
复制代码


模块的切割
由于这个系统里,调用模块会把之后的命令覆盖掉,所以我们需要把调用模块之后的命令放进另外一个模块里
(或者在调用的模块里再写一次也可以)
例子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里做到接近编程的效果,虽然很差就是了
而且这个概念对一些需要多次循环、大量条件操作的情况下挺适用的,因为这样子就能够减低运行所需的时间,也能够避免因为穷举运行大量命令而造成的超长游戏刻及卡顿。
嗯,最后道别一下。各位再见

来自群组: Command Block Logic

评分

参与人数 9人气 +15 金粒 +177 收起 理由
龙腾猫跃 + 2 + 9 Mcbbs有你更精彩~
FHC红石 + 2 + 33 1.9乱七八糟的命令方块已经看不懂了…….
840196733mw + 1 + 20 很棒的作品!
贰逼 + 4 + 33 很棒的作品!
lzs1234 + 1 + 22 12222222222 好5
玄素 + 1 + 15 尔康手
kongbaiyo + 2 + 35 够长就行恩
gundamMC + 1 好厉害,但是看不懂233
zhaoxingeabc + 1 + 10 呦,我看不懂

查看全部评分

回复

使用道具 举报

发表于 2016-3-15 22:00:10 | 显示全部楼层
本帖最后由 zhaoxingeabc 于 2016-3-15 14:11 编辑

这贴发到pcapcb容易理解些……
毕竟用pcb的人不多,直接发到mcbbs不利于理解……
其实我真的没看到签名档里有pcb下载
回复

使用道具 举报

发表于 2016-3-15 22:03:11 | 显示全部楼层
要退坑了有感言吗

点评

肮脏的交易实在是太多了,这十分之不好,我们必须从根本根除这种腐败的交易  详情 回复 发表于 2016-3-15 22:11
回复

使用道具 举报

 楼主| 发表于 2016-3-15 22:11:25 | 显示全部楼层

肮脏的交易实在是太多了,这十分之不好,我们必须从根本根除这种腐败的交易

点评

你玩不玩Minecraft了,你不玩我也不玩了  详情 回复 发表于 2016-3-17 20:59

评分

参与人数 1人气 +1 收起 理由
zhaoxingeabc + 1 不是pca你自己进行的交易吗

查看全部评分

回复

使用道具 举报

发表于 2016-3-16 08:50:22 | 显示全部楼层
我擦,好屌
回复

使用道具 举报

发表于 2016-3-17 20:59:46 | 显示全部楼层
pca006132 发表于 2016-3-15 22:11
肮脏的交易实在是太多了,这十分之不好,我们必须从根本根除这种腐败的交易
...

你玩不玩Minecraft了,你不玩我也不玩了
回复

使用道具 举报

发表于 2016-3-18 19:48:38 | 显示全部楼层
pca退坑了? pcb开发怎么办 pcc怎么办 还没开发的pcd怎么办 pcz怎么办(为了不涉及宣传就不给网址了,pca的论坛)
回复

使用道具 举报

发表于 2016-3-31 16:21:20 | 显示全部楼层
感觉好6啊!
回复

使用道具 举报

发表于 2016-9-9 01:01:45 | 显示全部楼层
我在想 印象里游戏是先标记哪些cb将要在下一个游戏刻执行(加入计划刻)

然后等一个游戏刻

然后执行


印象里游戏在破坏方块后计划刻不会去除
而该计划刻到时间后能不能起效主要看计划刻记载的方块ID和到时间时该位置方块的ID
有些组合会起效 有些不会
回复

使用道具 举报

发表于 2016-9-10 08:36:55 | 显示全部楼层
我还是看不懂{:10_514:}

点评

这里不是茶馆在这里水贴会被发好人卡。。。  详情 回复 发表于 2016-9-10 09:30
回复

使用道具 举报

发表于 2016-9-10 09:30:37 | 显示全部楼层

这里不是茶馆在这里水贴会被发好人卡。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2017-10-22 21:35 , Processed in 0.199316 second(s), 7 queries , Memcache On.

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

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

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