跳到主要内容

第三章小结

很快啊,我们的第三章也已经宣告结束了!至此,在模块 1 中基本上所有命令系统的知识框架你已经系统学习过,凭借这些知识,可以帮助你迅速上手实际工程并展开应用。在看完本章小结之后,你便可以投入一张地图或者服务器的开发,利用这些理论知识已经足够支撑你尝试制作一个优秀作品出来了。或者,也接下去来看模块 2 的附加包,也就是基岩版中的模组。模块 1 完结撒花!我们现在就开始小结吧!

红石原理基础

  • 红石元件:是用于搭建红石系统的元件,分为三类:
    • 电源:能够提供红石信号的元件
    • 传输元件:将信号传输到其他元件的元件
    • 机械元件:接收红石信号并干涉世界运行的元件
  • 红石导体:被红石信号作用后能够激活毗邻(上下东西南北)的红石元件的方块
  • 红石绝缘体(非红石导体):被红石信号作用后不能够激活毗邻(上下东西南北)的红石元件的方块
  • 充能:被红石信号作用后的红石导体,称之为充能状态
    • 根据红石导体的定义,充能的红石导体能够激活毗邻的红石元件
    • 强充能:能激活毗邻的红石粉的充能
    • 弱充能:不能激活毗邻的红石粉的充能,都是由红石粉的信号直接作用引起的充能
  • 红石信号强度:红石信号所能传输的最远的格数
    • 红石粉每传输 1 格,信号就衰减 1 级
    • 使用红石粉传输的信号,一定会在超过 15 格后衰减为 0
  • 红石刻:红石系统的响应速度都是以 0.1 秒为单位的,一切的红石元件的响应时长都是 0.1 秒的倍数,称 0.1 秒为 1 个红石刻
    • 1 秒= 10 红石刻= 20 游戏刻,或 0.1 秒= 2 游戏刻= 1 红石刻(这个很重要!!!)
  • 高频电路:能以高频率输出脉冲信号的电路
  • 逻辑电路:最基础的逻辑电路分为与门、或门、非门
    • 下面的 0 代表无信号(低电平),1 代表有信号(高电平)
    • 非门:输入为 1 时,输出为 0;输入为 0 时,输出为 1
    • 或门:存在一个输入为 1 时,输出为 1;全部输入为 0 时,输出为 0
    • 与门:只有全部输入为 1 时,输出为 1;存在输入为 0 时,输出为 0
  • 对于各元件的用法总结,请读者在 3.1 的对应部分进行实验并自行理解,这里不再过多赘述。

