# 我的维度

[English](README.md) | 简体中文

适用于 Minecraft 1.20.1 / Forge 的心境维度模组，添加裂罅、五种心境、双向心境传送门，以及可选的机械动力列车兼容。

## 环境与依赖

- Minecraft 1.20.1。
- Forge 47.x（项目开发配置为 47.4.0）。
- 机械动力（Create）不是必需依赖；未安装时不影响模组的其他功能。
- 明确支持 Minecraft 1.20.1 上的机械动力 0.5.1 与 6.x；检测到受支持版本时会自动启用列车传送门兼容。

## 主要内容

### 裂罅

- 手持裂罅时，按住 Shift 并右键打开动作轮盘。
- 在轮盘中选择动作后，普通右键执行当前动作。
- 可前往私有或共享心境、传送生物、设置心境锚点，以及访问已获授权的其他玩家心境。
- 使用同一把裂罅再次离开所选心境时，会返回这把裂罅记录的出发点。
- “设置锚点”只能在心境内执行，并且只决定之后使用裂罅传送生物时的落点，不影响玩家或传送门的落点。
- 复制共享心境内容的操作仅限创造模式玩家，并会覆盖私有心境中当前坐标附近 `3×3` 区块的方块，操作前请确认目标区域。

### 心境维度

| 心境 | 地形概述 |
| --- | --- |
| 空灵心境 | 超平坦维度：60 层石头、3 层泥土、3 层石英块。 |
| 镜之心境 | 使用与主世界相同的地形生成配置和世界种子。 |
| 水之心境 | 超平坦水域：20 层石头、5 层砂砾、50 层水。 |
| 自然心境 | 草原超平坦：50 层石头、9 层泥土、1 层草方块，并启用自然特征。 |
| 翱翔心境 | 由多种主世界生态组成的大型悬浮岛屿。 |

心境维度内不会自然生成生物。处于心境中的玩家不能被其他玩家通过 `/tp` 或 `/teleport` 强制传送。

### 心境传送门

心境传送门可在主世界和目标心境之间双向通行。门面使用紫色、品红色和少量青色粒子构成动态视差效果，进入传送门时的屏幕过渡也会继续流动和闪烁。

1. 在主世界竖直搭建一个 `5×6` 的心境门框外框，内部留出 `3×4` 空间。
2. 手持裂罅，通过动作轮盘选择一个“前往”类心境目标，或已获授权的其他玩家心境。传送生物、复制和设置锚点动作不能用于绑定传送门。
3. 使用裂罅右键任意一个心境门框方块以激活传送门。
4. 模组会在目标心境的安全位置自动生成配对传送门。
5. 玩家连续接触门面约 2 秒后完成传送；目标端可以原路返回主世界，传送后约有 4 秒冷却。

门框示意如下，其中 `F` 表示心境门框，`.` 表示内部空间：

```text
F F F F F
F . . . F
F . . . F
F . . . F
F . . . F
F F F F F
```

一座主世界入口共需要 18 个心境门框。传送门的创建者可以重新选择裂罅目标并再次右键门框来更新连接；创造模式玩家不受所有者限制。门面只会自动传送玩家，普通生物需要通过裂罅的“传送生物”动作移动。

### 机械动力列车兼容

安装受支持版本的机械动力后，需要在两个传送门端点都铺设铁轨，并让铁轨沿垂直于门面的方向紧邻门面接入。门面沿 X 轴展开时铁轨沿 Z 轴接入；门面沿 Z 轴展开时铁轨沿 X 轴接入。配对传送门会自动生成，但目标端铁轨不会自动生成。

完成两端铺轨后，列车即可像穿越下界传送门一样在主世界与心境之间双向通行。

兼容层会在检测到机械动力时自动注册，同时支持 Minecraft 1.20.1 上机械动力 0.5.1 与 6.x 使用的传送门轨道 API。模组没有对机械动力类进行静态引用，因此未安装机械动力时仍可正常启动和游玩。

## 合成表

### 裂罅

| 左 | 中 | 右 |
| --- | --- | --- |
| 玻璃 | 末影珍珠 | 玻璃 |
| 末影珍珠 | 时钟 | 末影珍珠 |
| 玻璃 | 末影珍珠 | 玻璃 |

