From 7a45e6f676ed3b82fa3fcd161c28717eb5c96199 Mon Sep 17 00:00:00 2001 From: lyizai <3945107889@qq.com> Date: Tue, 18 Aug 2026 20:04:26 +0800 Subject: [PATCH] =?UTF-8?q?v1.1.9:=20=E4=BF=AE=E5=A4=8D=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=89=A9=E5=9C=B0=E6=8E=A5=E5=A3=A4=E5=88=A4=E6=96=AD=E8=AF=AF?= =?UTF-8?q?=E6=8A=8A=E5=85=B6=E4=BB=96=E9=82=A6=E5=9B=BD=E9=A2=86=E5=9C=9F?= =?UTF-8?q?=E8=AE=A1=E5=85=A5=EF=BC=8C=E5=AF=BC=E8=87=B4=E9=80=89=E4=B8=AD?= =?UTF-8?q?=E4=B8=8E=E5=B7=B1=E6=96=B9=E4=B8=8D=E7=9B=B8=E9=82=BB=E7=9A=84?= =?UTF-8?q?=E7=9B=AE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++---- gradle.properties | 2 +- .../client/planner/ExpansionPlanner.java | 19 ++++++++++++++----- src/main/resources/fabric.mod.json | 2 +- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 5e7e31d..788ac40 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,18 @@ - 从远程 `markers.json` 拉取各国领土边界 - 四种扩地策略:方形外扩、区域扩地、玩家周围、绕国一圈 -- 区域扩地采用 S 形扫描:从与现有领土接壤的区块开始,横向/纵向 S 形扫过整个矩形,不沿邦国边界,但保证每个新占领区块都与已占领领土接壤 +- 区域扩地采用 S 形扫描:从与己方领土接壤的区块开始,横向/纵向 S 形扫过整个矩形,不沿邦国边界,但保证每个新占领区块都与**己方领土**接壤(仅四个正方向,不把其他邦国领土计入接壤) - 自动寻路(Baritone)前往目标区块,寻路优先走地面减少走入矿洞,超时自动 `/u return` 回城自救 -- 目标有效性校验:寻路/等待/重试前实时校验目标是否仍与己方领土接壤,不接壤立即跳过并重新规划 +- 目标有效性校验:寻路/等待/重试前实时校验目标是否仍未被他人占领,已被占领则跳过并重新规划 - 自动进食(饥饿时自动吃背包食物) - 实时地图 GUI(通过 Ctrl+R 打开) - 监听聊天/字幕消息判断开垦结果 +- 刷新地图时与最新 `markers.json` 核对已占领区块,丢弃地图未确认的超期假占领,避免高地扩地残留空洞 ## 安装 1. 安装 Fabric Loader 0.16.14+ 和 Fabric API -2. 将 `autostore-1.1.8.jar` 放入 `.minecraft/mods/` 目录 +2. 将 `autostore-1.1.9.jar` 放入 `.minecraft/mods/` 目录 3. 启动游戏,按 `Ctrl+R` 打开 GUI ## 构建 @@ -26,4 +27,4 @@ ./build_mod.sh ``` -输出文件:`autostore-1.1.7.jar` +输出文件:`autostore-1.1.9.jar` diff --git a/gradle.properties b/gradle.properties index efc07de..1ea826c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ yarn_mappings=1.21.4+build.8 loader_version=0.19.3 # Mod Properties -mod_version=1.1.8 +mod_version=1.1.9 maven_group=autostore archives_base_name=autostore diff --git a/src/main/java/autostore/client/planner/ExpansionPlanner.java b/src/main/java/autostore/client/planner/ExpansionPlanner.java index f4d41d0..6bba45a 100644 --- a/src/main/java/autostore/client/planner/ExpansionPlanner.java +++ b/src/main/java/autostore/client/planner/ExpansionPlanner.java @@ -227,14 +227,17 @@ public final class ExpansionPlanner { ChunkPos start = this.chooseStart(borderChunks, minX, maxX, minZ, maxZ); // 生成 S 形扫描路径(覆盖矩形内所有区块,含已占领的) List sPath = this.buildSPath(start, minX, maxX, minZ, maxZ); - // 已占领集合:己方领土 + 所有已占领 + 本次规划已纳入的区块 + // 己方领土集合(含本次规划已纳入的区块)。 + // 注意:这里绝不能把其他邦国的领土(allClaimed)混入接壤判断集合, + // 否则会选中一个“挨着其他邦国、但与己方领土不相邻”的区块, + // 服务器会因不接壤而拒绝开拓,导致玩家反复走到无效目标(历史 bug)。 HashSet claimed = new HashSet(actualOwn); - claimed.addAll(allClaimed); ArrayList result = new ArrayList(); for (ChunkPos chunk : sPath) { if (result.size() >= limit) break; - if (claimed.contains(chunk)) continue; - // 必须与已占领领土接壤,保证能够开拓 + // 已被任何邦国(含己方)占领,或本次规划已纳入:跳过,避免重复/跨邦国开拓 + if (allClaimed.contains(chunk) || claimed.contains(chunk)) continue; + // 必须与“己方”领土接壤(含本次已纳入的区块),保证服务器能成功开拓 if (this.ownNeighbors(chunk, claimed) == 0) continue; result.add(chunk); claimed.add(chunk); @@ -478,7 +481,13 @@ public final class ExpansionPlanner { return Math.max(dx, dz = Math.abs(chunk.z() - config.regionCenterZ)) <= Math.max(1, config.regionRadius); } - /** 统计某区块周围(上下左右)属于给定集合的邻居数量 */ + /** + * 统计某区块周围(上下左右四个正方向)属于给定集合的邻居数量。 + * + *

调用方必须传入“己方领土”集合(含本次规划已纳入的区块)作为 {@code own}, + * 用于判断区块是否与己方领土接壤。绝不能把其他邦国的领土混入该集合, + * 否则会误判“与他国接壤”为“可开拓”,选中一个与己方领土不相邻的无效目标。

+ */ private int ownNeighbors(ChunkPos chunk, Set own) { int count = 0; for (ChunkPos neighbor : this.cardinalNeighbors(chunk)) { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 516d27a..133c0c5 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1 +1 @@ -{"schemaVersion":1,"id":"autostore","version":"1.1.8","name":"AutoStore","description":"","authors":[],"contact":{},"license":"All-Rights-Reserved","environment":"client","entrypoints":{"fabric-datagen":["autostore.client.AutoStoreModDataGenerator"],"client":["autostore.client.AutoStoreModClient"],"main":["autostore.AutoStoreMod"]},"mixins":["autostore.mixins.json",{"config":"autostore.client.mixins.json","environment":"client"}],"depends":{"fabricloader":">=0.16.14","fabric-api":"*","minecraft":"1.21.4"},"jars":[{"file":"META-INF/jars/baritone-api-fabric-1.13.1.jar"}]} \ No newline at end of file +{"schemaVersion":1,"id":"autostore","version":"1.1.9","name":"AutoStore","description":"","authors":[],"contact":{},"license":"All-Rights-Reserved","environment":"client","entrypoints":{"fabric-datagen":["autostore.client.AutoStoreModDataGenerator"],"client":["autostore.client.AutoStoreModClient"],"main":["autostore.AutoStoreMod"]},"mixins":["autostore.mixins.json",{"config":"autostore.client.mixins.json","environment":"client"}],"depends":{"fabricloader":">=0.16.14","fabric-api":"*","minecraft":"1.21.4"},"jars":[{"file":"META-INF/jars/baritone-api-fabric-1.13.1.jar"}]} \ No newline at end of file