欢迎来到 HiMCBBS 论坛~

想在这里休息会么?和我们共度美好时光吧~

加入QQ群:879016948 获得最新公告,并与群友们一起聊天吹水!

注册 登录
  • 嗨,游客,欢迎来到CRAFTBBS论坛!QQ 交流群: 879016948

自动窗口大小/Auto Window Size

原创 开源 Forge 自动窗口大小/Auto Window Size 1.0.6

Minecraft Forge 1.20.1模组——自动窗口大小、居中及最小大小锁定,以保证模组包界面一致性
模组加载器
  1. Forge
版权类型
原创
Mod ID
autowindowsize
版权链接
https://github.com/3270728922/AutoWindowSize
资源语言
  1. 简体中文
  2. 英语
支持版本(Java)
  1. 1.20.1
开源许可证
MIT License

Auto Window Size

Minecraft Forge 1.20.1 客户端模组 | 自动窗口大小、居中与最小尺寸锁定

⚠ 平台提示:本模组仅支持桌面版 Minecraft(Windows / macOS / Linux),无法在手机版(基岩版 / 手机端)上运行。

📮 关于源码的说明:由于作者是 GitHub / Git 新手,早期在仓库更新过程中出现过操作失误,曾导致仓库文件一度混乱。如果你下载的源码与实际发布的 jar 对不上,请联系作者邮箱 3270728922@qq.com 获取真正的源码。

English Version


下载


目录


制作目的

在制作整合包时,我经常遇到这样的问题:好不容易把各个模组的 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、其他游戏版本)。
  • 后续计划参考 True Window 与 Window Control 两款窗口类模组的方向,逐步补齐窗口管理能力,初步设想包括:
    • 参考 True Window:真正的无边框(窗口化)全屏,消除缝隙与任务栏遮挡、改善录屏 / 屏幕共享时的识别与卡顿;自定义游戏窗口标题与图标。
    • 参考 Window Control:在窗口化 / 无边框 / 独占全屏三种模式间即时切换、无需重启即可切换分辨率、选择窗口所在显示器、记住并恢复窗口上次的位置、常用分辨率预设等。
    • 以上仅为规划方向,具体功能与实现以正式发布的更新日志为准,暂不承诺时间线。
  • 在此之前,暂不承诺其他版本的发布时间线;相关进展会通过 GitHub 与各发布页同步。

功能特性

  • 启动自动设置窗口大小:启动游戏后延迟1.5秒自动将窗口设置为配置的分辨率并居中,避免加载界面拉伸
  • 最小尺寸锁定:开启后窗口只能放大,不能缩小到配置尺寸以下,保证 UI 布局不被破坏
  • 固定窗口大小:开启后把窗口当前大小完全锁死——不会跳变到配置分辨率、也不会强制居中,只是不能再改大小。标题栏最大化按钮会在系统层被禁用(GLFW_RESIZABLE=false,Windows 上移除 WS_MAXIMIZEBOX),从根上杜绝"假最大化";窗口最大化或全屏时固定窗口大小开关本身也会禁用(请先取消最大化)。全屏仍然可用,退出全屏后回到固定尺寸
  • 视频设置原生入口:在「选项 → 视频设置」中原生插入「窗口设置」按钮,位于「全屏分辨率」下方,随列表滚动和 GUI 缩放正常布局
  • 窗口设置界面:独立的设置界面,可手动开关最小尺寸锁定 / 固定窗口大小、一键把窗口在所在显示器上居中,实时显示屏幕分辨率和窗口分辨率(全屏时黄色并标注"全屏"),按钮状态实时同步
  • 居中窗口按钮:窗口化时一键把窗口在当前显示器上居中;全屏、最大化、最小化时自动禁用,避免无效操作
  • 客户端指令/aws toggle/aws lock/aws unlock/aws status/aws gui/aws center/aws fixed,游戏内聊天栏直接操作
  • 全屏自动禁用:进入全屏时临时禁用最小尺寸锁定与固定窗口大小,退出全屏后按全屏前状态自动恢复
  • 自定义按键:在控制设置中绑定按键打开窗口设置界面(默认未绑定)
  • 分辨率过低自动禁用:当配置分辨率或硬编码最小分辨率高于玩家屏幕分辨率时,仅自动禁用最小尺寸锁定且不改动窗口大小;固定窗口大小与居中不受影响(它们不依赖配置值)
  • 进游戏状态提示:每次进入世界时,聊天栏提示当前最小尺寸锁定状态
  • 实时分辨率显示:窗口设置界面实时显示屏幕分辨率和窗口分辨率,拖动停止后 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) > 当前屏幕高度

