All versions
1.0.6-forge1.20.1
Alpha
Betterworld(village) 1.0.6-forge1.20.16 months ago 14
Compatibility
Minecraft: Java Edition
1.20.1
Platform
Forge
Supported environments
Singleplayer only
Changes
版本:1.0.6 镇级离线模拟和离线摘要
套利和交易日志
-
修复套利失败原因显示
arbitrage_failed日志中的失败原因现在会走log.betterworld.trade_failure_reason.*翻译。- 不再把
reverse_trade_loop这类内部原因 key 直接显示给玩家。
-
套利候选提前避开反向交易限制
ArbitrageStrategy在挑选买入商人和卖出商人时会检查TradeLoopGuard。- 被短期反向交易限制挡住的套利机会会被跳过,减少“刚发现机会就失败”的刷屏日志。
离线模拟
-
按镇级边界触发
- 离线模拟不再盯着单个区块加载等级,而是看镇范围内是否还有非旁观玩家。
TownblockEntity会记录最后一次强加载时的LastStrongLoadedGameTime和LastStrongLoadedDayTime。- 镇范围内无人时,商人和资源点跳过精确 tick;玩家回来后如果离线时长超过
town.offlineSimulation.minTicks,镇会按时间差补算。 - 默认最小离线时长是 6000 tick,单次最多补算
town.offlineSimulation.maxDays天,默认 30 天。
-
按天循环计算
- 离线补算不是把所有结果一次性算完,而是按“天”循环推进。
- 每天先抓一份当日商人价格快照,再用这份快照执行当天离线交易。
- 当天交易结束后,再做商人跨日经济结算,第二天交易就使用更新后的价格。
- 这样可以避免“同一天前后价格不一致”或“离线交易误用未来价格”的问题。
-
当前已经补算的内容
- 资源点:按产出规则补生产,产物先进入资源点容器,再按比例由资源工从容器中售出。
- 农民:会读取绑定农场方块缓存的耕地和作物扫描结果,按作物类型和离线天数估算日均产量;估算收获先进入农民家容器,再和家中已有农产品一起按比例卖给商人。
- 工匠:会按工坊配方、家容器材料和每日加工上限估算加工批次,消耗材料并把成品存回家容器;随后出售家容器里的成品,并按材料缺口从商人处买回一部分材料。
- 生活费:按离线天数从每个镇内绑定 AI 的个人
money中扣固定日常开销,扣掉的钱直接消失。 - 关系:镇内绑定 AI 会按离线天数累积少量社交好感变化,并写入统一日志。
- 位置:离线结束后不回放路径,只按当前时间把 AI 放到工作点、家附近或床附近的合理锚点。
-
计算原则
- 所有离线交易都受性格影响,交易比例会乘以
PersonalityProfile.offlineTradeRatioMultiplier();当前覆盖资源售卖、农民出售、工匠出售、工匠采购和工匠加工上限。 - 交易按当天价格快照结算,商人资金不足时只成交可支付数量,剩余物品回到原容器。
- 资源点、农民、工匠的离线交易都只扫描绑定容器,不会乱扫其他箱子。
- 离线模拟的目标是“前情提要”,让资金、价格、库存、关系、日志和位置能互相解释,而不是精确还原每一秒。
- 所有离线交易都受性格影响,交易比例会乘以
-
离线摘要
- 每个 Steve 还会保存一条单独的离线摘要。
- 摘要会从价格波动、资金变化、交易卡住、里程碑和关系变化里挑 3 到 5 件最重要的事。
- 信息书日志页顶部会先显示这条摘要,再显示按天分页的详细日志。
-
离线模拟代码结构拆分
- 离线模拟逻辑已从
TownblockEntity抽到src/main/java/com/BetterWorld/block/entity/townblock/offline/。 TownOfflineSimulation负责总控,OfflineTownContext负责收集镇内实体、家、工坊和商人。OfflineTradeService、OfflinePlacementService、OfflineSocialService分别处理离线交易、落点和关系变化。TownblockEntity只保留触发入口和必要状态访问器。
- 离线模拟逻辑已从
-
新增 OfflineTradeExecutor
- 离线买卖由
OfflineTradeExecutor统一执行,复用实时交易同类核心规则:价格、库存、资金、收购容量、税额和经济统计。 - 离线交易使用当天价格快照,不写实时商人经营日志,不触发实时经济页网络同步。
MerchantblockEntity新增离线统计记录方法,只更新统计并标记脏数据,避免无人镇补算时发送实时同步包。- 资源点本体只负责离线产出到资源点容器,资源工售卖统一交给镇级离线交易服务。
- 离线买卖由
-
农民离线产量估算
OfflineTownContext现在会收集绑定到农民的FarmblockEntity。OfflineTradeService会根据农场扫描缓存中的耕地数量和作物类型估算每日产量。- 小麦、胡萝卜、土豆、甜菜会按不同作物产物进入农民家容器,并写入离线产出日志和离线摘要。
- 该逻辑不修改真实田地状态,只用于让离线期间的农民库存、出售、资金和日志能互相解释。
-
工匠离线加工
- 工匠离线期间会按工坊配方检查家容器材料,估算可加工批次。
- 加工会消耗家容器中的材料,把成品放回家容器,再进入同一天的离线出售流程。
- 加工批次受
WORKSHOP_MAX_CRAFTS_PER_WORK_TASK和性格倍率影响,不模拟逐 tick 加工。 - 资源工离线日志措辞改为“资源点物资被售出”,避免误导玩家以为真实执行了取货路径。
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:k233t5Y1:ZnVcgL54"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:k233t5Y1:ZnVcgL54"
}

