# AutoRail — 自动铺铁轨(Fabric 1.21.4,内置寻路) 按住 **R+T** 打开菜单,输入**起始点**、**目标点**和必经的**途径点**,模组用内置 A* 寻路 规划一条可铺轨的路线,然后控制玩家边走边铺,直到目标点。**不依赖 Baritone**,寻路与行走全部内置。 ## 使用 1. 安装 [Fabric Loader ≥0.16.9](https://fabricmc.net/use/) 与 [Fabric API](https://modrinth.com/mod/fabric-api),把 `autorail-.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*) - 专为铁轨设计: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/autorail-.jar ``` ## 已知限制 - 只铺普通铁轨(`minecraft:rail`),不铺动力铁轨/探测铁轨。 - 不破坏、不放置除铁轨/圆石外的方块:遇到障碍会绕路而不是挖穿。 - 起始点必须在玩家附近(水平 6 格、垂直 8 格以内)——本模组不含到远处的自由行走导航。 - 遇水会垫圆石架桥,但岩浆列直接视为不可通行。 - 基于客户端世界状态判定;服务器延迟时个别放置会失败,会自动重试。