触发后的行为

  1. 不改动窗口大小:保持玩家启动前的窗口大小
  2. 不设置最小尺寸限制:不调用 GLFW 的窗口尺寸限制
  3. 标记为禁用lockDisabled = true
  4. 进入世界时聊天栏提示:红色文字说明禁用原因
  5. 窗口设置界面按钮灰色:显示"锁定已禁用(分辨率过低)",不可点击
  6. 指令和按键被拦截:使用时显示红色提示

恢复方法

将配置文件中的分辨率改为小于等于屏幕分辨率的值,然后重启游戏

注意:检测在游戏启动时执行一次,运行中改变屏幕分辨率不会重新检测。


全屏行为

进入全屏(F11)时:

  • 无论当前状态如何,最小尺寸锁定与固定窗口大小都被临时禁用
  • 记录进入全屏前的开关状态
  • 聊天栏显示红色提示:"全屏模式下最小尺寸锁定不可用,退出全屏后自动恢复"
  • 窗口设置界面的对应按钮变为灰色

退出全屏(F11)时:

  • 窗口大小和位置由 Minecraft 自动恢复到全屏前的状态(模组不强制设置任何尺寸)
  • 如果全屏前最小尺寸锁定是开启的,自动重新应用最小尺寸限制
  • 如果全屏前固定窗口大小是开启的,自动重新固定
  • 如果全屏前是关闭的,不设置尺寸限制
  • 如果最小尺寸锁定因分辨率过低被永久禁用,不改动窗口大小

指令

所有指令以 /aws 开头(客户端指令,仅游戏内可用):

指令 说明
/aws toggle 切换最小尺寸锁定开启/关闭
/aws lock 开启最小尺寸锁定(已开启则提示无需重复操作)
/aws unlock 关闭最小尺寸锁定(已关闭则提示无需重复操作)
/aws status 显示当前最小尺寸锁定状态和屏幕分辨率
/aws gui 打开窗口设置界面
/aws center 把窗口在当前显示器居中(全屏/最大化/最小化/已居中时提示不可用)
/aws fixed 切换固定窗口大小:开启后窗口锁定为当前大小,无法再更改(不能放大/缩小,最大化按钮禁用)

最小尺寸锁定被禁用时(分辨率过低或全屏),相关指令会显示红色提示说明原因。固定窗口大小只受全屏和最大化禁用,不受分辨率过低影响。


进游戏状态提示

每次从主菜单或加载界面进入世界时,聊天栏会提示一次当前最小尺寸锁定状态:

状态 提示文字 颜色
锁定开启 [AutoWindowSize] ✔ 最小尺寸锁定已开启(窗口只能放大、不能缩小) 绿色
锁定关闭 [AutoWindowSize] ✔ 最小尺寸锁定已关闭,可自由调整大小 灰色
分辨率过低 [AutoWindowSize] ✘ 最小尺寸锁定已自动禁用 — 配置分辨率超过屏幕分辨率 红色
全屏模式 [AutoWindowSize] ✘ 全屏模式下最小尺寸锁定不可用,退出全屏后自动恢复 红色
  • 每次进入世界只提示一次
  • 提示输出在聊天栏,不是标题/副标题

窗口设置界面

打开方式

  1. 主菜单:选项...视频设置... → 点击 窗口设置 按钮
  2. 游戏中:Esc选项...视频设置... → 点击 窗口设置 按钮
  3. 按下绑定的键位(默认未绑定)
  4. 聊天栏输入 /aws gui

界面内容

元素 说明
屏幕分辨率 当前显示器的分辨率(如 1920 × 1080),白色文字
窗口分辨率 当前游戏窗口尺寸(如 1280 × 720),浅绿色文字
最小尺寸锁定按钮 点击切换开启/关闭;禁用时灰色不可点击并显示原因
固定窗口大小按钮 点击把当前窗口大小完全锁死;最大化/全屏时灰色不可点击
居中窗口按钮 一键把窗口在当前显示器居中
完成按钮 返回视频设置界面

