本帖最后由 猜猜谁是谁 于 2018-11-14 20:51 编辑



概述
本教程大部分翻译自CMM原简介页面CMM原教程页面,也有一小部分内容为原创
在本教程前,站内对CMM的教程,例如 一等品内裤的教程823520243的教程
但依旧没有达到一个规范化的地步
因此本教程想要通过原帖的教程及个人的一些经验来把该教程规范化
注:切换章节之间点击上方的目录文字即可,章节内可能部分图片加载较慢,请耐心等候



自定义主界面
这个Mod能让你用JSON文本修改游戏主界面,你几乎可以修改原版界面中所有的内容和它的位置。除此之外,你还可以添加一些新元素到你的界面,例如幻灯片及全新的子界面。但是如果你只是想要做一些简简单单的事例如增改文本的话,你无需自己写一个界面出来,这个Mod会生成一个与原版界面一样的JSON文件,你就可以直接在这个JSON文件上进行改动了
以下是一些只通过该Mod实现的一些界面
注:以下的章节建议与“使用示例”搭配食用更加



行为
行为将会在玩家点击一个按钮或文本时被执行,以下是各种各样的行为,可以用来打开Gui、连接到服务器或加载一个世界



  • 行为类型: openLink , openGui , quit , refresh , connectToServer , loadWorld , openFolder

(打开链接,打开Gui,退出游戏,刷新[本mod新增功能],连接至服务器,加载世界,打开文件夹)



几乎每个行为类型都要附加一个值来明确它要做的事以及怎么做(以下说明了各个类型需要的附加值)



openLink(打开链接):
┕ link:指定要打开的链接



openGui(打开Gui):
┕ gui:指定要打开的gui,可以在下面的折叠部分查看原版支持的Gui,也可以自定义一个Gui(详见“自定义Gui”章节)



connectToServer(连接至服务器):
┕ ip:要连接的服务器ip



loadWorld(加载世界):
┕ dirName:在save文件夹里地图文件夹的名称(与saveName的差异详见下图)
┕ saveName:在游戏中地图的名称(与dirName的差异详见下图)



openFolder(加载文件夹):
┕ folderName:要打开的文件夹名称(以.minecraft文件夹作为根目录)

quit(退出游戏)和refresh(刷新)不需要任何附加值
注:JSON对大小写和连接时的“,”相当敏感,如遇到加载失败的情况可检查有无这类遗漏,后文中不再提醒



对齐
对齐的属性有这些:
  • top_left(左上方)
  • top_center(上方中心)
  • top_right(右上方)
  • left_center(左方中心)
  • center(中心)
  • right_center(右方中心)
  • button(下方)
  • bottom_left(左下方)
  • bottom_center(下方中心)
  • bottom_right(右下方)
你也可以像下面的文本一样自己定义一个对齐属性

节选
全文



自定义Gui
使用本Mod也可以制作全新的界面,只需要在config文件夹中创建更多JSON文件,这些文件的文件名就是Gui的名字,如果你想要打开它通过将一个按钮的“行为”设置成openGui,附加值(gui)就是custom.GUINAME(其中GUINAME表示Gui的名称)



元素
元素的使用量没有限制(具体元素请看子章节)



按钮
按钮在被按下时会触发“行为”,这些行为可以用于打开Gui、连接至服务器、打开链接以及加载世界(详见“行为”章节)

以下是按钮的属性:
  • PosX:按钮的X坐标
  • PosY:按钮的Y坐标
  • width:按钮的宽度
  • height:按钮的高度
  • imageWidth:(可选)在图片中按钮的宽度(默认:高度)
  • imageHeight:(可选)在图片中按钮的高度(默认:宽度)
  • texture:(可选)这个按钮材质的路径,这个材质要包含正常和鼠标悬停的按钮样式,下方的折叠中是一个200*20的按钮

  • text:按钮上显示的文本(详见“文本类型”章节)(文本可以是一个语言关键字或是一段普通的文字)
  • hoverText:当鼠标悬浮在按钮上时显示的文本(详见“文本类型”章节)(文本可以是一个语言关键字或是一段普通的文字)
  • normalTextColor:(可选)一个代表RGB颜色的整数,代表按钮上字体的颜色
  • hoverTextColor:(可选)一个代表RGB颜色的整数,代表当鼠标悬浮在按钮上时字体的颜色
  • pressSound:(可选)一个路径,表示当按钮被按下时发出的声音
  • hoverSound:(可选)一个路径,表示当鼠标悬停在按钮上时发出的声音
  • tooltip:(可选)当鼠标悬停在按钮上时,出现的文本(详见“文本类型”章节)
  • action:(可选)当按钮被点击时它要做的事(详见“行为”章节)
  • alignment:(可选)详见“对齐”章节
  • textOffsetX:(可选)按钮上文本位置的X偏移量
  • textOffsetY:(可选)按钮上文本位置的Y偏移量



图像
图像可以是本地预置的图像,也可以是从网络上获取的

