refactor: 移除 Baritone 依赖,改为内置 A* 寻路+自动行走铺轨
这个提交包含在:
@@ -1,39 +1,52 @@
|
||||
# AutoRail — 自动铺铁轨(Fabric 1.21.4 + Baritone API)
|
||||
# AutoRail — 自动铺铁轨(Fabric 1.21.4,内置寻路)
|
||||
|
||||
面向方向自动铺设铁轨的 Minecraft 客户端模组。不依赖 Baritone 寻路来规划轨道——
|
||||
它只借 Baritone 的行走能力做“点到点建造”,保证铁轨能铺过悬崖边等寻路会回避的地形。
|
||||
按住 **R+T** 打开菜单,输入**起始点**、**目标点**和必经的**途径点**,模组用内置 A* 寻路
|
||||
规划一条可铺轨的路线,然后控制玩家边走边铺,直到目标点。**不依赖 Baritone**,寻路与行走全部内置。
|
||||
|
||||
## 使用
|
||||
|
||||
1. 安装 [Fabric Loader ≥0.16.9](https://fabricmc.net/use/) 与 [Fabric API](https://modrinth.com/mod/fabric-api),以及 Baritone(1.13.1,兼容 1.21.4 的版本)。
|
||||
2. 把 `autorail-<version>.jar` 放进 `mods/`。
|
||||
3. 进游戏后按 **R** 开启/关闭。背包里要有**铁轨**(垫脚石需要时还要有**圆石**)。
|
||||
4. 按住/调整视角方向→玩家会边走边往正前方铺直轨;手动转 90° 即可转弯(只铺直轨)。
|
||||
5. 前方被阻挡、找不到地面、铁轨耗尽时自动停止并提示。
|
||||
1. 安装 [Fabric Loader ≥0.16.9](https://fabricmc.net/use/) 与 [Fabric API](https://modrinth.com/mod/fabric-api),把 `autorail-<version>.jar` 放进 `mods/`。
|
||||
2. 进世界后按住 **R+T** 打开菜单(先按 T 弹出聊天栏也会被菜单替换掉,正常现象)。
|
||||
3. 起始点留空 = 当前坐标;目标点必填;途径点可添加多个(按顺序经过)。
|
||||
坐标格式支持:`100 64 -200`(x y z)、`100 -200`(x z,自动找地面)、`~`、`~ 10 ~`、`~-5` 等相对写法。
|
||||
4. 点“开始铺轨”:先分片寻路(菜单/聊天栏显示进度,不卡游戏),完成后自动开始铺设(菜单自动关闭)。
|
||||
5. 快捷栏需要**铁轨**;遇到悬空/水面会自动用**圆石**垫脚,没有则提示并停止。
|
||||
6. 铺轨过程中不要打开聊天/背包等界面(行走会暂停);再按 R+T 可查看进度或点“停止”。
|
||||
|
||||
## 行为逻辑
|
||||
## 内置寻路(A*)
|
||||
|
||||
- **取朝向**:读取玩家水平朝向(Yaw),计算正前方 2 格处的地面。
|
||||
- **放置**:切换热键栏到铁轨并同步 `UpdateSelectedSlotC2S`,随后通过
|
||||
`ClientPlayerInteractionManager`(Baritone 的 `IPlayerController`)发送右键放置——
|
||||
**全程合法交互,绝不 `world.setBlockState`**,多人服务器才会承认。
|
||||
- **移动**:放置后设 `GoalBlock` 让玩家走到目标点,循环往复。
|
||||
- **节奏**:每次动作间隔 5 tick(250ms),处于多人服务器建议的 200~300ms 区间。
|
||||
- **垫脚石**:目标列下方悬空/落差超过 2 格时,先拿圆石右键垫补,再接铺铁轨(可选逻辑,已实现)。
|
||||
- **铁轨朝向**:交给原版自动衔接(直轨)。转弯靠玩家手动转视角,开发量减半。
|
||||
- 专为铁轨设计:4 向移动、允许 ±1 格坡度、禁止掉头、禁止“转弯+坡度”同格(原版没有斜弯轨)。
|
||||
- 每个节点校验:上方两格可通行(玩家沿线行走)、下方有实心支撑或可用圆石垫补、避开水面/岩浆。
|
||||
- 转弯有额外代价(尽量走直线);已有铁轨可复用且有折扣,优先延伸既有线路。
|
||||
- 分片执行(每 tick 限额展开 4096 节点);搜索范围限制在检查点包围盒外扩 48 格,总展开上限 40 万节点。
|
||||
|
||||
## 铺设(合法交互)
|
||||
|
||||
- 切换快捷栏 + `processRightClickBlock` 右键放置,**全程合法交互,绝不 `world.setBlockState`**,多人服务器可信任。
|
||||
- 放置节奏 200ms 一次;放置前自动看向目标方块;上坡自动跳跃;卡住自动检测并停止报错。
|
||||
- 行走只用客户端输入(前进/跳跃键 + 平滑转向),路径按“已铺设节点”推进,不会踩空。
|
||||
|
||||
## 代码结构
|
||||
|
||||
```text
|
||||
com.autorail
|
||||
├─ AutoRailClient # 入口:R+T 组合键 + 每 tick 驱动服务
|
||||
├─ gui/AutoRailScreen # 菜单:起点/终点/途径点输入与状态显示
|
||||
├─ service/AutoRailService # 状态机:PLANNING → LAYING → DONE/FAILED
|
||||
├─ service/RailExecutor # 执行器:行走控制 + 合法放置铁轨/圆石
|
||||
└─ pathing/ # 内置寻路:RailPathfinder(A*)、RailStep、CoordParser
|
||||
```
|
||||
|
||||
## 开发
|
||||
|
||||
```bash
|
||||
gradlew build # 产物在 build/libs/autorall-<version>.jar
|
||||
gradlew build # 产物在 build/libs/autorail-<version>.jar
|
||||
```
|
||||
|
||||
- `src/main/java/com/autorall/AutoRailClient.java` — 入口:按键绑定、进程注册
|
||||
- `src/main/java/com/autorall/process/RailProcess.java` — 铺轨主逻辑(`IBaritoneProcess`)
|
||||
- Baritone API 依赖:`libs/baritone-api-fabric-1.13.1.jar`(本地 `modImplementation`,Loom 自动重映射)
|
||||
|
||||
## 已知限制
|
||||
|
||||
- 只铺普通铁轨(`minecraft:rail`),不支持动力铁轨/探测铁轨。
|
||||
- 只铺直轨;曲线由原版在相邻铁轨存在时自动形成,手动转弯请让两段直线夹角足够清晰。
|
||||
- `isSolidBlock` 等判定基于客户端世界状态;服务器延误时可能出现个别放置失败,会自动重试。
|
||||
- 只铺普通铁轨(`minecraft:rail`),不铺动力铁轨/探测铁轨。
|
||||
- 不破坏、不放置除铁轨/圆石外的方块:遇到障碍会绕路而不是挖穿。
|
||||
- 起始点必须在玩家附近(水平 6 格、垂直 8 格以内)——本模组不含到远处的自由行走导航。
|
||||
- 遇水会垫圆石架桥,但岩浆列直接视为不可通行。
|
||||
- 基于客户端世界状态判定;服务器延迟时个别放置会失败,会自动重试。
|
||||
|
||||
在新工单中引用
屏蔽一个用户