《Feature》投稿格式指导
本文旨在为有意向《Feature》投稿的创作者提供投稿格式的规范和建议,以及列出了本站支持的特殊格式,以方便作者们进行运用。
投稿的格式规范
文本格式
《Feature》接受Markdown格式的投稿。
如果你不熟悉Markdown,可以通过下面的教程快速上手:
当然你也可以使用下面的在线编辑器体验:
文章结构
《Feature》对投稿的文章选题和行文格式没有硬性要求,与mc原版开发有关即可。编辑在采用时可能会结合文章的选题与作者进行一定的探讨和修改。
我们推荐在文章的开头附上本文的摘要。它会显示在索引页和文章的开头,是读者简略了解文章中心思想的有效工具。
关于文章中涉及到的图片或文件引用,如果需要本地引用的话,请将相应的图片和文件放在与文档同级的文件夹下,在投稿时打包发送。
投稿模板
我们推荐作者将文章、文章中使用的图片、以及一些其他信息打包成一个.zip压缩包发送到 1703467028@qq.com ;
压缩包中可以包含一个额外文件夹,在其中可以放置头图、作者的社媒账号信息、关于文章的其他说明等等;在收录时,其中的内容会被移动到别处。
下面是我们制作的示例模板,投稿者可以参考。
附录:本站支持的特殊格式
vitepress和本站在标准markdown语法之外进行了一些扩展,你可以自由使用这些新的语法优化你的文档排版
自定义注释块
vitepress新增了一些块级元素,你可以使用它们来制作注释:
::: tip 提示标题
这里是提示的内容。
:::
::: warning 警告标题
这里是警告的内容。
:::
::: danger 错误标题
这里是错误的内容。
:::
它们会像下方所示渲染:
提示标题
这里是提示的内容。
警告标题
这里是警告的内容。
错误标题
这里是错误的内容。
如果你使用Typora编写Markdown,或许你更熟悉Github式风格的提示框。当然,Vitepress也对此有所支持。如下所示:
> [!TIP]提示
> [!WARNING]警告
> [!DANGER]危险
折叠块
此外,vitepress加入了折叠块元素,你可以使用下面的方式使用它:
::: details 折叠块
这里是被折叠的内容
:::
渲染效果如下:
折叠块
这里是被折叠的内容。
mcfunction、snbt和mcdoc语法支持
香草图书馆增加了mcfunction、snbt和mcdoc的代码块语法高亮,你可以和使用其他的编程语言一样使用它们:
say mcf语法高亮
execute as @s at @s if entity @s run function foo:bar
tp @s ~ ~ ~ ~ ~
return 0
struct myStruct{
myInt: int,
myShort: short,
myString: string,
}
NBT树展示支持
香草图书馆支持类似Wiki的NBT数据结构展示形式。如:
可以使用自定义vue控件NBTTree
实现:
<NBTTree code='
@Desc<"这是一个测试数据结构">
data Test: floating_ui:Item {
@Desc<"这是一个测试元素">
a as int;
b as (string|float);
@Desc<"这也是一个测试元素">
c as floating_ui:Item;
@Desc<"这是一个测试嵌套元素">
d as data {
@Desc<"这是一个测试嵌套子元素">
child as int;
d as data {
@Desc<"这是一个测试嵌套子元素">
child as int;
qwq as float;
};
};
e as list<floating_ui:Item>;
f as list<data {
@Desc<"这是一个测试嵌套子元素">
child as int;
}>;
}'/>
code
中是NBT数据结构的格式。这既不是mcdoc也不是snbt,而是mcfpp
。有关Project MCFPP中NBT数据模板的详细介绍可以查看数据模板。这里仅仅讲解最基础的内容。
在NBTTree
控件的code
中编写MCFPP代码。其中,data <名称> (: 继承模板) {...}
定义了一个NBT数据模板。名称只能是大小写字母、下划线和数字。其后的: 继承模板
可选,可以让这个模板继承一个或多个数据模板的成员,具体会渲染为一个可折叠的"xxx共通标签"。之后的花括号里面定义数据模板的成员,格式是名称 as 类型
。如果使用(类型1|类型2|类型3|...)
则代表一个联合类型,具体渲染为多个并列的类型图标。
NBT类型(点击展开)
解析器使用了枚举变量了来渲染NBT树中的NBT类型图标。具体的对应关系如下:
香草图书馆支持解析的所有NBT类型,具体的对应关系如下:
标识符 | 类型枚举变量 | 标识符 | 类型枚举变量 |
---|---|---|---|
byte | [NBTType.Byte] | short | [NBTType.Short] |
int | [NBTType.Int] | long | [NBTType.Long] |
float | [NBTType.Float] | double | [NBTType.Double] |
ByteArray | [NBTType.ByteArray] | IntArray | [NBTType.IntArray] |
LongArray | [NBTType.LongArray] | string | [NBTType.String] |
list *注1 | [NBTType.List] | compound | [NBTType.Compound] |
bool | [NBTType.Boolean] | text | [NBTType.String, NBTType.Compound, NBTType.List] |
UUID | [NBTType.IntArray] | any | [NBTType.Other] |
注1:列表需要有一个泛型参数,即list<T>
。详细见下文。
使用xxx as data {...}
的方法定义一个嵌套的复合标签。使用xxx as list<data {...}>
表示一个列表里面的所有元素都是特定格式的复合标签。
@xxx<xxx>
是MCFPP中的注解。@Desc<"描述">
定义了随后的NBT数据模板或者元素的描述信息。@Name<"名字">
则定义了这个元素实际上会渲染的名字,可以用于当元素的名字和MCFPP关键字冲突的时候(比如if
之类的)。
使用namespace:id
的命名空间ID的形式可以在继承或者定义类型的时候引用其他模板。除了香草图书馆默认提供的一些模板以外,你可以在Markdown文档的开头使用script
代码块和compileToCache
方法定义你需要的数据模板。
<script setup>
import {compileToCache} from "/.vitepress/MCFPPNBTParser";
//第一个参数是数据模板的命名空间ID,第二个是要解析的代码,和NBTTree中的格式一致
compileToCache('sklibs:command',`
@Desc<"函数对象">
data CommandObj {
@Desc<"需要执行的函数"> cmd as string;
@Desc<"函数参数"> args as compound;
}
`);
</script>
随后,你就可以在后续同一页面的NBTTree
中使用这个数据模板。
<NBTTree code='
@Desc<"函数参数">
data config {
@Desc<"升空时间(tick)"> life as int;
@Desc<"升空时间延迟结束后执行的命令"> cmdv as list<sklibs:command>;
}
'/>