MC Toolkit

指南 / 建筑与资源

使用资源包隐藏和调整 HUD 元素大小

快捷栏、准星和经验条都位于同一张纹理图集中。本文将介绍如何让其中部分内容变为不可见、哪些元素无法移动,以及用字体实现自定义 HUD 文本的技巧,替换用的图片必须和原图尺寸完全一致,尺寸不同就会被拉伸涂抹到变形。

隐藏快捷栏并没有什么配置选项。真正存在的是一张纹理——只要让其中一部分变透明,就能在视觉上将其移除,而一切功能照常运行。

所有内容都在同一个文件夹里

assets/minecraft/textures/gui/sprites/hud/

现代版本将旧的 widgets.png 图集拆分为一个个独立的精灵图(sprite): hotbar.png、crosshair.png、experience_bar_background.png、heart/full.png 等等。将其中任意一张替换为尺寸相同的全透明 PNG,即可将其隐藏。

对于任何你绘制的图像,尺寸相同都至关重要。 精灵图默认会拉伸以填满其槽位,因此如果画布更小、里面又有可见的图案,最终效果就会糊成一团。而全透明的精灵图无论什么尺寸都能隐藏——因为根本没有东西会被拉伸。

能做与不能做的事

能做:

  • 通过将精灵图变为透明来隐藏任意元素
  • 重新设计一切外观——不同的心形、极简准星、主题化快捷栏
  • 在相同尺寸的画布内绘制更小的内容,从而改变视觉大小

不能做:

  • 移动元素。位置是硬编码的,只有图像素材是数据。
  • 独立于边框隐藏快捷栏的槽位——它们属于同一张精灵图。
  • 改变槽位的功能。这纯粹是外观上的改动,物品依然可以被选中。

最后一点值得明确说明:隐藏的快捷栏仍然是快捷栏。这不是物品栏限制,玩家依然可以使用这些槽位。

九宫格陷阱

部分 GUI 精灵图是九宫格(nine-sliced)的——四角固定,边缘拉伸。在 HUD 中只有定位条背景是这种类型;而 gui/sprites/ 中其他地方的多数按钮和方框都是。PNG 旁边的 .mcmeta 文件会声明边框:

{ "gui": { "scaling": { "type": "nine_slice", "width": 200, "height": 20,
  "border": { "left": 2, "top": 2, "right": 2, "bottom": 2 } } } }

如果替换这类精灵图时没有配套的 mcmeta 文件,它就会错误地拉伸。拿不准时,把原版的 .mcmeta 和你的 PNG 放在一起。

通过字体实现自定义 HUD 文本

真正强大的技巧:定义一个字体提供器(font provider),让它的字形就是图像,然后用 /title 或 Boss 栏来显示这些字符。文本就会渲染成你的图像。

assets/minecraft/font/default.json

把它放进 minecraft 命名空间,你的提供器就会与原版默认字体合并。如果改用你自己的命名空间,那么每个使用它的文本组件都必须声明,通过 "font":"my_pack:default"。

{ "providers": [
  { "type": "bitmap", "file": "my_pack:font/icons.png", "ascent": 8, "height": 9,
    "chars": [""] }
] }

使用私用区码位( 及以上),这样就不会与真实文本冲突。然后 /title @a actionbar {"text":""} 就会在动作栏上绘制你的图像。

这就是服务器无需客户端安装模组、仅靠资源包就能显示自定义血条、货币图标和进度条的方法。

负空间字体

定义一个 advances 为负值的字形,就能让光标向后移动,从而将图像层层叠加。这就是那些看起来像正规界面的服务器 HUD 背后的技术。它很繁琐,但也是唯一能定位任何元素的方法。

在 HUD 定制器与字体包制作工具 中,隐藏或重新设计 HUD 元素,并用为你分配好的码位构建字体提供器。

HUD 自定义与字体包制作 →

更多指南

查看全部 →