数据包

来自Minecraft Wiki
跳转到导航 跳转到搜索
  关于控制数据包的加载和卸载的命令,请见“命令/datapack”。
本文章所述内容仅适用于Java版
Wiki上有与该主题相关的教程!
Wiki上有与该主题相关的教程!教程:制作数据包教程:安装数据包

数据包(Data Pack)为玩家自定义Minecraft的游戏内容提供了更多新方法。

其中以下内容可被覆盖或添加,但不限于:

对数据包的修改并不等于修改了包含相同逻辑部分的游戏代码。

使用[编辑 | 编辑源代码]

数据包是可被添加到.minecraft/saves/<世界名称>/datapacks/目录下的文件夹或.zip压缩包

在创建新世界界面中添加数据包
添加数据包
  • 在创建新的世界界面中,选择更多选项卡,然后点击数据包按钮并将数据包文件夹或压缩包拖入以选择要载入的数据包。与资源包界面类似,玩家可以方便地在世界生成之前启用数据包或自定义加载顺序。
  • 玩家也可以手动在对应的世界存档文件中添加数据包。数据包文件应添加到世界存档文件的.minecraft/saves/<世界名称>/datapacks/目录下。
加载数据包
  • 在玩家每次通过存档选择界面进入存档后,则游戏将在加载世界的同时尝试加载数据包。
  • 在正在运行的游戏存档中,玩家可使用/reload命令来手动加载数据包内的注册项:战利品表配方进度物品修饰器谓词函数。否则数据包一般不会自动重新加载。
  • 对于剩余的数据包注册项(例如damage_type、​dimension、​dimension_type、​enchantment、​instrument、​jukebox_song、​trim_material、​trim_patternworldgen)的数据必须依赖于世界加载。[1][2][3][4][5]也即,它们都无法直接通过在游戏内输入/reload命令来加载,你必须重新进入世界(或重新启动服务器)。另外,这些注册项的数据文件若出现语法错误等,可能导致进入存档后出现“安全错误”提醒。

注意,要加载的数据包至少应满足以下两个条件,否则将加载失败:

  • 数据包的pack.mcmeta文件被游戏成功检测。
  • 数据包中的所有文件都无任何语法错误。

加载顺序:

  • 若一个世界中包含多个数据包,则这些数据包将根据储存在level.dat中的数据信息按顺序加载,可以通过/datapack命令查看或修改。
禁用数据包
  • 在已经载入的世界中,玩家可以使用命令/datapack disable来手动禁用一个数据包。执行成功后,游戏会自动重新加载一次数据包。
启用数据包
  • 在已经载入的世界中,玩家可以使用命令/datapack enable来手动启用一个已经被禁用了的数据包。执行成功后,游戏会自动重新加载一次数据包。

内容[编辑 | 编辑源代码]

数据包由一系列指定的文件和目录结构组成。在数据包根目录下,必须包含一个pack.mcmeta文件(数据包元数据文件)。该数据将被组织到命名空间中,以不同包的文件相互影响。文件将如下加载:

  • data/<命名空间>/<注册名>/<路径>.json文件以ID<命名空间>:<路径>被加载到<注册名>注册表中。<注册名>路径均可以包含正斜杠(/)以表示子文件夹。
  • 标签将加载data/<命名空间>/tags/<注册名>/<路径>.json文件以添加名为#<命名空间>:<路径><注册名>标签。

文件夹结构[编辑 | 编辑源代码]

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

