裂隙
裂隙(mxt:rift 方块与它的方块物品)是一扇通往其他维度的门,画出来是一个点与连线的网络;裂隙锚(mxt:rift_anchor)则用来把它改到别的维度去。
点、连线与三角形
mxt:rift 是一个不可见、无碰撞、光照 15 的方块。它自己不渲染任何模型,画出来的东西全部由方块实体渲染器生成。它没有方向参数,也不需要有——一条线连的是两个相邻的点,没有方向可以参与判断:
| 行为 | 规则 |
|---|---|
| 点 | 每个裂隙都在自己方块的中心画一个立方体(它的「点」)。有没有邻居都画,这是它最基本的形态。 |
| 连线 | 扫描以自己为中心的 3×3×3(26 个邻域),见到裂隙就连线,不看朝向、不看平面。 |
| 线的画法 | 每条线由两端各画一半:从自己的中心画到两块中心的中点。两半在中间严丝合缝地接上,所以没有任何一个方块需要知道对面那一半此刻有没有被画出来。 |
| 三角形 | 一个裂隙的两条连线如果彼此也是 3×3×3 邻居,这三块就围成一个三角形,此时填充三角形内部。填充同样各画各的:每个顶点画「自己 → 三角形重心」那一份,三份正好铺满整个三角形,不重不漏,每份面积恰好是 1/3。 |
| 粗细 | 点的边长、线的直径、填充板的厚度是同一个值,由客户端配置「裂隙 → 裂隙粗细」控制(默认 0.125 格,可选 0.0001–0.5)。填充不是一张纸:它按这个厚度画出上下两个面并封上外沿。 |
26 邻域比「同一条线上的邻居」密得多:2×2×2 的八块两两相连,会连出 28 条线、围出 56 个三角形。想要稀疏的网就摆稀疏一点。
颜色与目标
- 颜色默认由目标维度决定:对维度 id 做哈希取色,因此同一维度在任何客户端上颜色都一致,服务端不需要为每个裂隙存颜色,也不需要发包。
- 右键染料可以给单个裂隙设颜色覆盖(消耗一个染料);
/mxt rift color <pos> auto清回“随目标维度”。 - 透明度锁死为 1,不可配置:裂隙画出来完全不透明——半透明的填充既会挡住它里面的点和线,又会让这一格看起来像玻璃。
- 目标维度与颜色可以在放置之前就写在方块物品上:组件
mxt:rift是{target: 维度 id, color: 整数颜色},其中color取-1表示随目标维度。物品组件语法、KubeJS 和命令都能写,见数据组件示例。
传送
- 碰到方块就传(实现原版
Portal,getPortalTransitionTime为 0,没有下界门那种预热):mxt:rift无碰撞、可以穿过,实体一碰到它就被送走,没有平面要对齐,从哪一面进都一样。 - 落点按维度缩放换算并夹到世界边界内,然后先找现成的回程裂隙(水平 16 格、垂直 8 格内,目标是来源维度):找到就落在它旁边,找不到才原地开一个通往来源维度的裂隙。所以同一趟来回会落回原处,而不会每走一次就多开一扇门。搜索只查已加载的区块,不会为了找人而生成地形。
- 到达时给 600 刻缓慢下落并播传送门音效;落脚点是第一个站得住的候选,顺序是「四个水平邻格(北 → 南 → 东 → 西)→ 上方一格 → 上方两格 → 裂隙本身」(站得住=脚下有碰撞、这一格没有碰撞也没有液体),七个都不行就落在裂隙处(缓慢下落兜底)。先看旁边是为了刚落地时不会正好站在回程裂隙里。
放置与破坏
- 朝向不影响任何东西:放置时不需要考虑看哪边,两块裂隙只要挨着就连线。
- 裂隙挖不走,也掉不下来。 它的破坏耗时是
-1(与基岩同一档),抗爆也设成3600000,所以生存模式根本挖不动、也炸不掉;创造模式能破坏,但方块没有掉落表,什么都不掉。摆之前先想好位置;要挪走一片裂隙只能用命令(/setblock <坐标> air)重新摆。 - 随机刻会在点周围撒按这块裂隙自己的颜色上色的粒子(原版传送门粒子换成裂隙的颜色),不播放环境音。
放置与调整:两个物品
| 物品 | 用途 |
|---|---|
裂隙(mxt:rift 方块物品) | 只负责摆放:拿着它右键就能放下一块裂隙。堆叠上若带 mxt:rift 组件(数据包、KubeJS 或命令写上去的)就按组件里的目标与颜色摆,否则用默认(主世界 + 随目标维度)。 |
裂隙锚(mxt:rift_anchor) | 只负责调整:承载目标与颜色,自己不放方块。 |
裂隙锚的两件事:
| 用法 | 行为 |
|---|---|
| 对着已有裂隙使用 | 改写那一块裂隙的目标与颜色。 |
| 潜行使用 | 把当前所在维度记到锚上(无需命令就能选目标)。 |
/mxt rift bind <dimension> [color] | 与潜行使用物品等价,但可以直接写成任意维度。 |
所以典型的搭门流程是:用裂隙方块摆出形状,再拿锚逐块(或配合 /mxt rift target)设定通往哪里。
/mxt rift
整棵 /mxt rift 子树都需要 gamemaster 权限;它报告并改写单个裂隙的状态,是排查「它为什么不显示」的入口。玩家侧的正常用法是拿裂隙方块摆、拿裂隙锚改。
| 子命令 | 行为 |
|---|---|
info <pos> | 打印这个裂隙通往哪里、颜色(手动指定还是随目标维度),以及连线数、三角形数、连成一片的格数与是否孤立(周围 3×3×3 内没有第二个裂隙)——一眼看出它会画成什么样、为什么没有连上邻居。 |
target <pos> <dimension> | 改它通往哪个维度(Tab 补全列出服务端所有维度)。 |
color <pos> <RRGGBB|auto> | 设颜色覆盖,写 RRGGBB(可带 #)或 auto。 |
place <pos> <dimension> | 直接在某个可替换的位置放一个通往该维度的裂隙。 |
bind <dimension> [color] | 把手上的裂隙锚设成这个目标,与潜行使用物品等价。 |
客户端显示
点、线与填充由模组自带的分层图案着色器绘制:三者是同一套几何、同一个粗细、同一个颜色,并且都是完全不透明,所以看起来是同一种材料。它可以在客户端配置里调:
- 客户端配置「裂隙 → 自定义着色器」(默认开启):关掉后改用普通半透明颜色,不依赖自定义管线。
- 客户端配置「裂隙 → 裂隙粗细」(默认
0.125,范围0.0001–0.5):点的边长、线的直径、填充板的厚度一起变。