以下是图像的属性:
  • PosX:图像的X坐标
  • PosY:图像的Y坐标
  • width:图像的宽度
  • height:图像的高度
  • image:图像的路径
  • hoverImage:鼠标悬停在图像上时的路径
  • alignment:(可选)详见“对齐”章节
  • slideshow:(可选)详见“幻灯片”章节



标签
标签可以用来显示多样的文字

以下是标签的属性:
  • PosX:标签的X坐标
  • PosY:标签的Y坐标
  • color:一个代表RGB颜色的整数,代表标签文本的颜色(颜色代码“§”的优先级高于它)
  • hoverColor:(可选)一个代表RGB颜色的整数,代表鼠标悬停在标签上时文本的颜色(颜色代码“§”的优先级高于它)
  • text:显示的文本(详见“文本类型”章节)(可以包含颜色代码“§”)
  • hoverText:鼠标悬停在标签上时显示的文本(详见“文本类型”章节)(可以包含颜色代码“§”)
  • anchor:(可选)可以是"start"(缺省值),"middle","end"中的任意一个,它们分别可以让文本靠左、中、右
  • action:(可选)当标签被点击时会触发的行为(详见“行为”章节)
  • alignment:(可选)详见“对齐”章节
  • fontSize:文本的大小,缺省值是1,2的话就是两倍大小
  • pressSound:(可选)一个路径,表示当文本被按下时发出的声音
  • hoverSound:(可选)一个路径,表示当鼠标悬停在文本上时发出的声音



使用入门
在安装好该Mod并打开一次游戏后,你会发现:
  • 在你的主界面多了一个“刷新”按钮,这个按钮可以让你在修改完JSON文件后不必重启游戏来查看效果,你也可以用Ctrl+R来直接刷新
  • 在.minecraft\config\CustomMainMenu下将会有一个文件叫做mainmenu.json,这个文件在该目录下找不到相同文件时会自动生成。一般情况下,它会生成一份与原版界面一致的JSON文件,如果你想改变主界面建议从它开始
通常你只要看看原版界面的JSON文件就可以学到很多东西了



