
Auto Window Size
Minecraft Forge 1.20.1 客户端模组 | 自动窗口大小、居中与最小尺寸锁定
⚠ 平台提示:本模组仅支持桌面版 Minecraft(Windows / macOS / Linux),无法在手机版(基岩版 / 手机端)上运行。
📮 关于 v1.0.4 源码的说明:由于作者是 GitHub / Git 新手,在更新 1.0.4 过程中出现过操作失误,曾导致仓库文件一度混乱。如果你下载的源码与实际发布的 jar 对不上,请联系作者邮箱 3270728922@qq.com 获取真正的源码。
[English Version]:(https://www.curseforge.com/minecraft/mc-mods/auto-window-size)
下载
- GitHub Releases: 最新版本
- CurseForge: auto-window-size
- Modrinth: autowindowsize
- MC 百科: Auto Window Size
- BBSMC: autowindowsize
- 问题反馈: GitHub Issues
目录
制作目的
在制作整合包时,我经常遇到这样的问题:好不容易把各个模组的 UI 界面布局调试好了,结果玩家换了一个分辨率启动游戏,窗口大小变了,所有 UI 布局全乱了。
为了解决这个问题,我做了这个模组:启动时自动把窗口设置为指定大小并居中,同时锁定最小窗口尺寸,确保整合包的 UI 布局在不同玩家的电脑上都能保持一致。
Mod 核心目的
这个模组存在的根本理由,是把"游戏窗口大小"从一次偶然,变成一个可控、可复现、可约束的选择:
- 稳定整合包体验:让窗口尺寸成为整合包作者可以提前规划的一部分,而不是交给玩家的启动习惯。
- 保护 UI 布局:通过"最小尺寸锁定",确保任何经过调试的界面都不会因为玩家随手拖动窗口边缘而错位。
- 轻量、无侵入:只操作窗口本身的尺寸与位置,不修改任何游戏内机制、不挂钩任何玩法逻辑,尽可能不与其他模组产生冲突。
- 开箱即用且可定制:有默认值(1280×720)即装即用,也提供配置文件、界面按钮、按键与指令四种方式按需微调。
设计取舍
做这个模组时,我刻意守住了几条边界:
- 只动窗口,不碰游戏内:不改 GUI 缩放、不改任何游戏内 UI、不挂钩玩法逻辑。窗口本质是操作系统层面的事,能不进游戏内部就不进,因此几乎不会和别的模组冲突。
- 延迟生效而非立刻:启动后等约 1.5 秒再改窗口,是为了不拉伸加载界面、也给低配机一点缓冲,而不是一加载完成就硬切。
- 硬下限宁低勿高:最小分辨率写死 856×482(16:9),宁可让更多老一点的显示器也能用,也不把门槛抬高。
- 优雅降级而不是报错:一旦配置尺寸超过玩家屏幕,不崩溃、不弹窗,只是静默禁用锁定并在聊天栏说明原因。
- 默认不抢键:快捷键默认不绑定,避免和玩家已经习惯的键位冲突;想用的人自己去控制设置里绑。
适合谁
- 做整合包、需要各模组 UI 布局在不同分辨率下保持一致的作者;
- 喜欢小窗口贴边玩、又怕一不小心把窗口拖太小的玩家;
- 使用多台显示器、希望窗口自动落在指定屏幕居中的玩家。
未来规划
这是我(作者)第一次制作 Minecraft 模组,因此现阶段保持克制、先把一件事做扎实:
- 当前仅支持 Minecraft 1.20.1 / Forge。这是本模组唯一维护与测试的版本。
- 由于是新手开发,现阶段的首要目标是把现有功能打磨稳定、把文档与体验做扎实,而不是急于铺开版本。
- 待当前版本的功能经过充分使用、确认稳定之后,再考虑移植到其他 Minecraft 版本或其他加载器(如 NeoForge、Fabric、其他游戏版本)。
- 在此之前,暂不承诺其他版本的发布时间线;相关进展会通过 GitHub 与各发布页同步。
功能特性
- 启动自动设置窗口大小:启动游戏后延迟1.5秒自动将窗口设置为配置的分辨率并居中,避免加载界面拉伸
- 锁定最小窗口尺寸:锁定后窗口只能放大,不能缩小到配置尺寸以下,保证 UI 布局不被破坏
- 视频设置原生入口:在「选项 → 视频设置」中原生插入「窗口设置」按钮,位于「全屏分辨率」下方,随列表滚动和 GUI 缩放正常布局
- 窗口设置界面:独立的设置界面,可手动开关锁定、一键把窗口在所在显示器上居中,实时显示屏幕分辨率和窗口分辨率(全屏时黄色并标注"全屏"),按钮状态实时同步
- 居中窗口按钮:窗口化时一键把窗口在当前显示器上居中;全屏、最大化、最小化时自动禁用,避免无效操作
- 客户端指令:
/aws toggle、/aws lock、/aws unlock、/aws status、/aws gui、/aws center,游戏内聊天栏直接操作 - 全屏自动禁用:进入全屏时临时禁用锁定,退出全屏后按全屏前状态自动恢复
- 自定义按键:在控制设置中绑定按键打开窗口设置界面(默认未绑定)
- 分辨率过低自动禁用:当配置分辨率或硬编码最小分辨率高于玩家屏幕分辨率时,自动禁用锁定且不改动窗口大小
- 进游戏状态提示:每次进入世界时,聊天栏提示当前锁定状态
- 实时分辨率显示:窗口设置界面实时显示屏幕分辨率和窗口分辨率,拖动停止后 0.5 秒刷新
- 多显示器支持:自动检测游戏窗口所在的显示器,在对应显示器上居中
分辨率优先级
本模组的窗口尺寸遵循以下优先级(从高到低):
代码硬编码最小值(856×482)
↓
配置文件值(默认 1280×720,可修改)
↓
玩家手动拖动窗口大小(仅在锁定关闭时生效)
| 优先级 | 来源 | 默认值 | 说明 |
|---|---|---|---|
| 1(最高) | 代码硬编码 | 856×482 | 写死在代码里的最小分辨率,16:9 比例,任何情况下都不会低于此值 |
| 2 | 配置文件 | 1280×720 | 在 config/autowindowsize-client.toml 中修改,启动时读取 |
| 3(最低) | 玩家手动拖动 | — | 仅在锁定功能关闭时,玩家可以自由拖动窗口边缘调整大小 |
注意:锁定开启时,窗口的最小尺寸 = 配置文件值。由于配置文件的取值下限已与硬编码最小值(856×482)绑定,配置值必然不会低于 856×482,二者不再可能冲突。
锁定机制详解
锁定开启时
- 窗口的最小尺寸被锁定为配置值(不低于 856×482)
- 窗口可以放大,没有上限
- 窗口不能缩小到锁定尺寸以下
- 退出全屏后,如果全屏前是锁定状态,自动重新应用最小尺寸限制
锁定关闭时
- 窗口大小完全自由,可以任意放大缩小
- 不设置最小尺寸限制
- 玩家可以通过界面按钮、指令或自定义按键重新开启锁定
锁定被禁用时
锁定功能在以下情况下完全不可用:
- 分辨率过低:配置或硬编码最小分辨率超过屏幕分辨率 — 按钮红色灰色,窗口大小不被改动
- 全屏模式:全屏时临时禁用 — 按钮红色灰色,退出全屏后自动恢复
按键或指令在禁用状态下使用会显示红色聊天提示说明原因。
分辨率过低检测
触发条件
当以下任一条件满足时,锁定功能自动禁用:
配置文件宽度 > 当前屏幕宽度
配置文件高度 > 当前屏幕高度
硬编码最小宽度(856) > 当前屏幕宽度
硬编码最小高度(482) > 当前屏幕高度
触发后的行为
- 不改动窗口大小:保持玩家启动前的窗口大小
- 不设置最小尺寸限制:不调用 GLFW 的窗口尺寸限制
- 标记为禁用:
lockDisabled = true - 进入世界时聊天栏提示:红色文字说明禁用原因
- 窗口设置界面按钮灰色:显示"锁定已禁用(分辨率过低)",不可点击
- 指令和按键被拦截:使用时显示红色提示
恢复方法
将配置文件中的分辨率改为小于等于屏幕分辨率的值,然后重启游戏。
注意:检测在游戏启动时执行一次,运行中改变屏幕分辨率不会重新检测。
全屏行为
进入全屏(F11)时:
- 无论当前锁定状态如何,锁定都被临时禁用
- 记录进入全屏前的锁定状态
- 聊天栏显示红色提示:"全屏模式下锁定不可用,退出全屏后自动恢复"
- 窗口设置界面的锁定按钮变为灰色
退出全屏(F11)时:
- 窗口大小和位置由 Minecraft 自动恢复到全屏前的状态(模组不强制设置任何尺寸)
- 如果全屏前锁定是开启的,自动重新应用最小尺寸限制
- 如果全屏前锁定是关闭的,不设置最小尺寸限制
- 如果锁定因分辨率过低被永久禁用,不改动窗口大小
指令
所有指令以 /aws 开头(客户端指令,仅游戏内可用):
| 指令 | 说明 |
|---|---|
/aws toggle |
切换锁定开启/关闭 |
/aws lock |
开启锁定(已开启则提示无需重复操作) |
/aws unlock |
关闭锁定(已关闭则提示无需重复操作) |
/aws status |
显示当前锁定状态和屏幕分辨率 |
/aws gui |
打开窗口设置界面 |
/aws center |
把窗口在当前显示器居中(全屏/最大化/最小化/已居中时提示不可用) |
锁定被禁用时(分辨率过低或全屏),所有锁定相关指令都会显示红色提示说明原因。
进游戏状态提示
每次从主菜单或加载界面进入世界时,聊天栏会提示一次当前锁定状态:
| 状态 | 提示文字 | 颜色 |
|---|---|---|
| 锁定开启 | [AutoWindowSize] ✔ 窗口锁定已开启 |
绿色 |
| 锁定关闭 | [AutoWindowSize] ✔ 窗口锁定已关闭,可自由调整大小 |
灰色 |
| 分辨率过低 | [AutoWindowSize] ✘ 锁定已自动禁用 — 配置分辨率超过屏幕分辨率 |
红色 |
| 全屏模式 | [AutoWindowSize] ✘ 全屏模式下锁定不可用,退出全屏后自动恢复 |
红色 |
- 每次进入世界只提示一次
- 提示输出在聊天栏,不是标题/副标题
窗口设置界面
打开方式
- 主菜单:
选项...→视频设置...→ 点击窗口设置按钮 - 游戏中:
Esc→选项...→视频设置...→ 点击窗口设置按钮 - 按下绑定的键位(默认未绑定)
- 聊天栏输入
/aws gui
界面内容
| 元素 | 说明 |
|---|---|
| 屏幕分辨率 | 当前显示器的分辨率(如 1920 × 1080),白色文字 |
| 窗口分辨率 | 当前游戏窗口尺寸(如 1280 × 720),浅绿色文字 |
| 锁定按钮 | 点击切换锁定开启/关闭;禁用时灰色不可点击并显示红色原因 |
| 完成按钮 | 返回视频设置界面 |
实时刷新机制
- 按钮状态实时同步,不需要重开界面
- 拖动窗口边缘时,分辨率数值保持不动并显示橙色提示:"窗口尺寸变化中,松开后 0.5 秒自动刷新…"
- 停止拖动满 0.5 秒后,橙色提示熄灭,同时分辨率刷新为当前窗口大小
安装方法
- 确保已安装 Minecraft 1.20.1 和 Forge 47.x
- 将模组 jar 文件放入
.minecraft/mods文件夹 - 启动游戏即可
本模组为客户端模组,不需要安装在服务端。
配置文件
文件路径
.minecraft/config/autowindowsize-client.toml
配置项
[window]
# ==== Window Size ====
# Startup window width. This is also the minimum width the window
# is allowed to shrink to when the size lock is enabled.
# 启动时的窗口宽度。开启尺寸锁定后,窗口也不能缩小到该值以下。
#Range: 856 ~ 7680
width = 1280
# ==== Window Height ====
# Startup window height. This is also the minimum height the window
# is allowed to shrink to when the size lock is enabled.
# 启动时的窗口高度。开启尺寸锁定后,窗口也不能缩小到该值以下。
#Range: 482 ~ 4320
height = 720
注释采用"上英文、下中文",一个
====标题;Range由 Forge 自动生成,不重复书写。
注意事项
- 配置值在游戏启动时读取,运行中修改配置文件不会立即生效,需要重启游戏
- 配置取值范围已与代码硬编码最小值绑定(宽 856、高 482),无法在配置文件中填写低于该下限的值,从根源上杜绝"配置填得比硬写死分辨率还小"的问题
- 配置值高于屏幕分辨率时,锁定功能自动禁用,窗口大小不被改动
键位绑定
默认状态
未绑定。模组不会占用任何按键,玩家需要自行在控制设置中绑定。
绑定方法
选项...→控制...- 搜索「自动窗口大小」
- 点击「打开窗口设置」
- 按下你想绑定的键
- 点击「完成」保存
使用方法
- 按下绑定的键打开窗口设置界面
- 主菜单和游戏中均可使用
多显示器支持
- 模组启动时自动检测游戏窗口当前所在的显示器(根据窗口中心点判断)
- 在对应显示器上居中窗口,而不是总是在主显示器居中
- 跨屏拖动窗口时(窗口中心在两个显示器之间),默认使用主显示器
技术信息
| 项目 | 值 |
|---|---|
| Minecraft 版本 | 1.20.1 |
| Forge 版本 | 47.x |
| Mod ID | autowindowsize |
| 模组类型 | 客户端模组(Client-side) |
| 硬编码最小分辨率 | 856×482(16:9) |
| 默认配置分辨率 | 1280×720 |
| 开源协议 | MIT |
| 编程语言 | Java |
常见问题
Q:为什么我改了配置文件的分辨率,启动后窗口没变? A:如果配置的分辨率高于你的屏幕分辨率,模组会自动禁用锁定且不改动窗口大小。请将配置值改为小于等于屏幕分辨率的值,然后重启游戏。
Q:锁定后窗口还能放大吗? A:可以。锁定只限制最小尺寸,不限制最大尺寸,你可以随意放大窗口。
Q:/aws 指令有什么用?
A:/aws toggle 切换锁定,/aws lock 开启锁定,/aws unlock 关闭锁定,/aws status 查看状态和屏幕分辨率,/aws gui 打开设置界面,/aws center 把窗口居中。
Q:支持多显示器吗? A:支持。模组会自动检测游戏窗口所在的显示器,并在对应显示器上居中。
Q:为什么拖动窗口时分辨率不立刻跟着变? A:拖动时数值保持不动、只亮橙色提示,避免数字一直跳看不清;停止拖动满 0.5 秒后,提示熄灭的同时刷新成当前窗口大小。
Q:锁定被禁用了怎么恢复? A:将配置文件中的分辨率改为小于等于屏幕分辨率的值,然后重启游戏。
Q:这个模组需要安装在服务端吗? A:不需要。这是纯客户端模组,只影响客户端的窗口大小。
Q:和其他模组冲突吗? A:本模组只修改游戏窗口的大小和最小尺寸限制,不修改游戏内任何机制,一般不会和其他模组冲突。
更新日志
完整更新日志(含历史版本,最新版默认展开)见单独文件: CHANGELOG_ZH-CN.md
致谢
- JujuMLQwQ — 开发者
- ML — 贡献者
感谢所有使用本模组的玩家和整合包制作者。 反馈与建议欢迎提交 Issues。



