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

教程/制作数据包

来自Minecraft Wiki
跳转至: 导航搜索
Information icon.svg
此特性为Java版独有。

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

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

数据包允许玩家添加及修改函数战利品表、世界结构进度合成标签

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

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

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

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

要创建数据包,请首先找到世界文件夹中的datapacks文件夹。

要查找世界文件夹,请在游戏目录中找到saves文件夹,默认情况下为.minecraft

  • 单人游戏中,您可以选择您的世界,点击“编辑”,然后点击“打开世界文件夹”。
  • 服务器上,您可以打开其根目录(server.properties所在的位置),然后打开world文件夹.。

打开datapacks 文件夹后,创建一个文件夹并打开。文件夹名即是数据包名,由您决定。

打开新文件夹后要做的第一件事是创建pack.mcmeta文件。这样 Minecraft 才能识别该数据包

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

参见:数据包§pack.mcmeta

在您刚刚创建的文件夹里新建一个名为 pack.mcmeta 的纯文本文件。

注意

重命名时,请确保文件扩展名为.mcmeta而非.txt换句话说,删除旧的扩展名。 您可能会收到警告:更改文件扩展名可能会导致文件无法使用。 但是这实际上表明你已正确重命名pack.mcmeta文件。

如果您使用的操作系统是 Microsoft Windows 且无法查看文件扩展名,不妨试试转到文件资源管理器的“查看”菜单,并选中“文件扩展名”的复选框。

FileExtensions.png

文本编辑器[编辑 | 编辑源代码]

使用任何文本编辑器都可以,但推荐使用Notepad++。它是开源且免费的文本编辑器,支持多种编程语言的语法高亮,包括JSON文本,这是pack.mcmeta及数据包中大多数文件使用的格式。您可以从[1]下载Notepad++。

注意:大多数文本编辑器都不会将mcmeta扩展名识别为JSON文本。 因此,您需要手动配置编辑器。

pack.mcmeta的内容[编辑 | 编辑源代码]

用文本编辑器打开pack.mcmeta,复制或键入以下内容:

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


 pack_format可以是任何数字,因为它目前没有被使用。

 description可以使用字符串或原始JSON文本。当您将鼠标悬停在/datapack list输出的数据包名时,这段内容将会显示出来。

注意

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

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

如果你创建了pack.mcmeta,尝试在游戏中测试它!打开Minecraft,进入世界或输入/reload(如果你已经进入了世界),然后输入/datapack list。此时应该出现两条信息:第一条是[vanilla],第二条应该是[file/您的数据包的名称]。当你将鼠标悬停在数据包名称上时,你应该会看到数据包的描述,内容就像你在pack.mcmeta的description中所写的那样。

当你的数据包出现时,你要准备好继续前进。

故障排除[编辑 | 编辑源代码]

如果列表中没有您的包,请确保pack.mcmeta 是正确的。看看有没有缺少花括号{}、逗号,、冒号:,双引号",方括号[]。双引号和双引号配对,左括号和对应的右括号配对。

命名[编辑 | 编辑源代码]

参见:命名空间ID

在数据包文件夹中创建一个名为 data的文件夹,和pack.mcmeta在一个文件夹里。在data文件夹中,您必须创建另一个文件夹作为命名空间。

合法字符[编辑 | 编辑源代码]

数据包中的命名空间、路径、文件夹名和文件名应仅包含以下符号:

0123456789 数字

abcdefghijklmnopqrstuvwxyz 小写字母

_ 下划线

- 连字号(减号)

/ 正斜杠(不能用于命名空间)

. 句号(不能用于命名空间)

首选命名格式为以下划线隔开的小写字母单词(lower_case_with_underscores),称为 lower snake case。

命名空间[编辑 | 编辑源代码]

游戏中的大多数对象都有一个命名空间,以防止潜在的内容冲突或无意的覆盖。

例如,如果有两个数据包为Minecraft分别添加了一个新的小游戏机制,并且两者都有一个名为start函数。 如果没有命名空间,这两个函数会冲突,小游戏也会遭到破坏。 但如果它们具有minigame_oneminigame_two两个不同的命名空间,则函数名变为minigame_one:startminigame_two:start,冲突解除。

大多数情况下 Minecraft 需要 ID 的存在,例如 /function 命令,路径和命名空间缺一不可。 如果命名空间未指定,则默认其为minecraft

添加新内容时,请一定使用您自己的命名空间。仅当需要覆盖其他东西,或是追加标签的时候,才使用其他命名空间。

例如,Minecraft使用minecraft命名空间,这意味着只有当数据包需要覆盖现有的Minecraft数据或将内容添加到原版标签时才应使用此命名空间。

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

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

在命名空间文件夹中新建functions 文件夹以创建一个新的函数。然后,在functions(或其子文件夹)中新建函数文件 函数名.mcfunction。在游戏中,函数以命名空间ID的格式引用。

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

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

