众所周知,基岩版插件没有Java版本那么好,什么龙核啥的,我看论坛上基岩服务器称号插件都是文字称号,没有图片称号,那么我们要如何实现呢,今天就跟大家分享一下我自费30大洋买的图标材质包以及实现的思路 😁
打开资源包根目录,打开font文件夹,这里用于存放字体相关的文件。打开原版的font文件夹,里面会有很多以“glyph_”开头的图片,这个用于存放文字在游戏内的显示方式。glyph_后面有两个字符,那些是十六进制,从00排到FF。当然,并不是一定要有不常见的字符,例如原版font文件夹里就没有glyph_E5.png。
每一张glyph_图片都被均匀地分成256等份,横向平均分16格子,竖向再平均分16格子。例如,大部分glyph_图片的分辨率是256256,那么一个字符的分辨率大小就是1616。特殊地,glyph_E0.png的分辨率是512512。这时,每个字符就占用3232的分辨率大小。也就是说,glyph_图片是可以等比例缩放的。
除了glyph_XX.png,还有minecraft-ten.ttf,这是一个字体文件,记录了MinecraftTen字体。使用MT管理器打开可以方便地查看这个字体,注意示例中的英文字母。
还有notfound.png这张图片,记录了一堆问号,应该是游戏找不到该显示的字符时就会显示这张图片。
还有smooth文件夹,里面有些奇怪的文件,目前还不清楚它们的作用(似乎是一个字体),所以我们看看剩下的两个文件。
在font文件夹下还有两个文件,一个是emoticons.json,一个是font_metadata.json。前面一个还算明朗,后面一个简直让人不知道是做什么的。
以下是emoticons.json可能的代码格式。
[
{
"name": "shank", //表情的ID。在语言文件里用“:表情ID:”,例如“:shank:”,可以直接调用表情。调用的字符的码位在下面指定。(不确定)
"code": "0xE100" //码位。使用十六进制。这里的0xE100相当于\uE100。
},
{
"name": "armor", //这里与上面相同。
"code": "0xE101" //这里与上面相同。
},
{
"name": "minecoin", //这里与上面相同。
"code": "0xE102" //这里与上面相同。
}
]
还有一个font_metadata.json,似乎是字体元信息。这个文件更让人不明所以。以下内容纯粹是根据键名推断出来的,比较不可信。
{
"version" : 1, //版本
"fonts" : [ //字体
{
"font_format": "ttf", //字体格式。
"font_name": "MinecraftTen", //字体名称,应该是用于UI的。
"version": 1, //版本
"font_file": "font/minecraft-ten", //字体文件的位置。
"lowPerformanceCompatible": false //低性能兼容
},
{
"font_format" : "msdf", //一种未知的字体格式
"font_name" : "OldSmoothFont", //字体名称,应该是用于UI的。
"font_file" : "font/smooth/smooth_" //从这里可以推断出那个smooth文件夹下的一堆奇怪的文件代表了一个字体。
}
],
"font_aliases" : [ //这一部分更加不明所以了,这里应该是字体别名。
{ //一个字体和它对应的别名。
"alias" : "SmoothFontLatin", //别名
"fonts" : [ //字体
{
"font_reference" : "OldSmoothFont" //字体参考
},
{
"font_reference" : "UnicodeFont", //字体参考
"font_ranges" : [ //字体范围,可能是码位的范围
{ "first" : 54620, "last" : 54620 },
{ "first" : 44397, "last" : 44397 },
{ "first" : 50612, "last" : 50612 },
{ "first" : 45824, "last" : 45824 },
{ "first" : 48124, "last" : 48124 },
{ "first" : 57344, "last" : 63743 }
]
}
]
},
{
"alias": "MinecraftTenEmoticon", //别名
"fonts": [ //字体
{
"font_reference": "MinecraftTen" //字体参考
},
{
"font_reference": "unicode", //字体参考
"font_ranges": [ //字体范围,可能是码位的范围
{
"first": 57344,
"last": 63743
}
]
}
]
},
{ //这一堆东西和上面的格式一样。
"alias": "SmoothSmall",
"font_scale_factor": 1,
"fonts": [
{
"font_reference": "OldSmoothFont"
},
{
"font_reference": "UnicodeFont",
"font_ranges" : [
{ "first" : 54620, "last" : 54620 },
{ "first" : 44397, "last" : 44397 },
{ "first" : 50612, "last" : 50612 },
{ "first" : 45824, "last" : 45824 },
{ "first" : 48124, "last" : 48124 },
{ "first" : 57344, "last" : 63743 }
]
}
]
}
]
}{
"version" : 1, //版本
"fonts" : [ //字体
{
"font_format": "ttf", //字体格式。
"font_name": "MinecraftTen", //字体名称,应该是用于UI的。
"version": 1, //版本
"font_file": "font/minecraft-ten", //字体文件的位置。
"lowPerformanceCompatible": false //低性能兼容
},
{
"font_format" : "msdf", //一种未知的字体格式
"font_name" : "OldSmoothFont", //字体名称,应该是用于UI的。
"font_file" : "font/smooth/smooth_" //从这里可以推断出那个smooth文件夹下的一堆奇怪的文件代表了一个字体。
}
],
"font_aliases" : [ //这一部分更加不明所以了,这里应该是字体别名。
{ //一个字体和它对应的别名。
"alias" : "SmoothFontLatin", //别名
"fonts" : [ //字体
{
"font_reference" : "OldSmoothFont" //字体参考
},
{
"font_reference" : "UnicodeFont", //字体参考
"font_ranges" : [ //字体范围,可能是码位的范围
{ "first" : 54620, "last" : 54620 },
{ "first" : 44397, "last" : 44397 },
{ "first" : 50612, "last" : 50612 },
{ "first" : 45824, "last" : 45824 },
{ "first" : 48124, "last" : 48124 },
{ "first" : 57344, "last" : 63743 }
]
}
]
},
{
"alias": "MinecraftTenEmoticon", //别名
"fonts": [ //字体
{
"font_reference": "MinecraftTen" //字体参考
},
{
"font_reference": "unicode", //字体参考
"font_ranges": [ //字体范围,可能是码位的范围
{
"first": 57344,
"last": 63743
}
]
}
]
},
{ //这一堆东西和上面的格式一样。
"alias": "SmoothSmall",
"font_scale_factor": 1,
"fonts": [
{
"font_reference": "OldSmoothFont"
},
{
"font_reference": "UnicodeFont",
"font_ranges" : [
{ "first" : 54620, "last" : 54620 },
{ "first" : 44397, "last" : 44397 },
{ "first" : 50612, "last" : 50612 },
{ "first" : 45824, "last" : 45824 },
{ "first" : 48124, "last" : 48124 },
{ "first" : 57344, "last" : 63743 }
]
}
]
}
]
}
嗯,说实话,很少有资源包会用这个font文件夹,因为如你所见,对于它的研究实在太少了,而且它本身也不支持什么很高级的操作,顶多就是用空码位输入图片罢了。