实时刷新机制

  • 按钮状态实时同步,不需要重开界面
  • 拖动窗口边缘时,分辨率数值保持不动并显示橙色提示:"窗口尺寸变化中,松开后 0.5 秒自动刷新…"
  • 停止拖动满 0.5 秒后,橙色提示熄灭,同时分辨率刷新为当前窗口大小

安装方法

  1. 确保已安装 Minecraft 1.20.1 和 Forge 47.x
  2. 将模组 jar 文件放入 .minecraft/mods 文件夹
  3. 启动游戏即可

本模组为客户端模组,不需要安装在服务端。


配置文件

文件路径

.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 minimum 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 minimum size lock is enabled.
# 启动时的窗口高度。开启最小尺寸锁定后,窗口也不能缩小到该值以下。
#Range: 482 ~ 4320
height = 720

注释采用"上英文、下中文",一个 ==== 标题;Range 由 Forge 自动生成,不重复书写。

注意事项

  • 配置值在游戏启动时读取,运行中修改配置文件不会立即生效,需要重启游戏
  • 配置取值范围已与代码硬编码最小值绑定(宽 856、高 482),无法在配置文件中填写低于该下限的值,从根源上杜绝"配置填得比硬写死分辨率还小"的问题
  • 配置值高于屏幕分辨率时,锁定功能自动禁用,窗口大小不被改动

键位绑定

默认状态

未绑定。模组不会占用任何按键,玩家需要自行在控制设置中绑定。

绑定方法

  1. 选项...控制...
  2. 搜索「自动窗口大小」
  3. 点击「打开窗口设置」
  4. 按下你想绑定的键
  5. 点击「完成」保存

使用方法

  • 按下绑定的键打开窗口设置界面
  • 主菜单和游戏中均可使用

多显示器支持

  • 模组启动时自动检测游戏窗口当前所在的显示器(根据窗口中心点判断)
  • 在对应显示器上居中窗口,而不是总是在主显示器居中
  • 跨屏拖动窗口时(窗口中心在两个显示器之间),默认使用主显示器

技术信息

项目
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:固定窗口大小和最小尺寸锁定有什么区别?
A:最小尺寸锁定是下限保护(能放大、不能缩小到配置值以下);固定窗口大小是把窗口锁定为当前大小(最小=最大=当前值,不能放大也不能缩小,最大化按钮禁用)。两者都开启时固定优先。

Q:/aws 指令有什么用?
A:/aws toggle 切换最小尺寸锁定,/aws lock 开启锁定,/aws unlock 关闭锁定,/aws status 查看状态和屏幕分辨率,/aws gui 打开设置界面,/aws center 把窗口居中,/aws fixed 切换固定窗口大小。

Q:支持多显示器吗?
A:支持。模组会自动检测游戏窗口所在的显示器,并在对应显示器上居中。

Q:为什么拖动窗口时分辨率不立刻跟着变?
A:拖动时数值保持不动、只亮橙色提示,避免数字一直跳看不清;停止拖动满 0.5 秒后,提示熄灭的同时刷新成当前窗口大小。

Q:锁定被禁用了怎么恢复?
A:将配置文件中的分辨率改为小于等于屏幕分辨率的值,然后重启游戏。

Q:这个模组需要安装在服务端吗?
A:不需要。这是纯客户端模组,只影响客户端的窗口大小。

Q:和其他模组冲突吗?
A:本模组只修改游戏窗口的大小和最小尺寸限制,不修改游戏内任何机制,一般不会和其他模组冲突。


更新日志

完整更新日志(含历史版本,最新版默认展开)见单独文件:
CHANGELOG(中文) · Changelog (English)


致谢

  • JujuMLQwQ — 开发者
  • ML — 贡献者

灵感来源

  • 固定窗口大小功能的灵感来自 Locked Window Size(采用 LGPL-3.0 协议)。本模组为独立实现,并未复制其任何源代码,仅使用 GLFW 官方公开 API(GLFW_RESIZABLE)实现"窗口不可调整大小",因此本模组仍以 MIT 协议开源。原模组作者保留其作品的全部权利,在此致谢。
  • 未来的无边框全屏、窗口模式切换等方向,参考了 True WindowWindow Control 的设计思路(同样为独立实现,不包含其代码)。

感谢所有使用本模组的玩家和整合包制作者。
反馈与建议欢迎提交 Issues

作者
JujuMLQwQ
价格
金粒100粒
下载
0
查看
37
首次发布
最后更新

评论

0.00 星 0 星

分享资源

相似资源 最多浏览 查看更多
后退
顶部