在命名空间文件夹中新建loot_tables文件夹以创建一个新的战利品表。然后,在loot_tables(或其子文件夹)中新建战利品表文件战利品表名.json。在游戏中,战利品表以命名空间ID的格式引用。

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

 1 {
 2 	"pools": [{
 3 		"rolls": 1,
 4 		"entries": [{
 5 			"type": "item",
 6 			"name": "minecraft:leather",
 7 			"weight": 1,
 8 			"functions": [{
 9 				"function": "set_count",
10 				"count": {
11 					"min": 0,
12 					"max": 2
13 				}
14 			}, {
15 				"function": "looting_enchant",
16 				"count": {
17 					"min": 0,
18 					"max": 1
19 				}
20 			}]
21 		}]
22 	}, {
23 		"rolls": 1,
24 		"entries": [{
25 			"type": "item",
26 			"name": "minecraft:beef",
27 			"weight": 1,
28 			"functions": [{
29 				"function": "set_count",
30 				"count": {
31 					"min": 1,
32 					"max": 3
33 				}
34 			}, {
35 				"function": "furnace_smelt",
36 				"conditions": [{
37 					"condition": "entity_properties",
38 					"entity": "this",
39 					"properties": {
40 						"on_fire": true
41 					}
42 				}]
43 			}, {
44 				"function": "looting_enchant",
45 				"count": {
46 					"min": 0,
47 					"max": 1
48 				}
49 			}]
50 		}]
51 	}]
52 }

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

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

结构可以用于结构方块拼图方块,也可以覆盖Minecraft中原版结构的外观。结构以NBT格式存储,您可以使用结构方块创建NBT文件。MCEdit之类的第三方软件也可以导出NBT文件。

在命名空间文件夹中建立structures文件夹以向数据包添加一个新的结构。然后,把你的NBT结构文件放在structures文件夹(或它的子文件夹)之下。在游戏中,结构以命名空间ID的格式引用。

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

玩家通过完成进度来获得奖励。

在命名空间文件夹中建立advancements文件夹以创建一个新的进度。然后,在这个文件夹(或它的子文件夹)之下新建进度文件 进度名.json。在游戏中,进度以命名空间ID的格式引用。

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

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

在命名空间文件夹中建立recipes文件夹以创建一个新的配方。然后,在这个文件夹(或它的子文件夹)之下新建配方文件 配方的名称.json。在游戏中,配方以命名空间ID的格式引用

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

第一种常见的配方类型是有序配方。

 1 {
 2 	"type": "crafting_shaped",
 3 	"pattern": ["123", "231", "312"],
 4 	"key": {
 5 		"1": {
 6 			"item": "<item ID>"
 7 		},
 8 		"2": {
 9 			"item": "<item ID>"
10 		},
11 		"3": {
12 			"item": "<item ID>"
13 		}
14 	},
15 	"result": {
16 		"item": "<item ID>",
17 		"count": 5
18 	}
19 }

"type": "crafting_shaped"可以看出,这是一个有序配方。

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

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

result 是一个对象,其中item规定了最终合成的是何种物品。count是一次合成成品的数量。

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

 1 {
 2 	"type": "crafting_shaped",
 3 	"pattern": ["TTT", "#X#", "#R#"],
 4 	"key": {
 5 		"R": {
 6 			"item": "minecraft:redstone"
 7 		},
 8 		"#": {
 9 			"item": "minecraft:cobblestone"
10 		},
11 		"T": {
12 			"tag": "minecraft:planks"
13 		},
14 		"X": {
15 			"item": "minecraft:iron_ingot"
16 		}
17 	},
18 	"result": {
19 		"item": "minecraft:piston"
20 	}
21 }

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

无序配方是另一种常见的配方类型。

 1 {
 2 	"type": "crafting_shapeless",
 3 	"ingredients": [{
 4 			"item": "<item ID>"
 5 		}, {
 6 			"item": "<item ID>"
 7 		},
 8 		[{
 9 			"item": "<item ID>"
10 		}, {
11 			"item": "<item ID>"
12 		}]
13 	],
14 	"result": {
15 		"item": "<item ID>",
16 		"count": 5
17 	}
18 }

无序配方没有patterningredients是一个列表,列出合成所需的原料。原料可以以任何形状排列在合成网格中。ingredients中如果出现列表,则表明该列表中的任何一种物品都可以使用,如下面火焰弹配方中,煤和木炭都可以使用。

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

 1 {
 2 	"type": "crafting_shapeless",
 3 	"ingredients": [{
 4 			"item": "minecraft:gunpowder"
 5 		},
 6 		{
 7 			"item": "minecraft:blaze_powder"
 8 		},
 9 		[{
10 				"item": "minecraft:coal"
11 			},
12 			{
13 				"item": "minecraft:charcoal"
14 			}
15 		]
16 	],
17 	"result": {
18 		"item": "minecraft:fire_charge",
19 		"count": 3
20 	}
21 }

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

标签用来对方块物品函数分组。minecraft:tick函数标签用来表示函数每游戏刻都执行,minecraft:load 函数标签则用来表示函数在每次世界加载(或重新加载)的时候都运行。

在命名空间文件夹之下新建tags文件夹以创建新的标签。在这个文件夹之下,新建文件夹blocksentity_typesfluidsitemsfunctions。然后,在任意一个文件夹(或它们的子文件夹)之下新建标签文件标签名.json。在游戏中,标签以命名空间ID的格式引用。

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