命令方块

  • 命令方块是一种用于执行提前写入的命令的红石元件。
  • 命令方块的上下文信息:
    • 执行者:不存在执行者实体,执行者名称为“悬停注释”的名称,默认为!
    • 执行环境参数:执行位置为命令方块的位置,执行朝向为(xRot=0,yRot=0),执行维度为命令方块所在的维度。
    • 执行权限等级:为1
    • 执行输出反馈:内容写入到“上一次输出”中,并将执行成功次数保存到命令方块的信息中,可用红石比较器读取。
  • 针对命令方块的 4 种常用游戏规则:
    • commandBlockOutPut:控制命令方块的执行效果是否输出到聊天栏。通常关闭。毕竟你也不希望开循环型命令方块的时候被消息轰炸吧?
    • sendCommandFeedBack:控制命令的反馈效果是否输出到聊天栏。通常在开发过程中,需要的时候开启,其余情况下关闭。
    • commandBlocksEnabled:控制命令方块是否启用。通常开启,因为关掉就不能用命令方块了。
    • maxCommandChainLength:控制命令方块链的最大长度。通常保持为默认值65535
  • 命令方块的命令输入区和保存、取消方法:
    • 在右上角的命令输入区中写入命令,可以不带/
    • 命令输入区的左数第一个定位按钮为粘贴剪切板的内容,第二个加号按钮为展开命令输入区。
      • 在展开的情况下,点击右上角的减号可以收缩命令输入区。
    • 按下ESC或右上角的x可以保存命令方块的更改并退出命令方块的界面。
    • 按下左下角的取消不会保存命令方块的更改并退出命令方块的界面。
  • 命令方块的悬停注释:
    • 可以在“悬停注释”中添加命令方块的简要注释,在指向命令方块的时候会像物品展示框一样展示这段注释。
    • 会将命令方块的执行者名称改为这个值。
  • 命令方块的类型:
    • 脉冲型:激活一次就执行一次。
    • 连锁型(Chain Command Block,简称CCB):指向连锁型命令方块的命令方块执行后执行。
    • 循环型(Repeating Command Block,简称RCB):激活状态下循环执行。
  • 命令方块的执行条件:
    • 不受制约:不论命令方块背后是否有命令方块,也不论命令方块背后的命令方块是否成功执行,都在激活后执行
    • 条件制约:只有命令方块背后的命令方块成功执行后执行。
      • 请注意不要和连锁型命令方块的执行条件混淆,需要注意的点已经粗体标出。
  • 命令方块的红石控制(启动条件):
    • 红石控制:只有接收到红石信号后激活。
      • 脉冲型命令方块通常使用这个模式;推荐循环型命令方块使用这个模式。
    • 保持开启:无论是否接收到红石信号,都始终激活。
      • 连锁型命令方块通常使用这个模式。
  • 命令方块链(CB 链):
    • 由一个脉冲型或循环型命令方块开头,后接若干个保持开启的连锁型命令方块的结构。
    • 通常采用平放或竖直放置的方式,可以拐弯甚至蛇形走位。
    • 相比于红石布线使大量命令方块按顺序执行的方式,命令方块链在易编辑性、延迟表现、摆放方式等方面都显著更优。
  • 命令方块的延迟执行:
    • 延迟刻数:
      • 在这个命令方块被激活的状态下,要延迟多久才执行一次命令。
      • 对于脉冲和循环这两种类型的命令方块,01是等价的,都是在激活后的下一个游戏刻执行;而对于连锁型命令方块,01并不等价,1会展现出它的延迟特性。
      • 对于命令方块链,各命令方块依次延迟执行,但循环型命令方块的延迟执行是独立的。所以,对于循环型命令方块链,通常将起始的循环型命令方块的延迟设置为大于其他连锁型命令方块的延迟刻数的总和,以使其执行效果不会发生混乱。
    • 在首刻执行:
      • 只能用于循环型命令方块,决定是否在启动后就立刻执行。
  • 常用的命令方块快捷键:
    • 可以用Ctrl+A全选、Ctrl+C复制、Ctrl+V粘贴。
    • 可以用Ctrl+鼠标中键选取带有相同信息的命令方块。

结构方块、结构空位与命令/structure

  • 结构方块(Structure Block)
    • 是一种对结构(建筑)进行操作(主要是复制粘贴)的红石元件。必须通过命令(ID:structure_block)获取。
    • /clone的关系
      • 都用于复制粘贴特定区域的建筑(结构)。
      • 结构方块的优势:相比于/clone,结构方块能够保存结构里的实体、能够按照特定的旋转、镜像、完整度、动画加载、以及有清晰的边框反映结构方块影响的区域,所以功能性上是远强于/clone的。
      • 结构方块的劣势:但是,因为存在一个“中间状态”,使得复制粘贴小范围的方块的时候并没有/clone来的方便。
    • 有 4 种模式:保存模式、加载模式、角落模式和 3D 输出模式。
      • 保存模式:用于保存结构的模式,通过大小偏移结构名来完整地定义一个结构,并使用结构方块提供的其他设置(包括实体、移除方块、红石保存模式、显示边框)来对这个结构进行修饰,最后通过保存按钮来保存结构,也可以通过导出按钮导出一个.mcstructure结构文件。注意一个保存原则是:不要在结构内保存结构方块。
      • 加载模式:用于加载刚刚保存的,或从外部导入的结构的模式。通过偏移结构名定义加载的结构及其位置,并使用结构方块提供的其他设置(包括实体、含水方块、移除方块、完整性、种子、旋转镜像动画模式动画时长、显示边框)来对这个结构进行修饰,最后通过加载按钮来加载结构。
      • 角落模式:和保存模式联合使用,用于确定一个区域的两个角落。
      • 3D 输出模式:用于导出一个.glb的 3D 模型文件。
  • 结构空位(Structure Void)
    • 标记加载结构时不替换某一位置的方块。必须通过命令获取。
    • 是一种完整方块,一些可附着方块(灯笼、告示牌等)可以附着在其表面形成稳定的悬空方块。
    • 具有一些和空气类似的性质,可穿过且特定情况下不可见。但是,可以在生存模式下被破坏,也因为其完整方块的性质而不允许其他方块直接替换。
  • 结构命令/structure
    • 分为saveloaddelete用法。
    • 其中,saveload用法的功能都来自于结构方块。
    • delete用法则清除特定名称的结构。

