本篇教程由作者设定未经允许禁止转载。
前言
因为有人已经写过基本使用方法了,所以我就简单介绍一下这个模组的文本该如何写了。
正文
我们打开本模组使用的文本解析库 Hermes 的文件夹并浏览代码目录,就可以发现它支持的文本标签如下:
Blockquote 引用
这个标签里必须是一个 text 标签,关于 text 标签会在后文详细介绍,先简单说明就是 text 标签就是普通的文本标签,你可以通过 <text>文本内容</text> 来显示文本。
Blockquote 是一个引用标签,类似于 Markdown 中的 >。
有一个可选参数:color,定义引用左边部分那个小块块的颜色,介绍在下方 Hint 标签中。
上方图片的代码如下:
<blockquote><text>Blockquote</text></blockquote>
BreakLine 换行
普通的换行,就不放图片展示了。
因为换行并不需要参数、内容,如果你了解 html 或者 xml 了话,就应该明白
<br/>
和
<br></br>
都可以使用,但为了方便,使用第一种方式比较好。
Component 控件
这个在仓库代码中注册标签的位置打了注释标明已过时,所以不再介绍。
CraftingRecipe 合成配方
合成配方标签,可以接受两个参数。一个是 id,指定了物品的配方 id,此参数为必选;一个是 grid-width,设置合成表的大小,此参数为可选,估计是为了模组适配,比如无尽贪婪。
上方图片实现代码如下:
<crafting-recipe id="minecraft:acacia_boat"></crafting-recipe>
上方代码实现如下:
<crafting-recipe id="minecraft:acacia_boat" grid-width="5"></crafting-recipe>
Details 详细
就是一个可以展开和收缩的控件。
里面可以添加各种控件内容甚至套娃。
可以接受两个参数,并且都是可选的。第一个为 summary,为这个展开收缩控件的标题;一个为 open,控制其默认是否展开,如果不填就是默认收缩,赋值为 true 就是默认展开。
未展开
展开
上方代码实现如下:
<details summary="Title here">
Content
?
</details>
Entity 实体
实体标签。会渲染实体的模型,并且实体模型会朝向你鼠标的位置看。
这个标签的参数就比较复杂了。
可以接受七个参数:
type:生物的类型,填写生物的 id 比如 minecraft:pig,为必填项(minecraft:player不受支持)。
tag:生物的标签,填写一个 NBT Compound 比如下方图片里小猪就是设置了年龄的标签 {Age:-23333},为可选项。
align:对齐的位置,默认为 Center 中心。顺便介绍一下支持的位置:LEFT、TOP 都等同于在控件最小值处渲染,所以如果你在横向渲染的位置填 TOP 渲染效果等于 LEFT,在竖直渲染的位置填 LEFT 渲染效果等于 TOP;CENTER,MIDDLE 都在控件的中值处渲染;RIGHT、BOTTOM 和 LEFT、TOP 相反,在控件最大值处渲染。为可选项。
scale:缩放程度,需要一个单精度浮点数(float),所以填写的数字末尾要加一个F(大小写都可以),比如 5f。为可选项。
vShift:竖直方向偏移,正值为向上偏移,负值为向下。为可选项。
height、width:控件的布局大小,不会影响实体模型的渲染大小,但会影响整个控件的占用位置的大小,需要一个 float 值。为可选项
上方效果实现代码如下:
<entity type="minecraft:pig" align="left" scale="2.0f" tag="{Age:-23333}"></entity>
Heading 标题
就是标题啦。但是它只提供了两个默认的 Heading,一个是 h1 一个是 h2。其本质还是一个 Text 标签,详细参数请在下方介绍 text 的时候看。
可以直接用 markdown 的 # 和 ## 格式代替。
因为它是套皮的 Text,所以它继承了 Text 的 shadowed,但是 Text 默认 shadowed 是 true,Heading 默认设置为 false 了。
<h1>H1</h1>
<h2>H2</h2>
Normal Text
<h1 shadowed="true">adada</h1>
Hint 提示
提示、小贴士标签。
它的三个参数都是可选的:
title:标题,填写纯文本。
color:颜色,支持 16进制颜色,格式为 0xFFFFFF 或者 #FFFFFF。
icon:图标,填写物品的 id。
和 Details 类似,也可以在里面塞各种控件内容。Hint 里面可以不填写内容,但是</hint>和<hint>所在行必须相同或者相邻,如果中间空了一行,即它们占了三行但其中没有内容,则会渲染出错;里面不能套娃 Details,也不能套娃 Hint。
即
<hint></hint>
<hint>
</hint>
<!-- 以上是可行的 -->
<hint>
</hint>
<!-- 以上是不可行的 -->
上方实现代码为:
<hint title="Hint here" color="#66ccff" icon="minecraft:diamond">
Hint Content
</hint>
HorizontalRule 分割线
就是普通的分割线,可以接受一个可选参数 color,参考 Hint。
实现代码:
<hr color="red"/>
Image 图片
图片控件,使内容渲染更加丰富,参数太多啦!甚至全都是可选参数!
src:图片位置,比如我想要钻石图标就填写"textures/item/diamond.png",但是这似乎只能获取到 assets/minecraft 中的图片,模组图片我仍在研究,不过你可以用材质包来实现自定义图片。
background:背景颜色,填写的时候需要如下格式"大小 颜色",大小和颜色中间有一个空格,比如 100 长宽的红色背景就是"100 red"
border:图片的边框,写法和 background 一样。
width:物品宽度,必须是整数。
height:物品高度,必须是整数。
u、v: 材质的 uv 偏移量,因为这两个数值相关所以就放一起讲了
textureWidth、textureHeight:材质宽度、高度,假如我将材质宽度设置为 1,上方width设置为 10,就会在横向上渲染十个图片,如果把材质高度也设置成1,上方的 height 也设置成 10,就会渲染出10 x 10 = 100 个图片在指定的宽度和高度内。当这两个值大于设置的高度和宽度时,u、v 才会起作用。
上方图片实现方法如下:
<img src="textures/item/diamond.png" background="30 #66ccff" border="5 red" align="left" width="100" height="200" u="2" v="115" textureWidth="160" textureHeight="160"></img>
为了告诉你们图片是可以拉伸的所以我再放一张图片:
实现如下:
<img src="textures/item/diamond.png" background="30 #66ccff" border="5 red" align="left" width="100" height="200"></img>
Item 物品
我用物品的材质来举例子好像容易让人误会那就是渲染物品的方法,其实渲染物品应该用这个,用这个了话就可以渲染模组的物品了。
全是可选参数:
id:物品的 id。
tag:物品的 NBT,需要一个 NBT Compound。如果你的 NBT 标签中存在双引号,框选参数内容的时候可以用单引号,这样可以避免 Hermes 无法解析的问题。
scale:参考 Entity 标签。
align:参考 Entity 标签。
background:参考 Image 标签。
border:参考 Image 标签。
(甚至是实时渲染,附魔光效是动态的)
代码如下:
<item id="minecraft:diamond" tag='{Enchantments:[{id:"minecraft:protection",lvl:4s}]}' scale="3.0f" align="left"></item>
Paragraph 段落
就是一个套皮的 Text,但是和 Heading 一样 shadowed 默认为 false。
提醒一下此标签名称用 p,和 html 一样。
Text 文本
重头戏终于来了,文本标签。
不过文字标签有缺陷,不能换行。
先介绍一下已经重复的参数:
background:参考 Image 标签。
border:参考 Image 标签。
color:参考 Hint,文字的颜色
align:参考 Entity,默认 LEFT。
然后是 Text 专属的参数:
bold:布尔值,是否为粗体。
italic:布尔值,是否为斜体。
underline:布尔值,是否有下划线。
obfuscated:布尔值,是否为乱码文字。
strikethrough:布尔值,是否有删除线。
你可以直接输入纯文本在 text 标签中,这样会显示为普通的文本。
与别的标签不同的是,text 有专门的子标签,这些子标签只能在 text 中使用。
注:下面全部标内容的地方都可以套其他的子标签。
颜色标签
原版有的颜色都可以当作标签使用:black、dark_blue、dark_green、dark_aqua、dark_red、dark_purple、gold、gray、dark_gray、blue、green、aqua、red、light_purple、yellow、white,使用方法就是<颜色>内容</颜色>
如果你想用十六进制颜色也可以用这个标签格式:<color color="#66ccff>内容</color>
格式标签
乱码字符:obf、obfuscated
加粗:bold、b
斜体:italic、i、em
下划线:underline、u
删除线:strikethrough、st
上方所有的标签都可通过在名称前面加英文感叹号(!)的方式来去除格式,比如:<b>Bold <!b>NotBold</!b></b> 渲染效果就是:Bold NotBold。
你也可以直接在里面套一个<reset>内容</reset>来直接去除所有的格式,仅在套娃的时候有用了。
Span 文本
就是和 Text 标签本身类似,除了不能修改阴影效果以外就是套娃。
<span>内容</span>
Link 链接
参考 html 的 a 标签,不过只有一个 href 参数。
<link target="_blank" href="https://www.mcmod.cn">内容</link>
Clipboard 剪切板
点击里面的文本后会复制到你的剪切板,复制的内容为 clipboard 这个标签的 text 参数。
<clipboard text="copied content">内容</clipboard>
Item 物品
当这鼠标移到这个表情里面的文字时,会显示物品的详细信息(没有图标),这个标签只有一个参数:item,是物品的 id。
<item id="minecraft:diamond">内容</item>
Translate 翻译键
如果你想要做一个国际化的整合包,那么这就是你需要的!<translate>翻译键</translate>可以引用语言文件中的翻译键值,你可以创建自己的资源包并翻译。
Keybind 键位
显示键值,比如 key.sprint 就是玩家绑定的疾跑键,key.keyboard.space 对应的是键盘上的空格键。如果你想知道某个按键的 id,打开你的 minecraft 文件夹找到 options.txt,会发现按键绑定的部分都是 key_key.xxxx:xxx,把key_和冒号之间的部分拿出来,就是键值了。
<keybind>键值</keybind>
直接上截图吧!以下截图都为同一个代码的效果
上方图片代码实现如下:
<text>Literal</text>
<text>Inner style tags: <b>Bold</b> <i>Italic</i> <obf>Obfuscated</obf> <u>Underline</u> <st>Strikethrough</st></text>
<text>Inner color tags: <red>VanillaColors</red> <color color="#66ccff">HexColors</color> </text>
<text><span bold="true">Span, just same as Text</span></text>
<text><link target="_blank" href="https://www.mcmod.cn"><span underline="true"><aqua>https://www.mcmod.cn (颜色和下划线是手动加的,默认是没有的。)</aqua></span></link></text>
<text><clipboard text="Copied">Click to copy</clipboard></text>
<text>Just item: <item item="minecraft:diamond"></item></text>
<text>Translate tags: <translate>enchantment.minecraft.protection</translate></text>
<text>Keybind tags: Bindings: <keybind>key.sprint</keybind> Keyboard: <keybind>key.keyboard.space</keybind></text>
List 列表
这个就很 html 了。
你可以通过 ul 标签创建一个无序列表,也可以通过 ol 标签创建一个有序列表。
无序列表中物品的开头是一个点,有序列表中物品的开头是数字序号。
列表中的物品全都需要使用 li 标签。li标签中什么都能塞,但是没有布局系统,所以里面的东西会重叠,并且展开收缩控件无法交互。
ol、ul、li 都能添加 color 参数,ol 和 ul 的参数影响的是开头的点和序号的颜色,li 的 color 参数意义不明。
上方实现:
<ul color="blue">
<li color="red">
<text><red>first</red></text>
</li>
<li color="red">
<item id="minecraft:diamond" align="left"></item>
</li>
<li color="red">
重叠了!
<details open="true">
What!?
What!?
What!?
What!?
What!?
What!?
</details>
<hint>
Hint
</hint>
</li>
</ul>
<ol color="gold">
<li color="red">
first
</li>
<li color="red">
second
</li>
<li color="red">
third
</li>
</ol>
Column/Columns 列
Column 标签可以单独使用,但是这样和普通的布局并没有区别,只有在 Columns 中 Column 标签才能发挥最大作用。
Columns 中最多只能有 3 个 Column。
小技巧:你可以在 Columns 中的 Column 中塞 Columns 来实现超过 3 个 Column 的效果。
Column 有一个 valign 可选参数,假如有三个 Column,其中一个 Column 内容很长,如果你将一个非常短的 Column 的 valign 设置为 bottom 或者 right,就会对齐到最下方。默认为在中间对齐。
Columns 有一个可选参数 template 可以定义三个 Column 的占比,比如 "10% 20% 70%" 就是 1:2:7 的比例,当然,你也可以直接去除百分号写为 "10 20 70" 或者混着写也行 "10 20 70%",但是如果这几个数的和不是100,就会出现如下效果:
以下为正式效果及其实现代码:
<columns template="10% 20% 70%">
<column>
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
</column>
<column valign="bottom">
<item id="minecraft:diamond" align="left"></item>
</column>
<column>
<columns>
<column>
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
</column>
<column valign="top">
<item id="minecraft:diamond" align="left"></item>
</column>
<column>
aaaaa
</column>
</columns>
</column>
</columns>
Carousel 轮播
这个就是轮播内容。
carousel 标签为轮播控件,有两个可选参数:
index:默认显示的内容的索引,默认为 0,即第一个内容。
height:控件的高度,默认为 -1,表明根据内容的高度自适应高度,但是如果每页的高度不一样轮播控件的高度也会变来变去。
carousel-item 标签为轮播内容,里面可以填任何东西,没有任何参数。
实现代码为:
<carousel>
<carousel-item>
<text>ada</text>
<text>ada</text>
<text>ada</text>
<text>ada</text>
<text>ada</text>
</carousel-item>
<carousel-item>
BB
<details>
套个娃试试看
1
1
1
1
1
</details>
</carousel-item>
<carousel-item>
CC
</carousel-item>
</carousel>
部分 Markdown 语法支持
# text
## text
text
**text**
--text--
__text__
~~text~~
> text
||text||
/4/text/4/
/c/text/c/
/6/text/6/
注释
这个里面是支持 mark language 格式的注释的,即 <!-- 注释内容写这里 -->,不会影响渲染。但是注释内容不能换行。
结尾
目前就这么多标签了。
它的任务详情这个可编辑内容太多了,我感觉比 FTB 好多了,但是编辑器不是很好用,默认上方工具栏的提示就只有 markdown 语法,而且如果你的文本内容出问题不会提示问题在哪,切换编辑模式后会直接不渲染。但是这个简介内容太强大了,如果这个模组的功能部分能再完善一些我感觉会是一个非常卓越的任务模组。目前的缺点还挺多的:比如左侧任务列表只有章节不能给章节分组再分组这样套娃;任务需求触发器太少,任务奖励项可选内容太少。要是以后适配的模组再多一点就完全能立住脚了。
这个模组对比 FTB 的几个优势:原版风格、更轻量化,组队模组是可选的,不是强制性的前置,如果做单人整合包就可以不装组队插件了,多人整合包额外装一个用来搞队伍任务同步也可以。UI 更好,任务步骤更加明显。
希望这个模组能越做越好吧。