当根目录中存在一个包含JSON格式数据的pack.mcmeta文件时才能被Minecraft识别为一个数据包。

  • NBT复合标签/JSON对象:根对象。
    • NBT复合标签/JSON对象*pack:存放数据包信息。
      • 字符串NBT列表/JSON数组NBT复合标签/JSON对象*description:一个文本组件,用于表示数据包的描述信息。在创建世界的数据包页面,或光标在/datapack list命令列出的数据包名称上悬停时,会显示此描述。
      • 整型*pack_format:数据包所支持版本的编号。如果此数值不匹配当前游戏版本需要的数值,数据包将显示警告信息,且在加载时需要额外确认。有关数据包版本编号的完整列表,请参阅§ 数据包版本
      • 整型整型数组NBT复合标签/JSON对象supported_formats:(可选)数据包所支持版本的数据包版本编号范围。
        • 若类型为整型:仅支持一个版本,作用同整型pack_format
          若类型为整型数组:支持在某两个版本之间的所有版本。
        • 整型:2个版本编号,表示一个闭区间。指定的范围必须包含整型pack_format所表示的版本。
          若类型为NBT复合标签/JSON对象:支持在某两个版本之间的所有版本。与上标签作用等价。
        • 整型min_inclusive:最低兼容的数据包版本编号。
        • 整型max_inclusive:最高支持的数据包版本编号。
    • NBT复合标签/JSON对象filter:(可选)包过滤器,用于指定数据包要忽略的文件。在NBT列表/JSON数组block内被匹配到的任何模式都将形如其不在该数据包中存在。
      • NBT列表/JSON数组block:模式列表。
        • NBT复合标签/JSON对象
          • 字符串namespace:一个正则表达式,表示要滤除文件的命名空间。若省略则匹配所有命名空间。
          • 字符串path:一个正则表达式,表示要滤除文件的路径。若省略则匹配所有文件。
    • NBT复合标签/JSON对象features:(可选)要启用的实验性内容。注意:如果添加了该字段,则该数据包需要在创建新世界的时候添加,否则在更改旧世界的level.dat前无法添加。
      • NBT列表/JSON数组*enabled:启用的内容,以命名空间ID的方式添加,可用的值有:minecraft:trade_rebalance(村民交易的平衡性调整)、minecraft:redstone_experiments(红石实验性内容)和minecraft:minecart_improvements(矿车改进)。
    • NBT复合标签/JSON对象overlays:(可选)指定要覆盖的部分,即应用在“标准”包内容上的子包。其目录是其自己的资源和data目录(存放于包的根目录下)。
      • NBT列表/JSON数组*entries:覆盖列表。其顺序很重要,列表中的第一个对象将被首先应用。
        • NBT复合标签/JSON对象
          • 整型NBT列表/JSON数组NBT复合标签/JSON对象formats:指定一个版本编号范围,表示该包应在此范围的版本内加载。具体格式与整型整型数组NBT复合标签/JSON对象supported_formats相同。示例:16, [16,17], {"min_inclusive": 16, "max_inclusive": 17}
          • 字符串directory:各版本要覆盖的目录(允许的字符:a-z0-9_-)。

1.21.5原版数据包(/datapack命令显示为[Vanilla(内置)])中的pack.mcmeta文件(你可以在客户端client文件或official server服务端文件中找到):

File file.png:Minecraft中file的精灵图 pack.mcmeta
json
{
    "pack": {
        "description": "The default data for Minecraft",
        "pack_format": 71
    }
}

data[编辑 | 编辑源代码]

data目录下可包含不同的命名空间目录,以存储不同的数据包内容。命名空间的名称只能使用小写英文字母、数字、-_。原版命名空间目录为minecraft,其中可包含了主要的原版数据。

每个进度魔咒函数战利品表画变种谓词配方结构狼变种标签伤害类型可以直接放入到对应的文件夹内,也可以放入到对应的文件夹下的子文件夹内。

在原版游戏中,数据将从两个位置加载:

  • 版本.jar文件中,data/minecraft下的数据内容,即原版数据包(Vanilla Datapack)中的数据。
  • 游戏存档文件中,datapacks/<某数据包名>/data/<某命名空间>下的数据内容,即玩家的自定义数据。
    • 若命名空间名为minecraft,则会尝试覆盖原版数据包中的数据内容。例如:datapacks/test/data/minecraft/banner_pattern/base.json文件将会覆盖原版数据包中的data/minecraft/banner_pattern/base.json文件。
    • 若命名空间名minecraft,则不会覆盖原版数据包中的数据内容(即使与原版数据包命名空间下的文件结构相同)。此情况下,该包中的所有数据都是玩家新增的非原版数据。
    • 若有2个以上的存档数据包中的命名空间名称相同,则会按照存档数据包的加载优先级覆盖相应的数据内容。

数据包版本[编辑 | 编辑源代码]

  关于完整的数据包版本编号列表及相应修改的概述,请见“数据包/版本”。

下表粗略描述了各正式版的数据包版本编号及其数据包内容的变化:

