Custom Main Menu 文档

1.简介

Custom Main Menu 是一个能够自定义主界面的模组,需要配合 Resource Loader 模组使用。
采用json语法写的配置文件,可以热加载出自定义的样式。使用方式颇有点像CSS样表。许多著名的国外整合包无一例外都采用了这个模组。效果非常好,这里拿几个作者设计的样式给大家看看吧。(作者美工水平不咋行啊)

pic001

pic002

pic003

pic004

2.文件结构

配置文件为游戏主文件夹下config\CustomMainMenu\mainmenu.json文件;
所有的图片文件地址都在游戏主文件夹下resources\mainmenu文件夹下。
目前这货好像还不支持UFT-8编码,所以还是别用中文了吧【还看着干什么,快去github轰炸作者吧,这作者是我见过最偷懒的作者】。
修改好了之后,在主界面按下ctrl+r键即可重载配置。

配置文件结构一般如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"images": {
"图片一": {
},
"图片二": {
}
},

"buttons": {
"按钮一": {
},
"按钮二": {
}
},

"labels": {
"文本一": {
},
"文本一": {
}
},

"other":{
"background":{
}
}
}

3.背景的添加

背景分为动态背景和静态背景。

(1)静态背景:

1
2
3
4
5
6
7
8
{
"other":{
"background":{
"image":"mainmenu:001.png",
"mode":"fill"
}
}
}

如案例所示,背景属于”other”分区,有两个参数可选:

  • image:【可选】标定着背景图片的地址,注意这个地址写法比较特殊。图片只支持png格式。

  • mode:【可选】图片的填充模式,有fill,stretch,center,tile四个选项可选。

    • fill:适应,保证图片长宽比前提下,尽可能铺满屏幕。会适当裁剪图片。
    • stretch:拉伸,尽可能铺满屏幕,如果不合适会强制拉伸图片。
    • center:居中,不改变图片大小和比例,依据屏幕大小裁剪图片。
    • tile:平铺,重复图片铺满屏幕。

(2)动态背景

1
2
3
4
5
6
7
8
9
10
11
12
{
"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. 文字的添加

网络加载文字:

1
2
3
4
5
6
7
8
9
10
11
{
"labels": {
"changelog":{
"text":"web:http://pastebin.com/raw.php?i=MmSCr6zV",
"posX" : 2,
"posY" : 0,
"color" : -1,
"alignment" : "left_center"
}
}
}

硬编码文字加载【不支持中文哦,会乱码的】

1
2
3
4
5
6
7
8
9
10
11
{
"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:可以传入startmiddleend三个参数,分别对应左、中、右对齐。
  • action:用户点击文字之后会发生的行为,和按钮添加部分的action用法一致,此处不再细说。
  • fontSize:字体的大小。

推荐两个使用的颜色代码网站:

5.图片的添加

图片只能用png格式。

1
2
3
4
5
6
7
8
9
10
11
12
{
"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.按钮的添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
"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:打开一个链接。

    1
    2
    3
    4
    "action":{
    "type":"openLink",
    "link":"https://www.feed-the-beast.com"
    }
  • openGui:打开特定的GUI

    1
    2
    3
    4
    "action":{
    "type":"openGui",
    "gui":"languages"
    }

    gui参数里可以传入的数据有(自己猜意思吧,懒得翻译了)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    mods
    singleplayer
    singleplayer.createworld
    multiplayer
    options
    languages
    options.ressourcepacks
    options.snooper
    options.sounds
    options.video
    options.controls
    options.multiplayer
  • connectToServer:连接的服务器,需要写入一个服务器ip。

    1
    2
    3
    4
    "action":{
    "type":"connectToServer",
    "ip":"127.0.0.1"
    }
  • openFolder:打开特定文件夹,需要注意的是默认的主目录是游戏主文件夹。

    1
    2
    3
    4
    "action":{
    "type":"openFolder",
    "folderName":"config"
    }
  • quit和refresh参数,没有特定其他属性需要添加。