屏障、光源方块、允许与拒绝方块、边界

  • 屏障(Barrier,barrier):用于阻挡玩家的隐形方块。创造模式的玩家手持屏障会显示屏障。
  • 光源方块(Light,light_block_(光照强度)):用于发光的隐形方块。创造模式的玩家手持光源方块会显示光源方块。手持光源方块时对光源方块交互可以改变其光照亮度。
  • 允许方块(Allow,allow):无论玩家处于何种游戏模式下(哪怕是冒险模式),也能随意地在允许方块上方放置方块或破坏方块。
    • 常用于使冒险模式的玩家在特定区域内拥有类似于生存模式的体验。
  • 拒绝方块(Deny,deny):无论玩家处于何种游戏模式下(哪怕是生存模式),也不能随意地在允许方块上方放置方块或破坏方块。
    • 常用于服务器的大厅底部,或者是一些无论如何也不希望玩家破坏的区域上。
  • 边界(Border,border_block):阻挡玩家或生物从其上方或下方越过的方块。

基于命令方块的命令系统

  • 由 CB(链)和红石元件组成的,以实现特定逻辑的装置就可以认为是一种小型的命令系统。
  • 在地图制作中,使用类似逻辑的场景就可以认为是一类关卡
    • 不同类型的关卡意味着不同的逻辑,这势必会导致不同的命令系统设计。
    • 要提取出这里面重复的内容完成关卡设计的模板化,这样可以帮助我们快速地根据模板来完成关卡的设计。
    • 一个关卡的基本逻辑大概分为三种:进入、退出、关卡独有功能的运行,其他逻辑都可以从这三个基本逻辑分化而来。
  • 能够影响大多数关卡或大多数类型的关卡运行的系统为底层系统
  • 在玩家难以到达的远处,单开一个区域专门放命令方块,就是命令方块区(CB 区,也可称命令区)。
  • 命令系统常见结构
    • 脉冲链:用于执行一次希望执行的逻辑,基本构造是一个信号源下方的 CB(写入setblock ~~1~ air)和一个脉冲 CB 链。
    • 循环链:用于多次执行希望执行的逻辑,基本构造就是循环 CB 链。
    • 检测 - 脉冲链:先进行循环检测,在检测成功后激活脉冲链,基本构造是在 RCB 中写入检测项目,然后通过红石比较器检查项目是否成功检测,最后通过红石比较器输出信号并执行一个脉冲 CB 链。
    • 检测 - 循环链:先进行循环检测,在检测成功后激活循环链。检测 - 循环链中往往有大量的条件制约型 CCB。
      • 社区中所说的断链法本质上也是一种检测 - 循环链,只是其程序编写逻辑更类似于检测 - 脉冲链。
  • 常见错误的排查方法
    • 语法问题:通过先检查参数对应,再检查拼写错误的思路来检查,基本可以解决 99% 的语法错误的问题。
    • 在聊天栏运行成功,而在命令方块运行失败:检查执行者和执行环境参数是否出现了问题,可考虑套用/execute以纠正执行环境的问题。
    • 逻辑错误:先明确错误的表现形式;然后挨个执行命令的效果是怎么样的,以确定问题根源;最后找到一个解决问题的方案,通常只需要打个补丁,比如加个变量、调换一下命令的顺序就能解决。
    • 读者还应综合考量修复的效益是否和其严重性、难易程度匹配,如果问题不严重修复还难,通常我们就不会修复。