本篇教程由作者设定未经允许禁止转载。
主页
自定义主菜单是一个MOD,允许你使用json文件编辑minecraft主菜单。
它允许你添加或删除元素,如按钮和标签,也增加了一些新的东西,你可以添加到你的菜单,如整个自定义gui。
它的配置文件应该是这样的:(这是默认配置文件)
{
"images":
{
"title":
{
"image" : "custommainmenu:textures/gui/minecraft.png",
"posX" : -137,
"posY" : 30,
"width" : 512,
"height" : 512,
"alignment" : "top_center"
}
},
"buttons":
{
"singleplayer":
{
"text" : "menu.singleplayer",
"posX" : -100,
"posY" : 48,
"width" : 200,
"height" : 20,
"action" :
{
"type" : "openGui",
"gui" : "singleplayer"
}
},
"multiplayer":
{
"text" : "menu.multiplayer",
"posX" : -100,
"posY" : 72,
"width" : 200,
"height" : 20,
"action" :
{
"type" : "openGui",
"gui" : "multiplayer"
}
},
"mods":
{
"text" : "Mods",
"posX" : -100,
"posY" : 96,
"width" : 200,
"height" : 20,
"action" :
{
"type" : "openGui",
"gui" : "mods"
}
},
"options":
{
"text" : "menu.options",
"posX" : -100,
"posY" : 132,
"width" : 98,
"height" : 20,
"action" :
{
"type" : "openGui",
"gui" : "options"
}
},
"quit":
{
"text" : "menu.quit",
"posX" : 2,
"posY" : 132,
"width" : 98,
"height" : 20,
"action" :
{
"type" : "quit"
}
},
"language":
{
"text" : "",
"posX" : -124,
"posY" : 132,
"width" : 20,
"height" : 20,
"action" :
{
"type" : "openGui",
"gui" : "languages"
}
},
"refresh":
{
"text" : "",
"posX" : -154,
"posY" : 132,
"width" : 20,
"height" : 20,
"texture" : "custommainmenu:textures/gui/buttons.png",
"action" :
{
"type" : "refresh"
}
}
},
"texts":
{
"mojang":
{
"text" : "Copyright Mojang AB. Do not distribute!",
"posX" : -197,
"posY" : -10,
"color" : -1,
"alignment" : "bottom_right"
},
"fml":
{
"text" : "",
"posX" : 2,
"posY" : -50,
"color" : -1,
"alignment" : "bottom_left"
}
},
"other":
{
"splash-text":
{
"posX" : 90,
"posY" : 70,
"color" : -256,
"alignment" : "top_center",
"texts" : "file:minecraft:texts/splashes.txt"
},
"panorama":
{
"images" : "minecraft:textures/gui/title/background/panorama_%c.png",
"animate" : true,
"animationSpeed" : 1,
"blur" : true,
"gradient" : true
}
}
}
按钮
按钮在被按下时执行动作。它们可以打开gui(也可以是自定义的gui),例如连接到一个服务器,打开一个链接或加载一个特定的世界。
注意:如果你要做一个200*100的按钮,那么你在ps里面就要创建一个200*200的画布,在配置文件的width调为200,height调为100,
因为它类似于会将你的按钮等分成上下两部分,上一半是没有鼠标悬浮的状态,下一半是鼠标悬浮的状态
举个栗子:
"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"
}
},
可选属性
posX:按钮的X坐标
posY:按钮的Y坐标
width:按钮的宽度
height:按钮的高度。
imageWidth:按钮在图像中的宽度(默认为高度)。
imageHeight:按钮在图像中的高度(默认为宽度)。
texture : (可选)一个资源位置,它将被用作这个按钮的自定义纹理。该图像必须包含一个正常的和一个悬停版本的按钮。这是一个200x20按钮的例子。
text : 按钮上显示的文本(一个语言键(即lang中的条目)或只是普通文本)
hoverText : 当用户悬停在按钮上时显示的文本(一个语言键或只是普通文本)。
normalTextColor : (可选)一个rgb颜色的整数,用于显示按钮的正常文本颜色。
hoverTextColor : (可选)一个rgb颜色的整数,用于显示鼠标在按钮上方时的文本颜色。
pressSound : (可选)一个资源位置,指向该按钮在被按下时发出的声音
hoverSound : (可选) 指向该按钮在悬停时发出的声音的资源位置
tooltip : (可选)当用户悬停在此按钮上时,将显示的工具提示文本。
action : (可选) 当按钮被点击时将做什么,更多信息见Actions。
wrappedButton :(可选) 按钮ID,更多信息请参考Wrapped Buttons。
alignment : (可选) 参见对齐方式的信息
textOffsetX/Y(可选)。按钮的文字将被偏移这个数量。
按钮动作
当用户点击一个按钮或一个文本时,就会执行动作。有各种不同的,可以简单地打开GUI,连接到服务器,或加载一个世界。它的格式如下
"action": {
"type": "类型",
"属性": "值"
}
type:动作的类型,有效值是:openLink, openGui, quit, refresh, connectToServer, loadWorld, openFolder
如下:
openLink:
-link:要打开的链接
"action":{
"type":"openLink",
"link":"https://www.feed-the-beast.com"
}
openGui:
-gui:应该打开的GUI(界面)这可以是一个自定义的GUI例如(custom.CUSTOM_GUI_NAME),
也可以是一个原版的gui如(每个是什么自己试吧)
(mainmenu, mods, singleplayer, singleplayer.createworld, multiplayer, credits, languages, realms, options, options.ressourcepacks, options.skinsettings, options.snooper, options.sounds, options.video, options.controls, options.manyplayer)
"action":{
"type":"openGui",
"gui":"languages"
}
connectToServer:
-ip:要连接的服务器的IP
"action":{
"type":"connectToServer",
"ip":"127.0.0.1"
}
loadWorld:
-dirName: 保存的目录名称(在saves文件夹中)。
-saveName: 并非真正必要,在加载世界时可能会在某些对话框中出现保存的名称。
"action":{
"type":"loadWorld",
"dirName":"新的世界"
}
openFolder:
-folderName:然后是应该被打开的文件夹的名字。(使用.minecraft文件夹作为根文件夹)
"action":{
"type":"openFolder",
"folderName":"config"
}
quit和refresh不需要任何额外的属性。(你只需要这样)
"action":{
"type":"quit",
}
其他mod按钮
自定义主菜单默认删除了所有由其他mods(Open Eye、Version Checker、Tabula)添加的按钮,因为无法像原版按钮那样控制它们。
使用包裹的按钮,你可以创建模仿其功能的按钮。为了让它们发挥作用,你需要找出你想重新添加的按钮的ID,
查看你最新的fml客户端日志并搜索 "wrapped button",所有被移除的mod按钮都被记录了它们各自的按钮ID。
文本
一般来说,所有在gui上可见的文本(标签、按钮、文本)都可以用3种不同的方式定义。
1.从一个资源中加载
"splash-text": { "posX": 90, "posY": 70, "color": -256, "alignment": "top_center", "text": "file:minecraft:text/splashes.txt" }
file: 后面是文本应该被加载的文件的资源位置。
2.从一个URL中加载(web: 后面是文本应该被加载的URL)
"changelog": { "text": "web:http://pastebin.com/raw.php?i=MmSCr6zV", "posX": 2, "posY": 0, "color": -1, "alignment": "left_center" }
3.静态文本
"mojang": { "text": "Copyright Mojang AB. 请勿分发!", "posX": -197, "posY": -10, "color": -1, "alignment": "bottom_right" }
4.如果你想为你所使用的文本类型指定额外的属性(比如网络文本的刷新时间间隔文本的刷新间隔是以刻度为单位的,必须>=60(3秒)。
"label": { "text": { "type": "web", "url": "URL", "refreshInterval": 60 }, "posX": 0, "posY": 80, ... }
属性:
posX:标签的X坐标
posY:标签的Y坐标
color:文本颜色的rgb整数(颜色代码覆盖这个)。
hoverColor:(可选)一个rgb整数,当用户将鼠标悬停在文本上时,该文本的颜色(颜色代码覆盖此)。
text: 应该显示的文本(可以包含颜色代码)。
hoverText:用户在其上悬停时的文本(可以包含颜色代码
anchor:(可选)可以是 "开始"(默认)、"中间 "或 "结束"。使得文本向左、向中或向右对齐。
action: (可选)当用户点击标签时,将执行什么动作?
alignment(对齐):(可选)参见对齐方式的信息
fontSize(字体大小):(可选)文本的大小,1是默认的,2是2倍的大小。
pressSound: (可选)一个资源位置,指向该文本在按下时发出的声音
hoverSound: (可选)指向该文本在悬停时发出的声音的资源位置
图片
它们可以是来自本地文件夹或来自网络。
图片只能用png格式。
举个栗子:
"images":{
"title":
{
"image" : "custommainmenu:textures/gui/minecraft.png",
"posX" : -137,
"posY" : 30,
"width" : 512,
"height" : 512,
"alignment" : "top_center"
}
},
属性
posX : 图像的X坐标
posY:图像的Y坐标
width:图像的宽度
height:图像的高度
image:实际图像的资源位置
hoverImage : 当用户悬停在图像上时,该图像的资源位置
alignment : (可选)参见对齐方式的信息
slideshow:(可选),见Slideshow
如果要使用网络图片像这样写
"image":{
"image": "web:https://example.com/xxx.png",
"posX":40,
"posY":20,
"width":64,
"height":64,
"alignment":"top_left"
}
要使用本地图片,你需要使用Resource Loader mod!
ps:其实使用压缩包打开modassets\custommainmenu\textures\gui\放这里,可以,然后像这样"image" : "custommainmenu:textures/gui/xxx.png"
背景
背景分为动态背景和静态背景。
背景属于"other"分区
静态背景:
{
"other":{
"background":{
"image":"mainmenu:001.png",
"mode":"fill"
}
}
}
有两个参数可选:
image:【可选】标定着背景图片的地址,注意这个地址写法比较特殊。图片只支持png格式。
mode:【可选】图片的填充模式,有fill, stretch, center, tile四个选项可选。
-fill:适应,保证图片长宽比前提下,尽可能铺满屏幕。会适当裁剪图片。
-stretch:拉伸,尽可能铺满屏幕,如果不合适会强制拉伸图片。
-center:居中,不改变图片大小和比例,依据屏幕大小裁剪图片。
-tile:平铺,重复图片铺满屏幕。
动态背景:
{
"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。
对齐
什么是对齐方式?
一个元素的对齐方式指定了它在菜单屏幕上的相对位置。为了方便起见,定义了几个对齐方式的预设,不过如果需要的话,你也可以创建一个自定义的对齐方式。(完全不知道怎么自定义)
预设排列方式 (所有项目通用)这个对齐方式真的迷
"top_left" "top_center" "top_right"
"left_center" "center" "right_center"
"bottom_left" "bottom_center" "bottom_right"
"左上"、"中上"、"右上"、
"左中"、"中心"、"右中"、
"左下"、"中下"、"右下"
像这样使用: "alignment" : "对齐方式"
变量
占位符 | 变量名 | 可能的输出 |
---|---|---|
#date# | 当地日期 | Dec 22, 2019 |
#time# | 当地时间 (HH:mm) | 14:09 |
#mcversion# | 我的世界版本 | 1.12.2 |
#fmlversion# | FML版本 | 8.0.99.99 |
#mcpversion# | 我的世界 Coder Pack 版本 | 9.42 |
#modsloaded# | 加载的mod数量 | 231 |
#modsactive# | 活跃的mod数量 | 224 |
#forgeversion# | Forge版本 | 14.23.5.2847 |
#username# | 玩家名称 | dimaxiton5 |
变量不仅可以在 "文本 "字段中使用还可以在任何地方使用
例如:
{
...
"text": "web:https://example.com/logPlayer.php?playerName=#username#",
"action": {
"type": "openLink",
"link": "https://example.com/viewProfile?username=#username#"
}
}
重要提示
ps:如果你要修改字为中文或者使用§,你必须要将编码转为ANSI,否则会乱码
ps:使用Ctrl+R快捷键刷新配置
ps:posX和posY的正值是向右下偏移
ps:推荐搭配该mod使用Main Menu Scale
最后如果有错或未提到的欢迎在短评提出