数据包版本
编号 正式版本 标志性/破坏性更改
4 1.131.14.4 加入了初始的数据包版本编号4。
5 1.151.16.1 加入了谓词
6 1.16.21.16.5 自定义世界生成加入了实验性支持。
7 1.171.17.1 /replaceitem命令变为了/item命令。set_damage战利品函数现在需要一个有效的字符串type字段。
8 1.181.18.1 加入了一系列实验性快照中世界生成的新特性。战利品表现在需要一个字符串type字段。移除了对记分板、分数持有者和队伍名的长度限制。
9 1.18.2 加入了实验性数据包加入自定义结构和配置洞穴生成机制的支持。加入了密度函数,对自定义世界生成进行了更新。现在/locate命令第一个参数为已配置的结构,而非一个结构类型,故对于那些成组的结构现在需要使用结构类型标签。例如/locate village现在变为/locate #village
10 1.191.19.3 数据包元数据文件pack.mcmeta现在带有一个NBT复合标签/JSON对象filter字段。以/locate命令合并了/locatebiome,同时改变了其语法。
12 1.19.4 加入了伤害类型。移除了伤害谓词中的所有的布尔型标志,取而代之的是伤害类型标签。生物群系字段字符串precipitation变为布尔型has_precipitation
15 1.201.20.1 改变了告示牌的NBT。例如Text1现在应为front_text.messages[0]。所有在placed_blockitem_used_on_block以及allay_drop_item_on_block进度触发器中的字段,都已经被折叠到位置(location)字段中。重命名alternative谓词为any_of
18 1.20.2 加入了函数宏。NBT中的状态效果现在为命名空间ID而非数值。例如1现在为minecraft:speed
26 1.20.31.20.4 文本组件的解析变得更加严格。重命名grass方块及物品为short_grass记分板可设置显示名称和数字格式。
41 1.20.51.20.6 重命名sweeping魔咒sweeping_edge。改变了item_used_on_block进度触发器的行为。将一些倍率超过127的状态效果的行为使用属性来替代。物品堆叠(Item Stack)相关的非结构化NBT数据被结构化的物品堆叠组件取代。重命名了谓词中的durabilitypotionsnbt以及enchantments字段。配方的合成物现在可以指定物品组件。世界生成数据格式中的整型和浮点型提供器不再包裹于靠近type字段的额外字段value中。加入了一个物品子谓词以及新的战利品函数。
48 1.211.21.1 加入了魔咒数据驱动画变种的数据驱动。重命名物品子谓词中的enchantment字段为enchantments重命名诸如loot_tablestags/items的旧版文件夹名为loot_tabletags/item。移除了火球NBT列表/JSON数组power标签,并将其替换为双精度浮点数acceleration_power。属性现在有单独的命名空间ID字段id,而非一个nameuuid
57 1.21.21.21.3 加入了trial_spawnerinstrument子文件夹以用于配置试炼刷怪笼山羊角乐器。为玩家子谓词加入了NBT复合标签/JSON对象input字段。加入了新的实体子谓词,将进度触发器killed_by_crossbow重命名为killed_by_arrow,并加入了新可选物品谓词字段fired_from_weapon,用于匹配发射箭的物品。加入了配方类型crafting_transmute,移除了配方类型crafting_special_shulkerboxcoloring。魔咒效果damage_item被重命名为change_item_damage,以允许负值。
61 1.21.4 移除了“冬季小更新”内置数据包和winter_drop功能开关。

历史[编辑 | 编辑源代码]