- 材料：玻璃 ×4、末影珍珠 ×4、时钟 ×1。
- 产出：裂罅 ×1。
- 数据配方：[rift.json](src/main/resources/data/mydimension/recipes/rift.json)。

### 心境门框

| 左 | 中 | 右 |
| --- | --- | --- |
| 紫水晶碎片 | 下界石英 | 紫水晶碎片 |
| 下界石英 | 哭泣的黑曜石 | 下界石英 |
| 紫水晶碎片 | 下界石英 | 紫水晶碎片 |

- 材料：紫水晶碎片 ×4、下界石英 ×4、哭泣的黑曜石 ×1。
- 产出：心境门框 ×6。
- 数据配方：[mind_portal_frame.json](src/main/resources/data/mydimension/recipes/mind_portal_frame.json)。

完整搭建一座 `5×6` 传送门外框需要合成 3 次，共消耗紫水晶碎片 ×12、下界石英 ×12、哭泣的黑曜石 ×3，正好得到 18 个心境门框。心境传送门方块本身没有独立合成配方，而是在激活门框时自动生成。

## 筑境权杖与共鸣供材锚

筑境权杖可在任意维度进行连片铺层、拆层和蓝图施工；主手持有时方块交互距离按服务端配置提升（默认 64 格），但不会增加实体攻击距离。铺层的八邻域遍历只沿准星命中方向上真正可见的连续表面扩展，被地面、背板或其他完整方块遮住的地下部分不会再被预览或施工。`Shift+中键` 打开五页工具菜单，中键切换建造/拆除，`Ctrl+右键` 选择蓝图两端点，`Ctrl+Z`/`Ctrl+Y` 撤销或重做。箱子、按钮、供材锚及其他可交互方块会优先接收普通右键且不显示表面预览；按住 `Shift` 才会显示预览并由右键执行权杖施工。按住 `Ctrl` 时蓝框实时显示候选点；同一次按住期间滚动滚轮后会切换为空气选点，滚轮调整沿视线的距离，松开 `Ctrl` 即重置。部署蓝图时也可用同样方式指定空中锚点。全部快捷操作在菜单中也有入口。

