本帖最后由 酒石酸菌 于 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的贴子里吗?
随便用,没有问题的