Gui尺寸
你可以为不同界面尺寸来设计不同大小的Gui。一般情况下,同一个JSON文件被用于所有界面尺寸,但是你可以添加例外,通过重命名JSON文件的名称,像这样:
"mainmenu_auto.json" / "mainmenu_large.json" / "mainmenu_[].json"(分别对应“自动”、“大”、“所有”(?)
没有指定大小的文件就是默认启用的文件,指定了大小的文件用于特殊的界面尺寸



其它
以下元素限制量为1个/每个界面(详见子章节)



背景
本Mod的背景稍稍和原版不同,除了原版的样式外,它还可以是一张静态图片或是幻灯片
你也可以把背景的悬赏设置成"options"(具体就是这样:"background" : "options")来让背景是原版的背景设置(泥土)(详见下方折叠),这同样会和该Mod作者的另一个Mod作品自定义背景一起运作
以下是背景的属性:
  • image:背景图片的路径
  • mode:(可选)可以是"fill","stretch","center"或是"tile"(详见“背景模式”章节)
  • slideshow:(可选)详见“幻灯片”章节



背景模式
背景模式告诉Mod它应该如何操作来适应Minecraft窗口
  • fill:会保持图像的纵横比,如果与窗口大小不匹配将会裁剪图像
  • stretch:会调整图像来让它适合窗口大小,它不保持图像的纵横比
  • center:将会保持图像在窗口中心,如果太大把图像裁剪,如果太小窗口会有黑边
  • tile:将会用指定图像的网格填充窗口,这对某些材质是很有帮助的



幻灯片
(为了缩小图片大小而裁剪了录制区域及帧率,抱歉)
幻灯片在静态图片中循环,每张图片之间会有一个过渡效果
下面的折叠是一个幻灯片的JSON样例
  1. "background":
  2.         {
  3.             "image" : "",
  4.             "slideshow":
  5.             {
  6.                 "images" : ["mainmenu:screenshot1.png","mainmenu:screenshot2.png","mainmenu:screenshot3.png"],
  7.                 "displayDuration" : 100,
  8.                 "fadeDuration" : 40
  9.             }
  10.         }
复制代码
以下是幻灯片的属性:

  • images:一套图组,它会出现在幻灯片中(具体就是 "images":["image1.png","image2.png"] )
  • displayDuration:一张图片在屏幕上显示的时间(以Tick为单位)
  • fadeDuration:渐弱动画的时间(以Tick为单位)
  • shuffle:图片的顺序是否随机(?)
  • synced:详见“同步”章节



全景图
全景图即为原版界面的背景,它由6张图片组成

以下是全景图的属性:

  • images:组成全景图的6张图片,%c可以代替0-5来获得6张图片
  • blur:全景图是否模糊
  • gradient:全景图是否要有从白到黑的变化(?)
  • animate:全景图是否要旋转
  • animationSpeed:全景图要旋转多快
  • position:从哪张图片开始旋转
  • synced:详见“同步”章节



闪烁文本
就是...闪烁文本啊

以下是闪烁文本的属性:
  • PosX:闪烁文本的X坐标
  • PosY:闪烁文本的Y坐标
  • color:一个代表RGB颜色的整数,代表闪烁文本的颜色
  • texts:(可选)可能成为闪烁文本的文字(详见“文本类型”章节)(译者注:建议直接食用原版中的闪烁文本文件,即"file:minecraft:texts/splashes.txt")
  • alignment:(可选)详见“对齐”章节
  • synced:详见“同步”章节



功能性字符串
在运行时,文本中的功能性字符串会转化为一些其它的数据
  • #mcversion#:MC的版本号
  • #fmlversion#:FML的版本号
  • #mcpversion#:MCP的版本号
  • #forgeversion#:Forge的版本号
  • #modsloaded#:多少Mod被加载了
  • #modsactive#:多少Mod运行中
  • #time#:当前时间
  • #username#:玩家的用户名
  • #date#:确切的日期(取决于系统的区域设置)



同步
同步是幻灯片、全景图和闪烁文本的一个属性。如果它被设置为true那么这个界面就不会创建自己的幻灯片/全景图/闪烁文本,而是继续沿用主界面的设定。因此,当切换界面时,幻灯片和全景图会继续运行,闪烁文本也不会改变

注意,你应该设置该属性到子界面,让它沿用主界面的设定而不是把这个属性设置在主界面。此外,如果你的主界面没有设置幻灯片/全景图/闪烁文本,但是在你的子界面上使用了该属性,那你的游戏可能会崩溃

注意,同步只对幻灯片背景生效,而不对非背景的幻灯片生效



文本类型
一般在Gui上可见的所有文本(标签,按钮上的文本和闪烁文本)可以用三种不同形式来定义
1、从资源中加载
  1. "splash-text":
  2. {
  3. "posX" : 90,
  4. "posY" : 70,
  5. "color" : -256,
  6. "alignment" : "top_center",
  7. "texts" : "file:minecraft:texts/splashes.txt"
  8. }
复制代码
以"file:"开头,随后是要加载的文本文件路径
2、从一个网址中读取
  1. "changelog":
  2. {
  3. "text":"web:http://pastebin.com/raw.php?i=MmSCr6zV",
  4. "posX" : 2,
  5. "posY" : 0,
  6. "color" : -1,
  7. "alignment" : "left_center"
  8. }
复制代码
以"web:"开头,随后是要加载的文本文件网址(支持http与https)
3、静态文本
  1. "mojang":
  2. {
  3. "text" : "Copyright Mojang AB. Do not distribute!",
  4. "posX" : -197,
  5. "posY" : -10,
  6. "color" : -1,
  7. "alignment" : "bottom_right"
  8. }
复制代码
直接写就好啦



经验总结
以下是我个人的一些经验总结,(或许)会不定期更新

1、每个元素的对齐属性最好加上,不然你可能会碰上分辨率不同,元素的位置也不同的尴尬情况
2、做界面最好事先要有一个构思,例如哪里要有一个按钮,这个按钮要有什么功能之类的...
3、如果没思路应该做什么、怎么做,可以看看下一章“使用示例”原版JSON真的可以教你很多东西(例如把格式记住了那你的JSON看上去会更好)
4、如果你的JSON文件有语法错误,那么启动游戏时可能会崩溃
5、如果你的元素的属性有误,这个Mod好像会无视掉它(似乎是因为属性是用双引号括起来的?)
6、这里是在编写JSON时,容易犯的错误:

7、如果在JSON文本中的中文显示正常,但在游戏中乱码,试试切换编码(一般用ANSI)
8、建议使用文本编辑软件Notepad++



使用示例
以下是一些JSON示例
(有一些示例使用了非原版材质,使用在自己的JSON文件上会变成紫黑状)
1、配置
结果
2、配置
结果
3、配置
结果
4、示例(不提供)
结果
5、示例
结果
6、配置
结果
7、配置
结果
8、配置
结果
9、配置
结果
10、配置
结果
11、配置
结果
12、配置
结果
13、配置
结果
14、配置
结果
15、配置
结果
16、配置
结果
17、配置
结果



更新日志
18.8.22 新增“支持相关”
18.8.10 发布本帖



实用工具
  • Textcraft:便捷生成MC风的Logo的网站
  • Minotar:一个通过网址就可以获取正版玩家头像的网站,可以配合"web:"一起使用(详见“文本类型”章节)
  • Optifine Cape:在赞助Optifine作者后可以获得一件披风,通过"web:"搭配下面的网址可以获取玩家披风(详见“文本类型”章节)(感谢 2714491883MP 补充)
  1. http://s.optifine.net/capes/#username#.png
复制代码



支持相关
如果你想支持原作者,建议至原帖下载该Mod
如果你想支持我,可以用爱为我发电
[afd]silver_moon[/afd]


[groupid=1478]Magic Amateur Group[/groupid]