Skip to content

《Feature》投稿格式指导

本文旨在为有意向《Feature》投稿的创作者提供投稿格式的规范和建议,以及列出了本站支持的特殊格式,以方便作者们进行运用。

投稿的格式规范

文本格式

《Feature》接受Markdown格式的投稿。
如果你不熟悉Markdown,可以通过下面的教程快速上手:

当然你也可以使用下面的在线编辑器体验:

文章结构

《Feature》对投稿的文章选题和行文格式没有硬性要求,与mc原版开发有关即可。编辑在采用时可能会结合文章的选题与作者进行一定的探讨和修改。

我们推荐在文章的开头附上本文的摘要。它会显示在索引页和文章的开头,是读者简略了解文章中心思想的有效工具。

关于文章中涉及到的图片或文件引用,如果需要本地引用的话,请将相应的图片和文件放在与文档同级的文件夹下,在投稿时打包发送。

投稿模板

我们推荐作者将文章、文章中使用的图片、以及一些其他信息打包成一个.zip压缩包发送到 1703467028@qq.com

压缩包中可以包含一个额外文件夹,在其中可以放置头图、作者的社媒账号信息、关于文章的其他说明等等;在收录时,其中的内容会被移动到别处。

下面是我们制作的示例模板,投稿者可以参考。

示例模板.zip

附录:本站支持的特殊格式

vitepress和本站在标准markdown语法之外进行了一些扩展,你可以自由使用这些新的语法优化你的文档排版

自定义注释块

vitepress新增了一些块级元素,你可以使用它们来制作注释:

markdown
::: tip 提示标题
这里是提示的内容。
:::

::: warning 警告标题
这里是警告的内容。
:::

::: danger 错误标题
这里是错误的内容。
:::

它们会像下方所示渲染:

提示标题

这里是提示的内容。

警告标题

这里是警告的内容。

错误标题

这里是错误的内容。

如果你使用Typora编写Markdown,或许你更熟悉Github式风格的提示框。当然,Vitepress也对此有所支持。如下所示:

markdown
> [!TIP]提示

> [!WARNING]警告

> [!DANGER]危险

折叠块

此外,vitepress加入了折叠块元素,你可以使用下面的方式使用它:

markdown
::: details 折叠块
这里是被折叠的内容
:::

渲染效果如下:

折叠块

这里是被折叠的内容。

mcfunction、snbt和mcdoc语法支持

香草图书馆增加了mcfunction、snbt和mcdoc的代码块语法高亮,你可以和使用其他的编程语言一样使用它们:

mcfunction
say mcf语法高亮
execute as @s at @s if entity @s run function foo:bar
tp @s ~ ~ ~ ~ ~
return 0
mcdoc
struct myStruct{
	myInt: int,
	myShort: short,
	myString: string,
}

NBT树展示支持

香草图书馆支持类似Wiki的NBT数据结构展示形式。如:

NBT Icon

可以使用自定义vue控件NBTTree实现:

vue
<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 Icon

香草图书馆支持解析的所有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方法定义你需要的数据模板。

vue
<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中使用这个数据模板。

vue
<NBTTree code='
@Desc<"函数参数">
data config {
    @Desc<"升空时间(tick)"> life as int;
    @Desc<"升空时间延迟结束后执行的命令"> cmdv as list<sklibs:command>;
}
'/>