Java版
1.1317w43a加入了数据包。
17w46a加入了/datapack命令,用于控制加载的数据包。
17w48a现在数据包可读取自定义配方。
18w01a崩溃报告中现在会列出启用的数据包。
1.1519w38a加入了predicates文件夹,可以在此处定义战利品表谓词。
pre1数据包版本号更改为5
1.1620w22a稍微修改了数据包的加载机制,防止数据包带来的崩溃。
游戏将会检测严重的数据包问题,比如关键标签的缺失,将会阻止世界的加载。
如果数据包加载失败,那么修改将不会被应用,游戏将会使用旧的数据包。
数据包列表仅在数据包成功加载后才会更改。
服务器添加了--safeMode选项让游戏只加载原版数据包。
pre1现在可以在创建世界之前加载数据包。
数据包现在可以添加和修改维度
1.16.220w28a现在数据包可配置自定义世界生成。
rc1数据包版本号更改为6
1.1720w45apack_version被拆分,数据包和资源包现在使用相互独立的版本数字。
20w46a由于MC-204861,数据包版本号更改为7
加入了item_modifiers子文件夹。
1.1821w37a由于加入了一系列实验性快照中世界生成的新特性,数据包版本号更改为8
1.18.2pre1现在可在实验性数据包中添加自定义结构,即游戏现在可生成并存储由数据驱动的配置的结构。
现在可通过数据包对一些洞穴生成机制进行配置。
由于对数据包加入了以上新功能,数据包版本号更改为9
1.1922w11apack.mcmeta中加入了filter字段,用于按命名空间和正则表达式忽略低优先级数据包中的匹配内容。
由于对数据包加入了以上新功能,数据包版本号更改为10
1.19.322w42a加入了chat_type子文件夹。
加入了datapacks子文件夹,包含用于启用特定功能的原版数据包(功能数据包)。
原版世界生成数据包现在在游戏的jar文件中可见。故诸如dimension_typeworldgen之类的内容都可见。
1.19.423w03a数据包版本号更改为11
23w06a加入了damage_type子文件夹。
数据包版本号更改为12
1.2023w12a数据包版本号更改为13
23w16a数据包版本号更改为14
23w18a数据包版本号更改为15
1.20.223w31a数据包版本号更改为16
数据包现在可以与多个游戏版本兼容。
23w32a数据包版本号更改为17
pre1数据包版本号更改为18
1.20.323w40a数据包版本号更改为19
23w41a数据包版本号更改为20
23w42a数据包版本号更改为21
23w43a数据包版本号更改为22
23w44a数据包版本号更改为23
23w45a数据包版本号更改为24
23w46a数据包版本号更改为25
pre1数据包版本号更改为26
1.20.523w51a数据包版本号更改为27
24w03a数据包版本号更改为28
24w04a数据包版本号更改为29
24w05a数据包版本号更改为30
物品或实体中存储的药水效果不再编码默认值。
24w06a数据包版本号更改为31
24w07a数据包版本号更改为32
24w09a数据包版本号更改为33
24w10a数据包版本号更改为34
加入了banner_patternwolf_variant子文件夹。
24w11a数据包版本号更改为35
24w12a数据包版本号更改为36
24w13a数据包版本号更改为37
24w14a数据包版本号更改为38
pre1数据包版本号更改为39
pre2数据包版本号更改为40
pre3数据包版本号更改为41
1.2124w18a数据包版本号更改为42
加入了enchantment、​enchantment_providerpainting_variant子文件夹。
24w19a数据包版本号更改为43
24w20a数据包版本号更改为44
24w21a数据包版本号更改为45
structures、​advancements、​recipes、​loot_tables、​predicates、​item_modifiersfunctions文件夹重命名为对应的单数形式。
加入了jukebox_song子文件夹。
pre1数据包版本号更改为46
pre2数据包版本号更改为47
pre3数据包版本号更改为48
1.21.224w33a数据包版本号更改为49
加入了instrument子文件夹。
24w34a数据包版本号更改为50
24w35a数据包版本号更改为51
加入了trial_spawner子文件夹。
24w36a数据包版本号更改为52
24w37a数据包版本号更改为53
24w38a数据包版本号更改为54
24w39a数据包版本号更改为55
24w40a数据包版本号更改为56
pre1数据包版本号更改为57
1.21.424w44a数据包版本号更改为58
24w45a数据包版本号更改为59
24w46a数据包版本号更改为60
pre2数据包版本号更改为61
1.21.525w02a数据包版本号更改为62
加入了pig_variant子文件夹。
25w03a数据包版本号更改为63
加入了test_environmenttest_instance子文件夹。
25w04a数据包版本号更改为64
加入了cat_variantfrog_variant子文件夹。
25w05a数据包版本号更改为65
加入了cow_variant子文件夹。
25w06a数据包版本号更改为66
加入了chicken_variant子文件夹。
25w07a数据包版本号更改为67
25w08a数据包版本号更改为68
加入了wolf_sound_variant子文件夹。
25w09a数据包版本号更改为69
25w10a数据包版本号更改为70
pre2数据包版本号更改为71

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

外部链接[编辑 | 编辑源代码]

参考[编辑 | 编辑源代码]

  1. MC-187938 — 漏洞状态为“无效”。
  2. MC-260446 — 漏洞状态为“无效”。
  3. MC-260452 — 漏洞状态为“无效”。
  4. MC-272540 — 漏洞状态为“有意为之”。
  5. MC-273807 — 漏洞状态为“无效”。

导航[编辑 | 编辑源代码]