本站文本内容除另有声明外,均在知识共享 署名-非商业性使用-相同方式共享 3.0 协议下提供。(详情…本站文本内容除另有声明外,均在知识共享 署名-非商业性使用-相同方式共享 3.0 协议下提供。(详情…中文Minecraft Wiki是完全公开的。欢迎持续参与翻译工作中文Minecraft Wiki是完全公开的。欢迎持续参与翻译工作Minecraft中文Wiki微博正在更新!或许有兴趣去看看Minecraft中文Wiki微博正在更新!或许有兴趣去看看翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。需要管理员的协助?在管理员告示板留言也许可以帮到您。需要管理员的协助?在管理员告示板留言也许可以帮到您。

教程/制作数据包

来自Minecraft Wiki
跳转至: 导航搜索
Java Edition.png

本教程介绍如何制作数据包

入门[编辑 | 编辑源代码]

提示:本教程大约需要1到1.5个小时才能完成。'

数据包允许玩家自定义命令函数掉落物,世界结构成就合成,这将改变这个游戏游戏。在安装之前,首先需要制作一个数据包。

不该做什么[编辑 | 编辑源代码]

在制作数据包之前,您不应该做一些事情。这是一个“不应该做”的列表:

  • 做任何违反MojangMinecraft使用条款”的事情。
  • 发布Minecraft版本或修改版本,允许玩家在没有从Mojang购买Minecraft'的情况下玩游戏。
  • 以任何方式释放反编译的Minecraft'源代码。

创建数据包[编辑 | 编辑源代码]

要创建数据包,首先导航到世界文件夹中的datapacks文件夹。要查找世界文件夹,请在.minecraft中找到saves文件夹。 进入文件夹后,创建并打开一个文件夹并命名:Tutorial Data Pack。这是您的数据包的名称,可以是您想要的任何名称。

创建文件夹后要做的第一件事是创建pack.mcmeta文件。这让Minecraft知道该文件夹是一个数据包。

创建MCMETA文件[编辑 | 编辑源代码]

要创建MCMETA文件,请右键单击“Tutorial_Data_Pack”文件夹并创建一个新的文本文档。将此文件命名为“pack.mcmeta”。

要求[编辑 | 编辑源代码]

  • 任何文本编辑器都可以使用,但建议的编辑器是Notepad++。它是一个开源的文本编辑器,具有许多编程语言的语法高亮,包括JSON,它是数据包中大多数文件的格式。

您可以从这里下载Notepad++:[1]

注意

在重命名时要确保文件扩展名为.mcmeta而非.txt您可能会收到警告:更改文件扩展名可能会导致文件不可用。但是,不要担心这个消息;无论如何都该保持正确的文件扩展名。

如果您看不到文件扩展名,可以通过转到文件资源管理器的“查看”菜单并选中文件扩展名的复选框来打开它们。

FileExtensions.png

pack.mcmeta[编辑 | 编辑源代码]

在您选择的文本编辑器中打开pack.mcmeta,复制或键入以下内容:

   {
       "pack": {
           "pack_format": 1,
           "description": "Tutorial Data Pack"
       }
   }

pack_format可以是任何数字,因为它当前没有强制执行。 description可以是任何字符串,并且会在/datapack list的输出中将鼠标悬停在数据包上时显示。

注意

这个文件是用JSON编写的!本教程现在没有详细介绍格式,但要注意事项的布局。 要小心,不要忘记引号,冒号,括号或方括号。缺少其中一个可能导致您的数据包无法正常工作!要检查您的文件,您可以使用JSON验证器,例如 JSONLint上的验证器。

数据[编辑 | 编辑源代码]

在你的数据包文件夹里创建一个叫做 data的文件夹, 和你放pack.mcmeta的文件夹在一个文件夹里。 在data文件夹里你需要创建你的namespace文件夹。 Minecraft中大部分的东西都是在命名空间里面的,因此如果一个Mod(或是地图,等等)被灌同时入游戏,它们会各自工作。

如果要命名某个东西(例如:战利品表),你也要说明它的命名空间,或使用默认的minecraft。 游戏本身就是用minecraft 命名空间,所以往里面加东西意味着覆盖已有的Minecraft数据。

如果要加入新的东西,应该用自己的命名空间。仅当覆盖其他东西,或是追加标签的时候,才使用其他命名空间。基本上,不要试图往minecraft命名空间里加新东西。

命名空间和其他文件名称应该只含有以下字符:

0123456789 数字

abcdefghijklmnopqrstuvwxyz 小写字母

_ 下划线

- 连字号(减号)

其他文件名称还可以有:

/ 正斜杠

. 句点

建议的命名格式是:以下划线隔开的小写字母单词(lower_case_with_underscores)。

测试你的数据包[编辑 | 编辑源代码]

现在你已经建立好你的数据包了,在游戏中试试看吧!启动Minecraft,进入世界,输入/datapack list查看可用的数据包列表。应该有两条:第一条是“vanilla”,第二条是以“file/”开头。

无法正常工作?[编辑 | 编辑源代码]

如果你的数据包无法正常工作,再三确认pack.mcmeta 是正确的。如果它不正确,寻找缺失的花括号“{ }”,逗号“,”,冒号“:”,引号“ " " ”,方括号“[ ]”。要记得,每个左花括号、方括号、引号都要有对应的右花括号、方括号、引号。

函数[编辑 | 编辑源代码]

函数是一系列顺次执行的命令

为创建一个新的函数,首先在命名空间文件夹之下建立functions 文件夹。然后,在这个文件夹(或它的子文件夹)之下建立一个文件 (函数的名称).mcfunction。它就是你的函数文件。在游戏中,你的函数被称为(命名空间):(函数名称)(如果函数文件位于functions 文件夹的子文件夹下,那么它被称为(命名空间):(子文件夹1)/(子文件夹2)/.../(函数名称)

战利品表[编辑 | 编辑源代码]

当一个生物死亡时,Minecraft根据战利品表决定它的掉落物。第一次开启自然生成的容器(例如箱子)时,Minecraft也根据战利品表决定其中的战利品

为创建一个新的战利品表,首先在命名空间文件夹之下建立loot_tables文件夹。然后,在这个文件夹(或它的子文件夹)之下建立一个文件 (战利品表的名称).json。它就是你的战利品表文件。在游戏中,你的战利品表被称为(命名空间):(战利品表名称)(如果战利品表文件位于loot_tables文件夹的子文件夹下,那么它被称为(命名空间):(子文件夹1)/(子文件夹2)/.../(战利品表名称)

作为参考,这里给出的战利品表的一个样例:

   {
       "pools": [
           {
               "rolls": 1,
               "entries": [
                   {
                       "type": "item",
                       "name": "minecraft:leather",
                       "weight": 1,
                       "functions": [
                           {
                               "function": "set_count",
                               "count": {
                                   "min": 0,
                                   "max": 2
                               }
                           },
                           {
                               "function": "looting_enchant",
                               "count": {
                                   "min": 0,
                                   "max": 1
                               }
                           }
                       ]
                   }
               ]
           },
           {
               "rolls": 1,
               "entries": [
                   {
                       "type": "item",
                       "name": "minecraft:beef",
                       "weight": 1,
                       "functions": [
                           {
                               "function": "set_count",
                               "count": {
                                   "min": 1,
                                   "max": 3
                               }
                           },
                           {
                               "function": "furnace_smelt",
                               "conditions": [
                                   {
                                       "condition": "entity_properties",
                                       "entity": "this",
                                       "properties": {
                                           "on_fire": true
                                       }
                                   }
                               ]
                           },
                           {
                               "function": "looting_enchant",
                               "count": {
                                   "min": 0,
                                   "max": 1
                               }
                           }
                       ]
                   }
               ]
           }
       ]
   }

想要查找原版战利品表,或是学习其中标签的具体含义,参见战利品表

结构[编辑 | 编辑源代码]

结构可以与结构方块一起使用。结构也可以覆盖Minecraft中原版结构的样子。结构以NBT格式存储。结构方块可以创建NBT文件。第三方软件(例如MCEdit)也可以导出NBT文件。

为向数据包添加一个新的结构,首先在命名空间文件夹之下建立structures文件夹。然后,把你的NBT结构文件放在structures文件夹(或它的子文件夹)之下。在游戏中,你的结构被称为(命名空间):(结构名称)(如果结构文件位于structures文件夹的子文件夹下,那么它被称为(命名空间):(子文件夹1)/(子文件夹2)/.../(结构名称)

进度[编辑 | 编辑源代码]

玩家可以完成进度,获得奖励。

为创建一个新的进度,首先在命名空间文件夹之下建立advancements文件夹。然后,在这个文件夹(或它的子文件夹)之下建立一个文件 (进度的名称).json。它就是你的进度文件。在游戏中,你的进度被称为(命名空间):(进度名称)(如果进度文件位于advancements文件夹的子文件夹下,那么它被称为(命名空间):(子文件夹1)/(子文件夹2)/.../(进度名称)

配方[编辑 | 编辑源代码]

玩家根据配方合成烧炼物品。

为创建一个新的配方,首先在命名空间文件夹之下建立recipes文件夹。然后,在这个文件夹(或它的子文件夹)之下建立一个文件 (配方的名称).json。它就是你的配方文件。在游戏中,你的配方被称为(命名空间):(配方名称)(如果配方文件位于recipes文件夹的子文件夹下,那么它被称为(命名空间):(子文件夹1)/(子文件夹2)/.../(配方名称)

有序配方[编辑 | 编辑源代码]

第一种常见的配方类型是有序配方,例如:

   {
       "type": "crafting_shaped",
       "pattern": [
           "123",
           "231",
           "312"
       ],
       "key": {
           "1": {
               "item": "<item ID>"
           },
           "2": {
               "item": "<item ID>"
           },
           "3": {
               "item": "<item ID>"
           }
       },
       "result": {
           "item": "<item ID>",
           "count": 5
       }
   }

这是一个有序配方的粗略示例,由"type": "crafting_shaped"可以看出。

pattern 是用来描述配方的形状的列表,最多含有3个字符串,每个字符串表示一横行。每个字符串最多含有3个字符,每个字符表示合成网格中的一个格子。不一定要3个字符串,每个字符串也不一定要3个字符,但是每个字符串中的字符个数必须是相等的。空格表示空格子。

key 是说明pattern中的每一个字符所代表的物品的复合对象。每个物品可以用item 后接物品ID说明,也可以用tag后接数据包标签。

result 是说明成品的复合对象。count是成品堆叠的个数。

作为参考,以下是活塞的原版合成配方:

   {
       "type": "crafting_shaped",
       "pattern": [
           "TTT",
           "#X#",
           "#R#"
       ],
       "key": {
           "R": {
               "item": "minecraft:redstone"
           },
           "#": {
               "item": "minecraft:cobblestone"
           },
           "T": {
               "tag": "minecraft:planks"
           },
           "X": {
               "item": "minecraft:iron_ingot"
           }
       },
       "result": {
           "item": "minecraft:piston"
       }
   }

无序配方[编辑 | 编辑源代码]

无序配方是另一常见的配方类型,由"type": "crafting_shapeless"可以看出:

   {
       "type": "crafting_shapeless",
       "ingredients": [
           {
               "item": "<item ID>"
           },
           {
               "item": "<item ID>"
           },
           [
               {
                   "item": "<item ID>"
               },
               {
                   "item": "<item ID>"
               }
           ]
       ],
       "result": {
           "item": "<item ID>",
           "count": 5
       }
   }

无序配方没有patterningredients是一个列表,列出合成所需的原料。原料可以以任何形状排列在合成网格中。

以下是火焰弹的原版合成配方,作为参考:

   {
       "type": "crafting_shapeless",
       "ingredients": [
           {
               "item": "minecraft:gunpowder"
           },
           {
               "item": "minecraft:blaze_powder"
           },
           [
               {
                   "item": "minecraft:coal"
               },
               {
                   "item": "minecraft:charcoal"
               }
           ]
       ],
       "result": {
           "item": "minecraft:fire_charge",
           "count": 3
       }
   }

标签[编辑 | 编辑源代码]

标签用来为方块物品函数分组。minecraft:tick标签用来标识每游戏刻执行的函数。

为创建一个新的标签,首先在命名空间文件夹之下建立tags文件夹。在这个文件夹之下,建立文件夹blocksitemsfunctions。然后,在这些文件夹(或它们的子文件夹)之下建立一个文件 (标签的名称).json。它就是你的标签文件。在游戏中,你的标签被称为(命名空间):(标签名称)(如果标签文件位于上述文件夹的子文件夹下,那么它被称为(命名空间):(子文件夹1)/(子文件夹2)/.../(标签名称)

另见[编辑 | 编辑源代码]