All versions
1.1.2-forge1.20.1
Alpha
Betterworld(village) 1.1.2-forge1.20.15 months ago 11
Compatibility
Minecraft: Java Edition
1.20.1
Platform
Forge
Supported environments
Singleplayer only
Changes
版本:1.1.2 工作身份修正、GUI 整理与实体细节调整
-可以说这个版本实现了玩家当老板工人的所有设计,额理论上玩家甚至能给ai老板当员工。不过我不知道效果怎么样。
老板、员工与职业保持
- 修正有员工的老板被刷新成
none职业后原地站着不动的问题。 - 工作绑定刷新现在区分“是否亲自占用工作点”和“是否属于某个工作点”。
- 有员工的 owner 仍保留原职业和工作点,但对应工位工作 Goal 会被
WorkOwnership跳过,转入老板生活模式。 - 单 owner 没有员工时仍照旧亲自工作。
银行家买食物优先级
- 修正银行家在缺食物时仍长期站岗的问题。
BankerWorkGoal现在只要检测到FoodPolicy.needsFood(steve),就不会继续启动或维持站岗。PlanExecutor现在会在当前 Goal 的canContinue变为 false 时允许切换目标,避免长时间站岗计划挡住买食物、回家取钱等行为。
GUI 主界面整理
- 银行方块主界面重新排版:范围输入、范围操作、财务状态、owner/容量和底部入口按钮重新分区。
- 资源点主界面重新排版:范围输入、范围操作、绑定操作、工作/规则入口分别成行。
- 银行和资源点主界面的长文本会裁切,减少文字和按钮重叠。
网络权限与服务端校验
- 家、农场、商人、镇方块的范围设置包补齐距离、管理权限和范围夹取校验。
- 商人改价包补充管理权限和距离校验,避免非 owner / 非镇主伪造包改价格或收购上限。
- Steve 作息设置新增
SteveAccess权限判断,只有能管理该实体绑定家、工作点或镇方块的玩家,以及创造 / OP 玩家,才能修改作息。 - Steve 信息页打开包增加距离校验,普通玩家不能远程打开任意已加载 Steve 信息页。
- 清理 GUI 和网络包中残留的
System.out.println调试输出。
Steve 皮肤与性别
- Steve 皮肤现在按性别选择:
- 男性从
steve.png、steve1.png、steve2.png中随机选择。 - 女性从
alex.png、alex1.png、alex2.png中随机选择。
- 男性从
- 渲染器按性别切换模型:男性使用普通 Steve 模型,女性使用 slim Alex 模型。
- 性别判断改用 Unicode escape,避免 Java 源码中文编码损坏导致判断失败。
- 已保存
SkinPath的旧实体不会自动重抽皮肤;新生成或没有保存皮肤路径的实体会按新规则抽取。
饥饿消耗
- 在线饥饿消耗改为每
1600 tick扣 1 点。 - Minecraft 一天为
24000 tick,因此现在一天约扣15点饥饿值。 - 离线模拟同步使用同一个
SteveEntity.HUNGER_LOSS_INTERVAL_TICKS,保持在线和离线消耗一致。
AI 计划切换与失败冷却
PlanExecutor修正同一个 Goal 反复重启自己的问题,只有更高优先级目标,或当前目标不能继续且新目标优先级不低时才切换。- 修正农民工作 / 巡田、资源工工作 / 返回资源点等计划来回抢占导致“移动中已到达”或反复折返的问题。
FoodTradeTask在需要先补钱、交易失败、找不到合适商人等情况下都会写入食物购买冷却,避免银行家和其他职业无限刷购买尝试。- 交易冷却把
merchant_no_stock、merchant_remove_failed、missing_sell_price视为当前商人不可继续尝试的终止失败,避免商人没库存时实体连续请求。
商人查找与库存保护
MerchantFinder.findCandidateMerchantBlocks现在要求商人方块确实能满足当前交易请求,而不是只看是否有价格记录。findBestMerchantBlock(steve, request)找不到匹配请求的商人时返回null,不再退回最近商人,避免实体跑去没有可交易库存的空店。- 绑定商人实体出售食物时改用
FoodPolicy.sellableMerchantStockCount,商人个人保留口粮不会被错误当作可出售库存。
起床期与早晨准备
- Steve 新增上班前起床期:默认工作开始前
2000 tick起床,但不会立刻执行早晨取物、买食物或正式工作。 isPersonalSleepTime会排除上班前起床期,玩家睡过夜后实体不会继续被判定为该睡觉。handleMorningRoutine改为读取个人作息,不再写死currentTime < 1200。- 新增
MorningWakeGoal并注册到Brain,起床到正式上班之间会走轻量清醒状态。 Goals.isMorningPreparationTime现在只覆盖正式工作时间,早晨准备、取钱取物从工作开始后再触发。
寻路、上下楼与床边睡觉
- 1.1.2 最终版没有把
NavigationCache的不可达缓存和指数退避接回普通移动主路径;普通移动继续走MoveToTask+NavigationTargetResolver,最终交给原版PathNavigation。 MoveToTask会先判断实体是否已经足够接近目标点;原版moveTo(...)返回 false 时也会再检查是否已经在交互距离内,避免“已经到床边/柜台边却被判定寻路失败”。NavigationTargetResolver在单段原版路径找不到时,会尝试LayeredNavigationResolver生成入口、出口、目标点的分层 waypoint 路线,用于楼梯、上下层和明显 Y 轴落差场景。MoveToTask现在按NavigationRoute.waypoints()逐段移动;商人交易移动也会先走第一段 waypoint,不再直接硬冲最终方块坐标。NavigationTargetResolver.canStandAt禁止把床面当普通站立点;功能方块、床、容器仍应视为交互坐标,优先找周围可站位。SleepGoal不再直接移动到床方块,而是选择床脚或床侧可站位置接近;真正睡觉仍由SleepTask对齐到sleepY = bedY + 0.5625。- 睡觉移动使用更宽的床边交互到达半径,和
SleepTask的入睡范围保持一致,避免 Steve 到床边后显示寻路失败、需要玩家撞一下才躺下。 SleepTask的床占用检测改为优先检查实体sleepingPos是否属于同一张床,修正两张床紧挨时隔壁床睡着的人把当前床误判为占用的问题。- Steve 醒着时如果站到床上或床内,会停止当前导航并尝试移动到最近可站的床侧位置,避免在床上原地旋转下不来。
GUI 与翻译补充
- 资源点主界面二次整理按钮位置:绑定 / 解绑 / 管理与工作一次 / 规则入口分两行放置,减少与状态文本重叠。
- 资源点主界面客户端管理按钮显示权限收紧为创造模式或 owner,普通无关玩家不再看到管理控件。
- 状态翻译
status.betterworld.evening_wander中文从“傍晚闲逛”改为“闲逛”。
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:tDfNgdbk"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:k233t5Y1:tDfNgdbk"
}