- 建造按“绑定锚点 → 主背包 → 快捷栏 → 副手”取材；材料不足的位置保留黄色虚影，右键聚焦任一虚影继续补齐。准星射线进入黄色方格或蓝色选区/部署框的边线与内部体积都会取得唯一焦点并加粗；相连缺料格按 26 邻接视为一组并整体加粗，焦点粗框宽度以约 160 毫秒平滑过渡到普通框的四倍。部署框优先，其余对象按入射距离选择最近者；左键只取消当前焦点，取消部署不会清除源选区。普通建造预览仅显示绿色框，不渲染具体方块；黄色缺料与蓝图投影使用更实的半透明模型，并通过轻微内缩避免相邻投影面共面闪烁。大型预览按 16³ 分区缓存实体 QUADS 线框和投影模型，六面蓝紫裂罅波纹只用于黄色缺料投影；预览距离至少 160 格并随客户端渲染距离提高到最多 512 格，128 格外自动保留完整框架与缺料波纹 LOD，避免近中距离缺块及大型蓝图瞬时烘焙卡顿。
- 手动铺层/拆层在一次交互中立即执行本次设定上限，不再拆成跨 tick 的施工队列。作业页提供每把权杖独立的“历史记录”开关，默认关闭；关闭时不会创建撤销事务、方块实体前后镜像或物资账，从而避开批量施工最重的序列化开销，此时新操作不可撤销/重做。开启后才保留完整事务语义。入口仍会合并拒绝同一时刻的重复快速点击，避免重复射线、BFS 与供材扫描；蓝图自动施工继续使用自身的队列与建造上限。
- 拆除只有在副手工具类型和等级均合格时才保留正常掉落；每个成功拆除的方块消耗一次工具耐久，不生成经验。副手为空或工具类型不匹配时直接无粒子删除，不走原版 `2001` 破坏特效，也不创建掉落列表。每次批量操作只播放一个代表方块音效：建造使用该方块的放置音效，拆除使用拆前方块的破坏音效。
- 共鸣供材锚潜行贴附在容器面上使用。它优先访问目标面的 Forge 物品 Capability，并兼容 `WorldlyContainer`、普通 `Container` 和可配置的无侧面 Capability 回退；普通非容器表面会拒绝放置且不扣物品，容器消失或第三方旁路产生非法锚时会正常掉落并保留 UUID/ACL。跨区块重验使用目标区块反向索引唤醒，不扫描方块、不强制加载区块也不常驻 tick。锚点默认私有，可设置公开或白名单。主手持权杖时，只为当前这把权杖有序绑定、且位于当前维度的供材锚绘制紫色方框；客户端用权杖绑定 UUID 与服务端轻量索引快照求交，不扫描附近区块。换物品、换权杖、解绑、换维度或退出世界都会立即清理或重算缓存。
- 蓝图保存在客户端全局目录 `<游戏目录>/mydimension/blueprints/`，文件扩展名为 `.mindbp`，可跨存档和服务器导入、导出。复制与部署不再限制单轴长度、选区体积或非空气方块数；源区块仍须已加载，世界建造边界及编码传输/内存分配安全预算仍然生效。自动施工每 tick 使用权杖当前“建造上限”作为处理预算；已加载目标跨区块合并成一次供材扫描与历史提交，未加载目标按区块稳定分组并临时租赁，避免以旧的 64 格节流或在区块间逐行往返。服务器会重新验证世界边界、权限、材料、目标方块及完整方块实体 NBT。
- 按住 `Alt` 会立即显示裂罅风格的暗紫径向轮盘；十项操作全部使用独立图标（翻转轴、旋转、偏移、重置、复制选区和保存），选中扇区使用青紫辉光，中央只放大当前图标，并在轮盘外显示当前动作提示。松开后按原状态机关闭或确认调整。完整源选区存在时始终保留复制与保存图标；取消移动中的复制预览后，可直接用“复制选区”从保留的蓝色源选区重新生成预览。服务端选区不再按空闲时间过期，只在重新框选、明确取消、换权杖/维度、退出或停服时清理。保存弹窗将方块状态策略独占第一行、保存与取消并排放在第二行；保存后在同一弹窗等待服务端捕获并直接写入本地蓝图库，不再跳转到第二个保存界面。
- 服务端配置位于 `[builder]`；`enabled=false` 会停用配方、创造栏入口、增距、施工、绑定、远程容器访问和临时区块加载，但不会删除物品、NBT、历史或客户端蓝图库。
- 权杖与供材锚均使用裂罅风格的原生 3D 模型。权杖采用黑灰虚空石、紫蓝裂晶、扭曲杖身和断裂晶簇，不再使用黄铜、齿轮或扳手机械造型；物品栏以约 45° 斜向展示，第一人称模型缩小并右移以保留视野。模式切换只替换悬浮核心的青蓝/紫蓝反向漩涡动画，本体几何和材质不会整体刷新。供材锚的物品视图为 3D 侧视图，世界模型使用非遮挡几何，避免内缩模型裁掉相邻方块表面。

默认合成表：

| 筑境权杖 | 中 | 右 |
| --- | --- | --- |
| 回响碎片 | 下界之星 | 回响碎片 |
| 下界合金锭 | 裂罅 | 下界合金锭 |
| 哭泣的黑曜石 | 烈焰棒 | 哭泣的黑曜石 |

| 共鸣供材锚 | 中 | 右 |
| --- | --- | --- |
| 回响碎片 | 末影之眼 | 回响碎片 |
| 漏斗 | 末影箱 | 漏斗 |
| 心境门框 | 磁石 | 心境门框 |

模组提供 `mydimension:construction_protected` 与 `mydimension:transaction_unsafe` 两个数据包标签。第三方机器若会修改外部网络、全局 `SavedData`、异步任务或自定义实体，应通过兼容适配器或 `transaction_unsafe` 标签排除；Forge 没有能够通用撤销这类模组外部副作用的接口。

## 构建

```powershell
.\gradlew.bat build
```

构建完成后的 jar 位于 `build/libs/`：

- `mydimension-<版本>.jar`：完整版本，包含私有心境、共享心境、组队入口与复制功能。
- `mydimension-<版本>-no-private.jar`：仅保留共享心境，不包含私有心境、组队入口和复制共享心境功能。
