xin_yi_hl
主页
自定义主菜单是一个MOD,允许你使用json文件编辑minecraft主菜单。
它允许你添加或删除元素,如按钮和标签,也增加了一些新的东西,你可以添加到你的菜单,如幻灯片或整个自定义gui。
它的配置文件应该是这样的:
  1. {
  2. "images": {
  3.         "图片一": {
  4.         },
  5.         "图片二": {
  6.         }
  7.     },
  8. "buttons": {
  9.         "按钮一": {      
  10.         },
  11.         "按钮二": {      
  12.         }
  13.     },
  14. "labels": {
  15.         "文本一": {      
  16.         },
  17.         "文本一": {      
  18.         }
  19.     },
  20. "other":{
  21.         "background":{         
  22.         }
  23.     }
  24. }
复制代码

对齐
什么是对齐方式?
一个元素的对齐方式指定了它在菜单屏幕上的相对位置。为了方便起见,定义了几个对齐方式的预设,不过如果需要的话,你也可以创建一个自定义的对齐方式。(完全不知道怎么自定义)

预设排列方式    (所有项目通用)这个对齐方式真的迷
"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
占位符不仅可以在 "文本 "字段中使用例如:
  1. {
  2.   ...
  3.   "text": "web:https://example.com/logPlayer.php?playerName=#username#",
  4.   "action": {
  5.     "type": "openLink",
  6.     "link": "https://example.com/viewProfile?username=#username#"
  7.   }
  8. }
复制代码



按钮
按钮在被按下时执行动作。它们可以打开gui(也可以是自定义的gui),例如连接到一个服务器,打开一个链接或加载一个特定的世界。
举个栗子:
  1. "singleplayer":{
  2.       "text":"menu.singleplayer",
  3.       "texture":"mainmenu:shortbutton.png",
  4.       "posX":-100,
  5.       "posY":-8,
  6.       "width":98,
  7.       "height":20,
  8.       "imageWidth":98,
  9.       "imageHeight":20,
  10.       "alignment":"center",
  11.       "action":{
  12.            "type":"openGui",
  13.            "gui":"singleplayer"
  14.            }
  15. },
复制代码
可选属性
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,连接到服务器,或加载一个世界。它的格式如下
  1. "action": {
  2.    "type": "类型",
  3.    "属性": "值"
  4. }
复制代码

属性
type:动作的类型,有效值是:openLink, openGui, quit, refresh, connectToServer, loadWorld, openFolder
其余的动作属性由动作的类型决定。(灰色的是类型)
openLink:
-link:要打开的链接
  1. "action":{
  2.       "type":"openLink",
  3.       "link":"https://www.feed-the-beast.com"
  4. }
复制代码
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)
  1. "action":{
  2.         "type":"openGui",
  3.         "gui":"languages"
  4. }
复制代码
connectToServer:
-ip:要连接的服务器的IP
  1. "action":{
  2.       "type":"connectToServer",
  3.       "ip":"127.0.0.1"
  4. }
复制代码
loadWorld:
-dirName: 保存的目录名称(在saves文件夹中)。
-saveName: 并非真正必要,在加载世界时可能会在某些对话框中出现保存的名称。
  1. "action":{
  2.       "type":"loadWorld",
  3.       "dirName":"新的世界"
  4. }
复制代码
openFolder:
-folderName:然后是应该被打开的文件夹的名字。(使用.minecraft文件夹作为根文件夹)
  1. "action":{
  2.       "type":"openFolder",
  3.       "folderName":"config"
  4. }
复制代码
quit和refresh不需要任何额外的属性。

其他mod按钮
自定义主菜单默认删除了所有由其他mods(Open Eye、Version Checker、Tabula)添加的按钮,因为无法像原版按钮那样控制它们。
使用包裹的按钮,你可以创建模仿其功能的按钮。为了让它们发挥作用,你需要找出你想重新添加的按钮的ID,
查看你最新的fml客户端日志并搜索 "wrapped button",所有被移除的mod按钮都被记录了它们各自的按钮ID。

注意:如果你要做一个200*100的按钮,那么你在ps里面就要创建一个200*200的画布,在配置文件的width调为200,height调为100,
因为它类似于会将你的按钮等分成上下两部分,上一半是没有鼠标悬浮的状态,下一半是鼠标悬浮的状态


文本
一般来说,所有在gui上可见的文本(标签、按钮、文本)都可以用3种不同的方式定义。
1.从一个资源中加载
  1. "splash-text": { "posX": 90, "posY": 70, "color": -256, "alignment": "top_center", "text": "file:minecraft:text/splashes.txt" }
复制代码
file: 后面是文本应该被加载的文件的资源位置。
2.从一个URL中加载(web: 后面是文本应该被加载的URL)
  1. "changelog": { "text": "web:http://pastebin.com/raw.php?i=MmSCr6zV", "posX": 2, "posY": 0, "color": -1, "alignment": "left_center" }
复制代码
3.静态文本
  1. "mojang": { "text": "Copyright Mojang AB. 请勿分发!", "posX": -197, "posY": -10, "color": -1, "alignment": "bottom_right" }
复制代码
4.如果你想为你所使用的文本类型指**外的属性(比如网络文本的刷新时间间隔文本的刷新间隔是以刻度为单位的,必须>=60(3秒)。
  1. "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格式。
属性
posX : 图像的X坐标
posY:图像的Y坐标
width:图像的宽度
height:图像的高度
image:实际图像的资源位置
hoverImage : 当用户悬停在图像上时,该图像的资源位置
alignment : (可选)参见对齐方式的信息
slideshow:(可选),见Slideshow
如果要使用网络图片像这样写
  1. "image":{
  2.      "image": "web:https://example.com/xxx.png",
  3.      "posX":40,
  4.      "posY":20,
  5.      "width":64,
  6.      "height":64,
  7.      "alignment":"top_left"
  8. }
复制代码



背景
背景分为动态背景和静态背景。
背景属于"other"分区
静态背景:
  1. {
  2. "other":{
  3.         "background":{
  4.             "image":"mainmenu:001.png",
  5.             "mode":"fill"
  6.         }
  7.     }
  8. }
复制代码
有两个参数可选:

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

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

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

动态背景:
  1. {
  2. "other":{
  3.     "background":{
  4.             "image" : "",
  5.             "slideshow":{
  6.                 "images" : ["mainmenu:001.png","mainmenu:002.png","mainmenu:003.png"],
  7.                 "displayDuration" : 100,
  8.                 "fadeDuration" : 40
  9.             }
  10.         }
  11.     }
  12. }
复制代码
image:此时为空,但是不可略去不写。
slideshow:添加循环的图片背景。

-images:添加循环的图片地址。
-displayDuration:图片停留时间,单位为tick。
-fadeDuration:转换图片时间,单位为tick。




重要提示
要使用本地图片,你需要使用Resource Loader mod!
ps:其实使用压缩包打开modassets\custommainmenu\textures\gui\放这里,可以,然后像这样"image" : "custommainmenu:textures/gui/xxx.png"
ps:如果你要修改字为中文或者使用§,你必须要将编码转为ANSI,否则会乱码
ps:使用Ctrl+R快捷键刷新配置
ps:还有一个特别迷的posX和posY的移动量只能自己试?这里可以提醒正的值是向右下偏移

注:mcmod也为本人发布