From c569065054b225c4f5aed2e421370b172d8f15bb Mon Sep 17 00:00:00 2001 From: lyizai <3945107889@qq.com> Date: Wed, 19 Aug 2026 08:19:03 +0800 Subject: [PATCH] =?UTF-8?q?v1.1.9:=20=E5=A2=9E=E5=8A=A0=E7=8E=B0=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E9=99=90=E5=88=B6=EF=BC=8C=E4=BB=85=2011:00-?= =?UTF-8?q?22:00=20=E5=85=81=E8=AE=B8=E5=BC=80=E6=8B=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + .../controller/ExpansionController.java | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/README.md b/README.md index 4143e4d..be629bd 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ - 自动寻路(Baritone)前往目标区块;监听 Baritone 路径事件,目标不可达(CALC_FAILED,如被悬崖/高山/水体隔断)时立即跳过;寻路超时则重新寻路(不立即回城),重试耗尽才跳过当前目标 - 运行时接壤校验:寻路/等待阶段每帧校验目标是否仍与己方领土接壤,地图刷新导致边界变化时立即跳过 - 目标有效性校验:目标若已被其他邦国占领则立即跳过 +- 现实时间限制:仅 11:00-22:00(本地现实时间)允许开拓,其余时段启动会被拒绝、运行中到点自动停止 - 自动进食(饥饿时自动吃背包食物) - 实时地图 GUI(通过 Ctrl+R 打开) - 监听聊天/字幕消息判断开垦结果 diff --git a/src/main/java/autostore/client/controller/ExpansionController.java b/src/main/java/autostore/client/controller/ExpansionController.java index 37c2eb3..c121de4 100644 --- a/src/main/java/autostore/client/controller/ExpansionController.java +++ b/src/main/java/autostore/client/controller/ExpansionController.java @@ -50,6 +50,10 @@ implements SubtitleChatMonitor.Listener, BaritoneBridge.PathListener { private static final int MAX_LOGS = 2000; /** 日志时间戳格式(时:分:秒) */ private static final DateTimeFormatter LOG_TIME_FORMAT = DateTimeFormatter.ofPattern("HH:mm:ss"); + /** 允许开拓的现实时间起始小时(含,本地时区) */ + private static final int CLAIM_START_HOUR = 11; + /** 允许开拓的现实时间结束小时(不含,本地时区),即 22:00 起停止开拓 */ + private static final int CLAIM_END_HOUR = 22; /** Baritone 寻路桥接(负责自动移动) */ private final BaritoneBridge baritoneBridge = new BaritoneBridge(); /** 扩地规划器(决定下一个目标区块) */ @@ -135,6 +139,17 @@ implements SubtitleChatMonitor.Listener, BaritoneBridge.PathListener { return this.state != State.IDLE && this.state != State.COMPLETE && this.state != State.STOPPED; } + /** + * 判断当前现实时间(本地时区)是否在允许开拓的时间段内。 + * 仅 11:00(含)到 22:00(不含)允许开拓,其余时段服务器会拒绝开拓。 + * + * @return true 表示当前在允许开拓时段内 + */ + public static boolean isWithinClaimTime() { + int hour = LocalTime.now().getHour(); + return hour >= CLAIM_START_HOUR && hour < CLAIM_END_HOUR; + } + /** * 启动自动扩地任务。 * @@ -155,6 +170,13 @@ implements SubtitleChatMonitor.Listener, BaritoneBridge.PathListener { this.status = "Baritone \u5c1a\u672a\u521d\u59cb\u5316\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5"; return false; } + // 现实时间限制:仅 11:00-22:00 允许开拓,其余时段服务器会拒绝开拓(等待超时) + if (!ExpansionController.isWithinClaimTime()) { + this.status = "\u4e0d\u5728\u5f00\u62d3\u65f6\u9650\u5185\uff0811:00-22:00\uff09\uff0c\u65e0\u6cd5\u5f00\u62d3"; + this.setState(State.IDLE, this.status); + this.log("\u542f\u52a8\u5931\u8d25\uff1a\u4e0d\u5728\u5f00\u62d3\u65f6\u9650\u5185\uff0c\u5f53\u524d\u73b0\u5b9e\u65f6\u95f4 " + LocalTime.now().format(LOG_TIME_FORMAT)); + return false; + } this.config = requestedConfig.copy(); this.model = this.dataService.model(); this.playerChunk = this.playerChunk(client); @@ -215,6 +237,13 @@ implements SubtitleChatMonitor.Listener, BaritoneBridge.PathListener { return; } this.playerChunk = this.playerChunk(client); + // 现实时间限制:运行中超出 11:00-22:00 则自动停止,避免服务器拒绝开拓导致超时 + if (this.isRunning() && !ExpansionController.isWithinClaimTime()) { + this.stop(); + this.status = "\u5df2\u5230\u5f00\u62d3\u65f6\u9650\u5916\uff0811:00-22:00\uff09\uff0c\u4efb\u52a1\u505c\u6b62"; + this.log("\u5df2\u5230\u5f00\u62d3\u65f6\u9650\u5916\uff0c\u505c\u6b62\u4efb\u52a1\uff08\u5f53\u524d\u73b0\u5b9e\u65f6\u95f4 " + LocalTime.now().format(LOG_TIME_FORMAT) + "\uff09"); + return; + } if (this.tickAutoFood(client)) { return; }