本站文本内容除另有声明外,转载时均必须注明出处。(详情…本站文本内容除另有声明外,转载时均必须注明出处。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。需要管理员的协助?在管理员告示板留言也许可以帮到您。

We are currently performing an upgrade to our software. This upgrade will bring MediaWiki from version 1.31 to 1.33. While the upgrade is being performed on your wiki it will be in read-only mode. For more information check here.

教程/制作数据包

来自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文件。

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

FileExtensions.png

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

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

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

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

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

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


 pack_format可以是任何数字,因为它目前没有被使用。但建议设为1以免未来会使用该数值。

 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),称为蛇形命名法。

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

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

例如,如果有两个数据包为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的格式引用。

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