
自动窗口大小
使用可配置尺寸、最小锁定和自动全屏自动调整Minecraft游戏窗口大小。Forge 1.20.1模组。
Auto Window Size
Minecraft Forge 1.20.1 客户端模组 | 自动窗口尺寸、居中与最小尺寸锁定
目录
目的
在制作整合包时,我经常遇到这个问题:精心调整了各种模组的 UI 布局后,玩家以不同的分辨率启动游戏,窗口尺寸发生变化,所有 UI 布局都被打乱了。
为了解决这个问题,我制作了这个模组:它在启动时自动将窗口设置为指定尺寸并居中,同时锁定最小窗口尺寸——确保整合包的 UI 布局在不同玩家的电脑上保持一致。
功能
- 启动时自动设置窗口尺寸:自动将游戏窗口调整为配置的分辨率,并在当前显示器上居中
- 最小尺寸锁定:锁定时,窗口只能放大,不能缩小到配置尺寸以下——保护 UI 布局
- 原生视频设置入口:在
选项 → 视频设置中原生插入了一个“窗口设置”按钮,位于“全屏分辨率”正下方,可随列表正常滚动和缩放 - 窗口设置界面:一个专用的设置界面,包含手动锁定开关,并实时显示屏幕分辨率和游戏窗口分辨率
- 自定义快捷键切换:在控制设置中绑定按键以快速切换锁定状态(默认:未绑定)
- 低分辨率时自动禁用:当配置的或硬编码的最小分辨率超过玩家的屏幕分辨率时,自动禁用锁定并保持窗口不变,以避免显示错误
- 退出全屏时恢复:从全屏切换回窗口模式时,自动恢复配置的窗口尺寸和位置
- 进入世界时状态通知:每次进入世界时,聊天栏显示当前锁定状态(已锁定 / 已解锁 / 已禁用)
- 实时分辨率显示:窗口设置界面实时显示当前屏幕分辨率和游戏窗口分辨率,停止拖动窗口 1 秒后自动刷新
- 多显示器支持:自动检测游戏窗口所在的显示器,并据此居中
分辨率优先级
窗口尺寸遵循以下优先级(从高到低):
硬编码最小值(1024×576)
↓
配置文件值(默认 1280×720,可配置)
↓
玩家手动拖动(仅在锁定禁用时)
| 优先级 | 来源 | 默认值 | 说明 |
|---|---|---|---|
| 1(最高) | 代码中硬编码 | 1024×576 | 硬编码最小分辨率,16:9 宽高比,永远不会低于此值 |
| 2 | 配置文件 | 1280×720 | 在 config/autowindowsize-client.toml 中修改,启动时读取 |
| 3(最低) | 玩家拖动 | — | 仅在关闭锁定时生效;玩家可自由拖动窗口边缘 |
注意:启用锁定时,窗口的最小尺寸 = 配置值(但不低于硬编码最小值)。如果配置值低于 1024×576,则实际最小尺寸为 1024×576。
锁定机制
锁定开启时
- 窗口的最小尺寸锁定为配置值(不低于 1024×576)
- 窗口可以放大,无上限
- 窗口无法缩小到锁定尺寸以下
- 退出全屏时,窗口恢复为配置尺寸并居中,并重新应用最小尺寸限制
锁定关闭时
- 窗口尺寸完全自由,可任意放大或缩小
- 退出全屏时,窗口恢复为配置尺寸并居中,但不设置最小尺寸限制
- 玩家可通过 UI 按钮或自定义快捷键重新启用锁定
锁定禁用时
- 锁定功能完全不可用,按钮置灰且无法点击
- 窗口尺寸不改变,保持玩家原有的尺寸
- 退出全屏时,窗口尺寸不改变
- 按下自定义快捷键时,聊天栏显示消息:“分辨率过低,锁定功能已禁用”
- 进入世界时,聊天栏显示禁用原因
低分辨率检测
触发条件
当满足以下任意条件时,自动禁用锁定:
配置宽度 > 当前屏幕宽度
配置高度 > 当前屏幕高度
硬编码最小宽度(1024) > 当前屏幕宽度
硬编码最小高度(576) > 当前屏幕高度
触发后的行为
- 窗口尺寸不变:保持玩家启动前的窗口尺寸,不强制设为配置值
- 无最小尺寸限制:不调用 GLFW 的窗口尺寸限制
- 锁定自动关闭:
lockEnabled = false - 标记为已禁用:
lockDisabled = true - 进入世界时聊天通知:红色文字说明禁用原因
- 窗口设置中按钮置灰:显示“锁定已禁用(分辨率过低)”,无法点击
- 按键时再次通知:按下切换锁定键时,聊天栏再次显示分辨率过低
如何恢复
将配置文件中的分辨率修改为小于或等于屏幕分辨率,然后重启游戏。
注意:检测在游戏启动时运行一次。运行期间更改屏幕分辨率不会重新触发检测。
退出全屏行为
从全屏切换回窗口模式(F11)时,模组的行为取决于当前锁定状态:
| 锁定状态 | 行为 |
|---|---|
| 锁定开启 | 恢复配置窗口尺寸并居中,重新应用最小尺寸限制 |
| 锁定关闭 | 恢复配置窗口尺寸并居中,不设置最小尺寸限制 |
| 锁定禁用 | 不改变窗口尺寸,保持退出全屏后的尺寸 |
游戏内状态通知
每次从主菜单或加载界面进入世界时,聊天栏显示一次当前锁定状态:
| 状态 | 消息 | 颜色 |
|---|---|---|
| 锁定开启 | [AutoWindowSize] 最小窗口已锁定 |
绿色 |
| 锁定关闭 | [AutoWindowSize] 窗口尺寸已解锁,可自由调整大小 |
灰色 |
| 锁定禁用 | [AutoWindowSize] 配置或最小分辨率超过屏幕分辨率,窗口锁定已自动禁用,窗口尺寸不变 |
红色 |
- 每次进入世界仅显示一次
- 返回主菜单并再次进入世界后,会再次显示
- 通知显示在聊天栏中,而非标题/副标题
窗口设置界面
如何打开
- 主菜单:
选项...→视频设置...→ 点击窗口设置按钮 - 游戏内:
Esc→选项...→视频设置...→ 点击窗口设置按钮
“窗口设置”按钮原生插入到视频设置列表中“全屏分辨率”行的正下方,可随列表和 GUI 缩放正常滚动和缩放。
界面内容
| 元素 | 说明 |
|---|---|
| 屏幕分辨率 | 当前主显示器分辨率(例如 1920 × 1080),白色文字 |
| 游戏分辨率 | 当前游戏窗口帧缓冲像素尺寸(例如 1280 × 720),浅绿色文字 |
| 窗口锁定按钮 | 点击切换锁定开/关;锁定时置灰且无法点击 |
| 完成按钮 | 返回视频设置界面 |
实时刷新机制
- 打开界面时,读取一次当前窗口分辨率
- 拖动窗口边缘调整大小时,界面显示橙色提示:“窗口尺寸变化中,松开后 1 秒自动刷新……”
- 停止拖动 1 秒后,“游戏分辨率”值自动更新
- 延迟刷新可避免拖动期间频繁重绘文字导致卡顿
安装
- 确保已安装 Minecraft 1.20.1 和 Forge 47.x
- 将模组 jar 文件放入
.minecraft/mods文件夹 - 启动游戏
这是一个客户端模组,无需安装在服务器上。
配置
文件路径
.minecraft/config/autowindowsize-client.toml
配置选项
[window]
# 启动窗口宽度,也是锁定时的最小宽度
# 范围:1 ~ 7680
# 默认:1280
width = 1280
# 启动窗口高度,也是锁定时的最小高度
# 范围:1 ~ 4320
# 默认:720
height = 720
注意事项
- 配置值在游戏启动时读取;运行期间修改配置文件需重启后生效
- 如果配置值低于硬编码最小值(1024×576),实际最小锁定尺寸仍为 1024×576
- 如果配置值高于屏幕分辨率,锁定会自动禁用,窗口尺寸不变
按键绑定
默认状态
未绑定。模组不占用任何按键;玩家需在控制设置中自行绑定。
如何绑定
选项...→控制...- 搜索“Auto Window Size”或滚动找到“Auto Window Size”分类
- 点击“切换窗口尺寸锁定”
- 按下想要绑定的按键(可以是键盘按键或鼠标按钮)
- 点击“完成”保存
使用方法
- 游戏内(世界中)按下绑定的按键以切换锁定开/关
- 聊天栏显示切换后的状态
- 锁定禁用时,按下按键不会切换状态,而是显示分辨率过低
多显示器支持
- 启动时,模组自动检测游戏窗口当前所在的显示器(基于窗口中心点)
- 窗口在该显示器上居中,而非始终在主显示器上
- 将窗口拖过屏幕时(窗口中心位于两个显示器之间),默认使用主显示器
- 获取当前显示器分辨率时,也使用窗口所在显示器的分辨率,而非主显示器
技术信息
| 项目 | 值 |
|---|---|
| Minecraft 版本 | 1.20.1 |
| Forge 版本 | 47.x |
| 模组 ID | autowindowsize |
| 模组类型 | 客户端 |
| 硬编码最小分辨率 | 1024×576(16:9) |
| 默认配置分辨率 | 1280×720 |
| 许可证 | MIT |
| 语言 | Java |
常见问题
问:为什么我编辑了配置分辨率后窗口没有变化? 答:如果配置的分辨率高于屏幕分辨率,模组会自动禁用锁定并保持窗口不变。请将配置值设为小于或等于屏幕分辨率,然后重启游戏。
问:锁定时还能放大窗口吗? 答:可以。锁定仅限制最小尺寸,不限制最大尺寸——你可以自由放大窗口。
问:如何绑定自定义快捷键来切换锁定?
答:选项... → 控制... → 搜索“Auto Window Size” → 点击“切换窗口尺寸锁定” → 按下想要的按键。默认为未绑定。
问:支持多显示器配置吗? 答:支持。模组自动检测游戏窗口所在的显示器,并据此居中。
问:为什么窗口设置界面中的游戏分辨率不是实时更新的? 答:为避免拖动窗口时频繁重绘文字导致卡顿,模组在你停止拖动 1 秒后更新数值。拖动时会显示橙色提示。
问:锁定被禁用了,如何恢复? 答:将配置文件中的分辨率修改为小于或等于屏幕分辨率,然后重启游戏。锁定禁用仅在启动时检测,运行期间不会自动恢复。
问:这个模组需要安装在服务器上吗? 答:不需要。这是一个纯客户端模组,仅影响客户端的窗口尺寸;服务器无需安装。
问:会与其他模组冲突吗? 答:本模组仅修改游戏窗口的尺寸和最小尺寸限制,不修改任何游戏内机制,因此一般不会与其他模组冲突。如果与其他修改窗口尺寸的模组同时使用,可能会出现冲突。
致谢
感谢所有使用本模组的玩家和整合包作者。 欢迎通过 Issues 提供反馈和建议。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。