此特性为Java版独有。
本教程介绍如何制作数据包。
数据包允许玩家添加及修改函数、战利品表、世界结构、进度、合成、标签、维度和谓词等Minecraft游戏内容。
在制作或发布数据包时,你不应该:
要创建数据包,请首先找到世界文件夹中的datapacks
文件夹。要查找世界文件夹,请在游戏目录(默认情况下为.minecraft)中找到saves
文件夹。
world
文件夹。打开datapacks
文件夹后,创建一个文件夹并打开。文件夹名即是数据包名,可以任取,但不能含有汉字。
打开新文件夹后要做的第一件事是创建pack.mcmeta
文件。这样Minecraft才能识别该数据包。
参见: 数据包§pack.mcmeta
在刚刚创建的文件夹里新建一个名为pack.mcmeta
的纯文本文件。
重命名时,请确保文件扩展名为.mcmeta
而非.txt
。也即,你可能要更改其扩展名。你可能会收到警告:如果改变文件扩展名,可能会导致文件不可用。这表明,你已正确重命名pack.mcmeta
文件。
如果你使用的是Microsoft Windows操作系统并且看不到文件扩展名,对于Windows 11,可以在文件资源管理器的“查看”→“显示”菜单中找到“文件扩展名”选项并开启;对于Windows 8、Windows 8.1或Windows 10,可以通过转到其中的“查看”菜单并勾选“文件扩展名”复选框来启用它。
对于其他Windows版本,可以取消勾选“文件夹选项”中的“隐藏已知文件类型的扩展名”选项。
在文件夹选项中设置显示文件扩展名
理论上任何文本编辑器都可以编辑pack.mcmeta,但建议文本编辑器支持JSON。JSON是mcmeta
文件和数据包中大多数其他文件使用的格式。大多数文本编辑器不会将mcmeta
扩展名识别为JSON文本。因此,你需要手动配置编辑器。
在你选择的文本编辑器中打开pack.mcmeta
并粘贴或键入以下内容:
{ "pack": { "pack_format": X, "description": "教程数据包" } }
对于pack.mcmeta
,可在数据包的描述和名称中使用“§”符号(Minecraft格式化代码)。
你应该根据你的Minecraft版本替换“pack_format”
后面的X
。
“pack_format”
需为:
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
description可以使用字符串或原始JSON文本。当你将鼠标悬停在/datapack list
列出的数据包名或进入创建世界的数据包界面时,这段内容将会显示。
这个文件是用JSON编写的!本教程没有详细介绍JSON格式,但要注意,不要忘记引号、冒号、圆括号和方括号。缺少任意一个都可能导致你的数据包无法正常工作!你可以使用JSON验证器检查你的文件,例如JSONLint。
如果你创建了pack.mcmeta
,尝试在游戏中测试它。打开Minecraft,进入世界或输入/reload
(如果你已经进入了世界),然后输入/datapack list
。此时应该出现两条信息:第一条是[vanilla]
,第二条应该是[file/(你的数据包的名称)]
。当你将鼠标悬停在数据包名称上时,你应该会看到数据包的描述,即你在pack.mcmeta
的 description中所写的内容。
如果列表中没有你的包,请确保pack.mcmeta
的语法正确且已保存。看看有没有缺少大括号{}
、逗号,
、冒号:
,双引号""
,方括号[]
。请记住,对于每个左大括号、双引号或方括号,必须有一个右大括号、双引号或方括号与之配对。
参见: 命名空间ID
在数据包文件夹中创建一个名为data
的文件夹,与pack.mcmeta
在同一个文件夹下。在data
文件夹中,须创建至少一个文件夹作为命名空间。
数据包中的条目以命名空间:路径
作为命名空间ID。相应的文件将位于data/命名空间/(数据类型)/路径.(后缀)
。请注意,路径中的/
字符将转换为目录分隔符。
例如:
dummy:foo_proof/bar
的物品标签将定位到data/dummy/tags/item/foo_proof/bar.json
。foo:handler/bar_call
的函数将定位到data/foo/functions/handler/bar_call.mcfunction
。数据包中的命名空间、路径、文件夹名和文件名应仅包含以下符号:
0123456789
数字abcdefghijklmnopqrstuvwxyz
小写字母_
下划线-
连字号(减号)/
正斜杠(不能用于命名空间).
句号(不能用于命名空间)首选命名格式为以下划线隔开的小写字母单词(lower_case_with_underscores
),称为蛇形命名法(lower snake case)。
游戏中的大多数对象都有一个命名空间(namespace),以防止潜在的内容冲突或无意的覆盖。
例如,如果有两个数据包为Minecraft分别添加了一个新的小游戏机制,并且两者都有名为start
的函数。如果没有命名空间,这两个函数就会冲突,小游戏也会被破坏。但如果它们分别有game_1
和game_2
两个不同的命名空间,则函数名分别为game_1:start
和game_2:start
,就不会冲突了。
大多数情况下Minecraft的命名空间ID需要命名空间的存在,如/function
命令,路径和命名空间缺一不可。若命名空间未指定,则默认其为minecraft
。
添加新内容时,请一定使用你自己的命名空间。仅当需要覆盖其他东西,或追加标签的时候,才使用其他命名空间。例如,游戏本体使用minecraft
命名空间。仅当数据包需要覆盖原版数据,或将内容添加到原版标签时才会使用此命名空间。
主条目: Java版函数 参见: 教程/命令方块
函数是一系列顺次执行的命令。
要创建新函数,应在命名空间
文件夹中新建functions
文件夹。然后,在functions
(或其子文件夹)中新建函数文件(函数名).mcfunction
,这就是你的函数文件。你的函数会被游戏命名为(命名空间):(函数名称)
,或者当位于子文件夹时为(命名空间):(子文件夹1)/(子文件夹2)/…/(名称)
。
一行命令需要单独出现在一行,行首可以有若干空格或缩进。在函数文件中,命令不以/
开头。
作为分隔,你可以留下空白行。你也可以使用#
在行首以引起一段单行注释。#
必须在一行的最前面,其前面不应有空格。
在实际运行函数时,空白行、注释均会被忽略。
在游戏规则sendCommandFeedBack
为true且每次以玩家的身份运行函数(玩家主动运行或通过/execute
)时,均会返回一行“已执行函数example:test中的x条命令”。
主条目: 战利品表
当一个生物死亡时,Minecraft根据战利品表决定其掉落物。当首次开启自然生成的容器(例如箱子)时,Minecraft也根据战利品表生成其中的战利品。可以通过/loot
命令调用它们。
在命名空间文件夹中新建loot_tables
文件夹以创建一个新的战利品表。然后,在loot_tables
(或其子文件夹)中新建战利品表文件战利品表名.json
。在游戏中,战利品表以命名空间ID的格式引用。
作为参考,这里给出牛的战利品表的一个样例:
{ "type": "minecraft:entity", "pools": [ { "rolls": 1.0, "bonus_rolls": 0.0, "entries": [ { "type": "minecraft:item", "functions": [ { "function": "minecraft:set_count", "count": { "type": "minecraft:uniform", "min": 0.0, "max": 2.0 }, "add": false }, { "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, "max": 1.0 } } ], "name": "minecraft:leather" } ] }, { "rolls": 1.0, "bonus_rolls": 0.0, "entries": [ { "type": "minecraft:item", "functions": [ { "function": "minecraft:set_count", "count": { "type": "minecraft:uniform", "min": 1.0, "max": 3.0 }, "add": false }, { "function": "minecraft:furnace_smelt", "conditions": [ { "condition": "minecraft:entity_properties", "predicate": { "flags": { "is_on_fire": true } }, "entity": "this" } ] }, { "function": "minecraft:looting_enchant", "count": { "type": "minecraft:uniform", "min": 0.0, "max": 1.0 } } ], "name": "minecraft:beef" } ] } ] }
如果你想要查找原版战利品表,或是学习其中标签的具体含义,请参见战利品表。
结构可以用于结构方块或拼图方块,也可以覆盖Minecraft中原版结构的外观。结构以NBT格式存储,你可以使用结构方块创建NBT文件。MCEdit之类的第三方软件也可以导出NBT文件。
在命名空间文件夹中建立structures
文件夹以向数据包添加一个新的结构。然后,把你的NBT结构文件放在structures
文件夹(或它的子文件夹)之下。在游戏中,结构以命名空间ID的格式引用。
主条目: 进度
玩家通过完成进度来获得奖励。
在命名空间文件夹中建立advancements
文件夹以创建一个新的进度。然后,在这个文件夹(或它的子文件夹)之下新建进度文件 进度名.json
。在游戏中,进度以命名空间ID的格式引用。
{ "parent": "namespace:example/advancement/root", "display": { "icon": { "item": "minecraft:wooden_sword" }, "title": "First blood", "description": "to kill a monster.", "announce_to_chat": true, "show_toast": true, "frame": "task" }, "criteria": { "first_kill_monster":{ "trigger":"player_killed_entity", "conditions": { "entity":{ "type":"#namespace:target", "nbt": "{Tags:[\"change\"]}" } } } } }
parent
键是可选的,它提供了该进度的上游进度,当该进度是根进度时无需此键。
display
键是可选的,它描述了该进度在进度界面(Esc点击进度
按钮打开,或直接在游戏中按下L打开)的显示方法。不填写将不会显示在进度界面。
criteria
键是必需的,它描述了该进度可能需要达成的条件。
除此之外,还有可选键requirements
、rewards
。
主条目: 配方
玩家根据配方合成、烧炼物品。
在命名空间文件夹中建立recipes
文件夹以创建一个新的配方。然后,在这个文件夹(或它的子文件夹)之下新建配方文件 配方名.json
。在游戏中,配方以命名空间ID的格式引用。
参见: 配方§minecraft:crafting_shaped
第一种常见的配方类型是有序配方。
{ "type": "minecraft:crafting_shaped", "pattern": [ "123", "231", "312" ], "key": { "1": { "item": "(物品命名空间ID)" }, "2": { "item": "(物品命名空间ID)" }, "3": { "item": "(物品命名空间ID)" } }, "result": { "item": "(物品命名空间ID)", "count": 5 } }
由"type": "crafting_shaped"
可以看出,这是一个有序配方。
pattern
是一个列表,描述了配方的形状,最多包含3个字符串。一个字符串表示一横行,每个字符串最多含有3个字符,一个字符表示合成网格中的一个格子。字符串不必非得是3个,每个字符串也不一定要3个字符,但是每个字符串中的字符个数必须是相等的。空格表示空格子。
key
是一个对象,规定了pattern
中的字符所代表的物品。可以用item
后接物品ID,也可以用tag
后接数据包标签。
result
是一个对象,其中item
规定了最终合成的是何种物品。count
是一次合成成品的数量。
以下是活塞的原版合成配方,供参考:
{ "type": "minecraft: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" } }
参见: 配方§minecraft:crafting_shapeless
无序配方是另一种常见的配方类型。
{ "type": "crafting_shapeless", "ingredients": [ { "item": "(物品命名空间ID)" }, { "item": "(物品命名空间ID)" }, [ { "item": "(物品命名空间ID)" }, { "item": "(物品命名空间ID)" } ] ], "result": { "item": "(物品命名空间ID)", "count": 5 } }
由"type": "crafting_shapeless"
可以看出,这是一个无序配方。
无序配方没有pattern
。ingredients
是一个列表,列出合成所需的原料。原料可以以任何形状排列在合成网格中。ingredients
中如果出现列表,则表明该列表中的任何一种物品都可以使用,如下面火焰弹配方中,煤和木炭都可以使用。
以下是火焰弹的原版合成配方,供参考:
{ "type": "minecraft:crafting_shapeless", "ingredients": [ { "item": "minecraft:gunpowder" }, { "item": "minecraft:blaze_powder" }, [ { "item": "minecraft:coal" }, { "item": "minecraft:charcoal" } ] ], "result": { "item": "minecraft:fire_charge", "count": 3 } }
也可自定义烧炼配方。
{ "type": "(smelting、blasting和smoking之一,分别对应熔炉、高炉和烟熏炉的烧炼配方)", "category": "(配方所属的类别)", "ingredient": { "item": "(物品命名空间ID)" }, "result": "(物品命名空间ID)", "experience": 0.35, "cookingtime": 200 }
这是一个烧炼配方的大致示例。
category
用于指定该配方在配方书中所属的类别,可选值为blocks
、food
和misc
。ingredient
用于指定你要烧炼的物品。result
将指定烧炼产品。在experience
中,你可以选择烧炼所获得的经验值,在cookingtime
中,你可以选择该物品熔炼所需的时间,在本例中为10秒(200刻=10秒)。如果经验值有小数部分,则表示有小数部分的概率获得额外的1经验值。如上例,0.35表示有35%概率获得1经验值,剩下65%不获得。
这是默认的钻石矿石烧炼配方:
{ "type": "minecraft:smelting", "category":"misc", "group": "diamond", "ingredient": { "item": "minecraft:diamond_ore" }, "result": "minecraft:diamond", "experience": 1.0, "cookingtime": 200 }
主条目: 标签
标签用来对方块、物品、实体和函数分组。minecraft:tick
函数标签用来表示函数每游戏刻都执行,minecraft:load
函数标签则用来表示函数在每次世界加载(或重新加载)的时候都运行。
在命名空间文件夹之下新建tags
文件夹以创建新的标签。在这个文件夹之下,新建文件夹blocks
、items
和functions
。然后,在任意一个文件夹(或它们的子文件夹)之下新建标签文件标签名.json
。在游戏中,标签以命名空间ID的格式引用。
本段落介绍的是战利品表谓词。关于数据包中的其他谓词,请见“
谓词(消歧义)”。
战利品表谓词(Predicate)是技术性JSON文件,被用作战利品表、命令/execute if predicate
和predicate
目标选择器参数的条件。
在命名空间文件夹之下新建predicates
文件夹以创建新的谓词。然后,在这个文件夹(或它的子文件夹)之下新建标签文件谓词名.json
。在游戏中,标签以命名空间ID的格式引用。
主条目:自定义生物群系
生物群系(Biome)是JSON文件,用于指定一个世界包含的所有生物群系。他允许你为世界添加新的生物群系(注:正常世界中将不会出现新增的生物群系,可以使用WorldEdit或添加新维度或指令/fillbiome的方法加入)
生物群系文件储存在数据包中的/data/(命名空间)/worldgen/biome
路径的JSON文件中
在命名空间文件夹内创建一个名为worldgen的文件夹,再在其中创建一个名为biome的文件,之后在其中创建一个名为群系名.json
的文件。文件格式详见自定义生物群系
主条目: 自定义维度
维度(Dimension)是JSON文件,用于指定一个世界包含的所有维度。
维度的特殊之处在于它们只在minecraft
命名空间中工作。在minecraft
命名空间文件夹中创建一个维度文件夹以创建新的维度,然后创建一个名为维度名.json
的文件。建议将维度文件放在与你的命名空间同名的单独文件夹中:
minecraft:(命名空间)/维度名.json
。
自定义维度在游戏中可使用/execute in minecraft:维度名
访问。
主条目: 自定义维度§维度类型
维度类型(Dimension Type)是JSON文件,用于自定义一个新的维度类型。
通过它,你可以自定义在一个维度中的环境光照、高度限制等。它需要放在data/<命名空间>/dimension_type/<维度类型名称>.json
中。
自定义维度可以使用自定的维度类型,调整自定义维度的type
键即可。
数据包 | |||
---|---|---|---|
组件 |
| ||
数据包 |
| ||
教程 |
|
教程(作下划线标记的教程为中文独有教程) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
网站题目:创新互联MinecraftWiki教程:入门[]
标题网址:http://www.mswzjz.cn/qtweb/news44/461944.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能