本帖最后由 酒石酸菌 于 2018-2-10 16:11 编辑
1.简介




2.文件结构
复制代码
3.背景的添加
复制代码
(2)动态背景
复制代码
4. 文字的添加
网络加载文字:
复制代码
硬编码文字加载【不支持中文哦,会乱码的】
复制代码
除此之外还有几个属性可以选择添加:
推荐两个使用的颜色代码网站:
5.图片的添加
图片只能用png格式。
复制代码
除此之外还可以添加:
推荐一个好用的,制作minecraft样式文字图标的网站:textcraft。
6.按钮的添加
复制代码
除此之外还可以添加这几个参数
当然,还有我们最重要的action参数,action下必须要有type参数,可以传入openLink, openGui, quit, refresh, connectToServer, openFolder。
Custom Main Menu 简单介绍
1.简介
Custom Main Menu 是一个能够自定义主界面的模组,需要配合 Resource Loader 模组使用。采用json语法写的配置文件,可以热加载出自定义的样式。使用方式颇有点像CSS样表。许多著名的国外整合包无一例外都采用了这个模组。效果非常好,这里拿几个作者设计的样式给大家看看吧。(作者美工水平不咋行啊)




2.文件结构
配置文件为游戏主文件夹下 config\CustomMainMenu\mainmenu.json 文件;
所有的图片文件地址都在游戏主文件夹下 resources\mainmenu 文件夹下。
目前这货好像还不支持 UFT-8 编码,所以还是别用中文了吧【还看着干什么,快去github轰炸作者吧,这作者是我见过最偷懒的作者】。
修改好了之后,在主界面按下 ctrl+r 键即可重载配置。
配置文件结构一般如下
- {
- "images": {
- "图片一": {
- },
- "图片二": {
- }
- },
- "buttons": {
- "按钮一": {
- },
- "按钮二": {
- }
- },
- "labels": {
- "文本一": {
- },
- "文本一": {
- }
- },
- "other":{
- "background":{
- }
- }
- }
3.背景的添加
背景分为动态背景和静态背景。
(1)静态背景:- {
- "other":{
- "background":{
- "image":"mainmenu:001.png",
- "mode":"fill"
- }
- }
- }
如案例所示,背景属于"other"分区,有两个参数可选:
- image:【可选】标定着背景图片的地址,注意这个地址写法比较特殊。图片只支持png格式。
- mode:【可选】图片的填充模式,有fill, stretch, center, tile四个选项可选。
- fill:适应,保证图片长宽比前提下,尽可能铺满屏幕。会适当裁剪图片。
- stretch:拉伸,尽可能铺满屏幕,如果不合适会强制拉伸图片。
- center:居中,不改变图片大小和比例,依据屏幕大小裁剪图片。
- tile:平铺,重复图片铺满屏幕。
(2)动态背景
- {
- "other":{
- "background":{
- "image" : "",
- "slideshow":{
- "images" : ["mainmenu:001.png","mainmenu:002.png","mainmenu:003.png"],
- "displayDuration" : 100,
- "fadeDuration" : 40
- }
- }
- }
- }
- image:此时为空,但是不可略去不写。
- slideshow:添加循环的图片背景。
- images:添加循环的图片地址。
- displayDuration:图片停留时间,单位为tick。
- fadeDuration:转换图片时间,单位为tick。
4. 文字的添加
网络加载文字:
- {
- "labels": {
- "changelog":{
- "text":"web:http://pastebin.com/raw.php?i=MmSCr6zV",
- "posX" : 2,
- "posY" : 0,
- "color" : -1,
- "alignment" : "left_center"
- }
- }
- }
硬编码文字加载【不支持中文哦,会乱码的】
- {
- "labels": {
- "mojang": {
- "text" : "Copyright Mojang AB. Do not distribute!",
- "posX" : -197,
- "posY" : -10,
- "color" : -1,
- "alignment" : "bottom_right"
- }
- }
- }
- text:文字,可选网络加载文字,加载诸如更新日志一类的东西。文字中可以直接内镶Minecraft原版支持的颜色代码,还可以直接调用语言文件中的key加载文字。文字中还可以使用占位符太指代特定数据,占位符有如下几种:
- #mcversion#:MC的版本
- #fmlversion#:FML的版本
- #mcpversion#:MCP的版本
- #forgeversion#:Forge的版本
- #modsloaded#:mod加载数量
- #modsactive#:mod激活数量
- #time#:时间
- #username#:当前游戏ID
- #date#:当前日期(调取的系统时间)
- posX, posY:文字定位。如果不设定alignment参数,默认中心对齐。
- color:颜色代码,采用整型数表示的RGB码。
- alignment:对齐方式,有bottom_left, bottom_right, top_left, top_right, button, center, top_center, left_center, bottom_center, right_center。
除此之外还有几个属性可以选择添加:
- hoverColor:鼠标悬浮上去的颜色。
- hoverText:鼠标指针悬浮上去的文字。
- anchor:可以传入start,middle,end三个参数,分别对应左、中、右对齐。
- action:用户点击文字之后会发生的行为,和按钮添加部分的action用法一致,此处不再细说。
- fontSize:字体的大小。
推荐两个使用的颜色代码网站:
- Color Hex Color Codes:能够查询颜色的RGB码等诸多信息。
- Calculate RGB Int:可以将RGB码专为10进制。
5.图片的添加
图片只能用png格式。
- {
- "images":{
- "picture":{
- "image":"mainmenu:001.png",
- "posX":-120,
- "posY":-120,
- "width":240,
- "height":240,
- "alignment":"center"
- }
- }
- }
- image:图片地址。
- posX, posY:图片坐标,定位点为图片左上角。
- width, height:图片大小,过大的部分会直接裁减掉。
- alignment:对齐方式
除此之外还可以添加:
- hoverImage:鼠标指针悬浮上去的图片。
- slideshow:和之前讲过的slideshow用法一致,此处不再累述。
推荐一个好用的,制作minecraft样式文字图标的网站:textcraft。
6.按钮的添加
- {
- "buttons":{
- "singleplayer":{
- "text":"menu.singleplayer",
- "texture":"mainmenu:shortbutton.png",
- "posX":-100,
- "posY":-8,
- "width":98,
- "height":20,
- "imageWidth":98,
- "imageHeight":20,
- "alignment":"center",
- "action":{
- "type":"openGui",
- "gui":"singleplayer"
- }
- },
- "ftbForums":{
- "text":"FTB Forums",
- "texture":"mainmenu:shortbutton.png",
- "posX":2,
- "posY":58,
- "width":98,
- "height":20,
- "imageWidth":98,
- "imageHeight":20,
- "alignment":"center",
- "action":{
- "type":"openLink",
- "link":"https://forum.feed-the-beast.com/forum/"
- }
- }
- }
- }
- text:按钮上的文字,可以直接调用lang文件中的key,或者是直接写上文字(不支持中文,会乱码)。
- texture:按钮背景图片。
- posX, posY:按钮图片坐标,定位点为图片左上角。
- width, height:按钮图片大小,过大的部分会直接裁减掉。
- alignment:对齐方式。
除此之外还可以添加这几个参数
- hoverText:鼠标悬浮时候显示的文字。
- normalTextColor:文字颜色。
- hoverTextColor:鼠标悬浮时候显示的文字颜色。
- textOffsetX, textOffsetY:按钮文字的对齐数值。
- tooltip:显示文本提示。
当然,还有我们最重要的action参数,action下必须要有type参数,可以传入openLink, openGui, quit, refresh, connectToServer, openFolder。
- openLink:打开一个链接。
复制代码- "action":{
- "type":"openLink",
- "link":"https://www.feed-the-beast.com"
- }
- "action":{
- openGui:打开特定的GUI
复制代码- "action":{
- "type":"openGui",
- "gui":"languages"
- }
gui参数里可以传入的数据有(自己猜意思吧,懒得翻译了)
复制代码- mods
- singleplayer
- singleplayer.createworld
- multiplayer
- options
- languages
- options.ressourcepacks
- options.snooper
- options.sounds
- options.video
- options.controls
- options.multiplayer
- "action":{
- connectToServer:连接的服务器,需要写入一个服务器ip。
复制代码- "action":{
- "type":"connectToServer",
- "ip":"127.0.0.1"
- }
- "action":{
- openFolder:打开特定文件夹,需要注意的是默认的主目录是游戏主文件夹。
复制代码- "action":{
- "type":"openFolder",
- "folderName":"config"
- }
- "action":{
- quit和refresh参数,没有特定其他属性需要添加。
本帖最后由 酒石酸菌 于 2018-2-10 16:15 编辑
这是我去年夏天写的东西,前两天 4z 做了个 Markdown 转 BBCode 的工具,我就把它搬过来了。如果和别人有重复的,那我删掉吧 _(:з」∠)_
至于编码问题,其实这个属于作者的疏忽。在没有特定限定编码的情况下,会优先使用系统编码,导致了在 Windows 下直接 UTF-8 编码会乱码,如果在 Unix 系统下 UTF-8 书写就不会乱码。
这是我去年夏天写的东西,前两天 4z 做了个 Markdown 转 BBCode 的工具,我就把它搬过来了。如果和别人有重复的,那我删掉吧 _(:з」∠)_
至于编码问题,其实这个属于作者的疏忽。在没有特定限定编码的情况下,会优先使用系统编码,导致了在 Windows 下直接 UTF-8 编码会乱码,如果在 Unix 系统下 UTF-8 书写就不会乱码。
感谢楼主的教程
大佬的教程还是那么详细,不过希望更新一下最新版的,还希望有空能出一些这类mod的教程,比如FTBLib、FTBUtilities这类的
中文乱码只是需要转码,转为ANSI码就可以了
lliiooll 发表于 2018-5-5 15:22
中文乱码只是需要转码,转为ANSI码就可以了
然后 Linux 用户和 MacOS 用户发出了 MMP 的声音
gui背景可以支持高清图片吗,我放高像素的就显示到脚边了,挺难受的
弦弓音 发表于 2018-5-5 17:21
gui背景可以支持高清图片吗,我放高像素的就显示到脚边了,挺难受的
可以啊,显示边角是你没有设定显示方式吧
酒石酸菌 发表于 2018-5-7 12:57
可以啊,显示边角是你没有设定显示方式吧
怎么设置显示方式啊,按钮和标题我都需要设置高清的
弦弓音 发表于 2018-5-7 14:07
怎么设置显示方式啊,按钮和标题我都需要设置高清的
fill:适应,保证图片长宽比前提下,尽可能铺满屏幕。会适当裁剪图片。
stretch:拉伸,尽可能铺满屏幕,如果不合适会强制拉伸图片。
center:居中,不改变图片大小和比例,依据屏幕大小裁剪图片。
tile:平铺,重复图片铺满屏幕。
挺详细的 多学习学习

这样也不可以啊。。。
四个显示方式都尝试了,但就是在屏幕不同的位置显示边角
弦弓音 发表于 2018-5-7 22:06
四个显示方式都尝试了,但就是在屏幕不同的位置显示边角
emmmm,那就不清楚了
本帖最后由 弦弓音 于 2018-5-7 23:57 编辑
我现在改成了点击空白区域进入游戏,那个
hoverColor:鼠标指针悬浮上去的文字颜色
请问要填什么,RGB码和&都没有用,就是鼠标悬浮于gui然后text变黄我想改成亮白
我现在改成了点击空白区域进入游戏,那个
hoverColor:鼠标指针悬浮上去的文字颜色
请问要填什么,RGB码和&都没有用,就是鼠标悬浮于gui然后text变黄我想改成亮白
没什么问题了,谢谢
弦弓音 发表于 2018-5-7 23:25
我现在改成了点击空白区域进入游戏,那个
hoverColor:鼠标指针悬浮上去的文字颜色
请问要填什么,RGB码和& ...
十进制的RGB码
谢谢楼主的细心教程!解决了我许多天的困惑
大佬的教程真详细
大佬请问怎么让文字能够显示在线人数,还有调用语言文件中的key加载文字具体该怎么做呢?
kuaile412 发表于 2018-8-8 19:04
大佬请问怎么让文字能够显示在线人数,还有调用语言文件中的key加载文字具体该怎么做呢? ...
我也是想问这个的
其实CMM支持GBK编码的……不用UTF-8
本帖最后由 酒石酸菌 于 2019-1-19 00:26 编辑
是这样的,java 的 readStream 方法在默认情况是使用系统编码,这意味着在简体中文的 win 系统上使用的是 GB 编码,但是在 unix 系统,比如 MacOS 之类的上面则是 UTF-8 编码读取。
所以这一块为了兼容各个操作系统,应当甚至必须强制限定 UTF-8 编码,但是很遗憾,作者很明显没有意识到这一点,因为欧美作者常用的英文字符大多限制于 ACSII 编码的那些字符,无论是他们用 win 系统(大多为 ISO8859-1 编码)还是 unix 系统(用 UTF-8 编码),在 ASCII 字符内都是互相兼容的,所以他们没有意识到这个问题。
实际上无论是 Minecraft 官方还是 Forge 都无一例外对于所有文件读取限定了 utf-8 编码。
综上所述,并非是 CMM 支持 GB 编码,而是作者犯错误未能支持所致。
GC_YKE 发表于 2019-1-18 22:43
其实CMM支持GBK编码的……不用UTF-8
是这样的,java 的 readStream 方法在默认情况是使用系统编码,这意味着在简体中文的 win 系统上使用的是 GB 编码,但是在 unix 系统,比如 MacOS 之类的上面则是 UTF-8 编码读取。
所以这一块为了兼容各个操作系统,应当甚至必须强制限定 UTF-8 编码,但是很遗憾,作者很明显没有意识到这一点,因为欧美作者常用的英文字符大多限制于 ACSII 编码的那些字符,无论是他们用 win 系统(大多为 ISO8859-1 编码)还是 unix 系统(用 UTF-8 编码),在 ASCII 字符内都是互相兼容的,所以他们没有意识到这个问题。
实际上无论是 Minecraft 官方还是 Forge 都无一例外对于所有文件读取限定了 utf-8 编码。
综上所述,并非是 CMM 支持 GB 编码,而是作者犯错误未能支持所致。
这个怎么改啊,就是客户端左下角的哪团字
推推推推推推推推推推推推推推推推推
楼主你好,请问能搬运你的教程在我的搬运此mod的贴子里吗?
花生小孩子 发表于 2019-5-23 20:11
楼主你好,请问能搬运你的教程在我的搬运此mod的贴子里吗?
随便用,没有问题的
酒石酸菌 发表于 2019-5-28 23:14
随便用,没有问题的
好的谢谢
为什么我找不到存放图片的文件夹呢??大佬求指点
看到人家服务器里的自定义界面觉得特别的炫酷,奈何自己不会弄,但是有了这个教程,我觉得我也能做到!
真是太感谢楼主了!!!
真是太感谢楼主了!!!
卧槽,大佬虽然写的很详细,但我没看懂加按钮的,我太难了
怎么转为ansi编码啊
qwq.....
qwq.....
嘿嘿嘿,能不能搞成红警那样的界面 哈哈哈哈哈
支持一下!
好像和其他有 自带主界面的Mod 冲突
求问这个能不能修改游戏菜单,就是那个ESC出来的菜单
那个textcraft是哪个国家的啊.加速器都不知道挂哪里
为什么我加了无法使用材质包
感谢楼主大大很有帮助
如何设置一个按钮的背景在鼠标移动过去后变成另一个
感谢楼主
这个教程写的好,一些cmm详细地方都写到了
很详细,感谢分享
这未必也太详细了吧
非常详细 非常感谢
感谢分享感谢感谢
大佬 为什么图片材质错误了呀 改哪种模式都不行 还对图片大小有要求?我这张是1.38M的
可以啊!
请问动态背景显示为黑紫方块可能是什么原因
静态背景可以正常显示图片
静态背景可以正常显示图片
