数据包基础
数据包(Data Pack)为玩家自定义Minecraft的游戏内容提供了更多新方法,包括但不限于配置进度、配方、战利品表、魔咒、伤害类型、生物变种和世界生成等。对数据包的修改并不等于修改了包含相同逻辑部分的游戏代码。
建议在你在看完本站的数据包制作文档可以学会查阅 Minecraft Wiki 文档。
什么是数据包?
Section titled “什么是数据包?”在每个版本的根目录下,都会有一个以版本名为名称的 jar 文件,存放着游戏的资源、行为等,而数据包与此文件目录有着相同的结构,负责覆盖原版 jar 文件中 data 目录的游戏行为数据。
一个数据包的结构如下:
数据包根目录/├── pack.mcmeta # 数据包元数据,包含版本号和描述├── pack.png # 数据包图标,64x64 像素└── data/ └── <命名空间>/ ├── advancements/ # 玩家进度 / 成就定义文件目录 ├── banner_pattern/ # 旗帜图案样式文件目录 ├── cat_variant/ # 猫的外观变种文件目录 ├── chat_type/ # 聊天类型文件目录 ├── damage_type/ # 伤害类型文件目录 ├── dimension/ # 维度文件目录 ├── dimension_type/ # 维度环境参数文件目录 ├── enchantment/ # 附魔效果文件目录 ├── functions/ # 命令函数文件文件目录 ├── frog_variant/ # 青蛙的外观变种文件目录 ├── instrument/ # 山羊号角音效文件目录 ├── jukebox_song/ # 唱片音乐曲目文件目录 ├── loot_tables/ # 掉落物和战利品配置文件目录 │ ├── archaeology/ # 考古战利品文件目录 │ ├── blocks/ # 方块掉落文件目录 │ ├── chests/ # 宝箱战利品文件目录 │ ├── entities/ # 实体掉落文件目录 │ └── gameplay/ # 游戏玩法战利品文件目录 ├── predicates/ # 条件判断逻辑文件目录 ├── recipes/ # 合成 / 冶炼配方文件目录 ├── structures/ # 建筑结构 NBT 文件目录 ├── tags/ # 各类分组标签文件目录 │ ├── blocks/ # 方块标签文件目录 │ ├── entities/ # 实体标签文件目录 │ ├── fluid/ # 流体标签文件目录 │ ├── functions/ # 函数标签文件目录 │ ├── game_events/ # 游戏事件标签文件目录 │ ├── items/ # 物品标签文件目录 │ └── worldgen/ # 世界生成标签文件目录 ├── trim_material/ # 盔甲纹饰材料文件目录 ├── trim_pattern/ # 盔甲纹饰图案文件目录 ├── wolf_variant/ # 狼的外观变种文件目录 └── worldgen/ # 世界生成配置文件目录 ├── biome/ # 生物群系定义文件目录 ├── configured_carver/ # 地形雕刻器文件目录 ├── configured_feature/# 世界特征配置文件目录 ├── density_function/ # 地形密度函数文件目录 ├── noise/ # 噪声参数文件目录 ├── noise_settings/ # 噪声整体设置文件目录 ├── placed_feature/ # 特征放置规则文件目录 ├── processor_list/ # 结构处理器文件目录 ├── structure/ # 结构生成定义文件目录 ├── structure_set/ # 结构生成集合文件目录 └── template_pool/ # 结构模板池文件目录在编写数据包时,仅创建和编写需要的文件和目录即可。
了解 JSON
Section titled “了解 JSON”数据包的编写要用到 JSON 文件。在开始之前,你需要了解 JSON 格式。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于数据传输与存储。它以键值对的形式组织数据,结构清晰、可读性强,并且与多种编程语言高度兼容。
JSON 数据类型与格式
Section titled “JSON 数据类型与格式”JSON 支持的数据类型包括:{} 对象、[] 数组、"" 字符串、number 数值、true / false 布尔值。
- 对象:由
{}包裹,是一个无序的键 / 值对集合。每个键(Key)后跟一个冒号:,多个键值对之间使用逗号,分隔。 - 数组:由
[]包裹。 - 命名规则:键名必须被双引号
""包裹。 - 布尔值:表示“是”或“否”,填写
true或false。
例如,关于柏茯灵的数据可以用以下 fovlin.json 文件表示:
{ "name": "柏茯灵", "identity": "Developer", "is_human": true, "skills": ["Data Pack", "Linux", "Minecraft"]}如上表示了关于 Fovlin 的数据。
了解命名空间:ID
Section titled “了解命名空间:ID”命名空间ID主要由以下两部分组成:
-
命名空间(Namespace):一个字符串,用于标识资源的唯一性。游戏的默认命名空间为
minecraft,另外Realms也使用单独的命名空间realms。 -
路径(Path):一个字符串。在数据包中,一般也反应了该资源的文件路径。有时也仅作为一种标识名。
在转换为字符串形式时,命名空间和路径之间使用:作为分隔符。
如原版 MC 中的苹果,命名空间ID为 minecraft:apple,原版主世界维度命名空间ID为 minecraft:overworld,数据包中定义的自定义维度命名空间ID则为 <命名空间>:<维度名称>
这意味着你也可以通过创建 minecraft 原版命名空间来修改原版的一些数据/行为。
数据包根目录/├── pack.mcmeta # 数据包元数据,包含版本号和描述├── pack.png # 数据包图标,64x64 像素└── data/ └── <命名空间>/ └── ...现假设创建一个名为 floating_islands 的数据包,为原版追加浮空岛维度。
创建一个目录作为根目录,取名 floating_islands。
创建并编辑元数据文件
Section titled “创建并编辑元数据文件”在根目录下一个名为 pack.mcmeta 的文件,以及一个名为 data 的目录。
在 data 目录下创建目录 minecraft 这将引用原版的命名空间,你也可以自定义命名空间并创建维度,此处自定义 example 命名空间作为演示。
{ "pack": { "min_format": 0, "max_format": [100, 0], "description": "Another world", "supported_formats": [0, 100], "pack_format": 100 }}其中各键的作用详见 Minecraft 中文 Wiki 数据包#数据包元数据。
创建维度定义文件
Section titled “创建维度定义文件”创建新维度需要在 floating_islands/data/example/ 目录下创建 dimension 目录,并创建以维度名称为命名的 JSON 文件。
{ "type": "minecraft:overworld", "generator": { "type": "minecraft:noise", "settings": "minecraft:floating_islands", "biome_source": { "type": "minecraft:multi_noise", "preset": "minecraft:overworld" } }}其中各键的作用详见 Minecraft 中文 Wiki 维度定义格式。
创建维度类型文件
Section titled “创建维度类型文件”定义维度中的一些规则,需要在 floating_islands/data/example/ 目录下创建 dimension_type 目录,并创建以维度名称为命名的 JSON 文件。
{ "ultrawarm": false, "natural": true, "coordinate_scale": 1, "has_skylight": true, "has_ceiling": false, "ambient_light": 0, "monster_spawn_light_level": 0, "monster_spawn_block_light_limit": 0, "piglin_safe": true, "bed_works": true, "respawn_anchor_works": true, "has_raids": true, "logical_height": 512, "min_y": -256, "height": 512, "infiniburn": "#minecraft:infiniburn_overworld", "effects": "minecraft:overworld"}其中各键的作用详见 Minecraft 中文 Wiki 维度类型。
编辑噪声设置文件
Section titled “编辑噪声设置文件”原版中已经预设 floating_islands 噪声设置参数,直接在 floating_islands/data/example/dimension/floating_islands 文件中的 generator.settings 处引用 minecraft:floating_islands 原版噪声设置的命名空间ID即可。
如果执意自定义维度中的地形生成规则,需要在 floating_islands/data/example/ 目录下创建 worldgen 目录,并创建 noise_settings 目录,在此目录下创建以维度名称为命名的 JSON 文件,在 floating_islands/data/example/dimension/floating_islands 文件中的 generator.settings 处引用 example:<维度名称>。
关于噪声设置文件格式详见 Minecraft Wiki 噪声设置
整个文件的目录结构如下
floating_islands └─data └─example ├─dimension └─dimension_type随后可以打开游戏-创建新世界-选择数据包,将整个 floating_islands 文件夹复制到目标文件夹,在左侧栏中选择启用,开始游戏,使用指令进入此维度。
execute in example:floating_islands run tp ~ 128 ~正确的打包方式为
-
右键创建新压缩(zipped)文件夹
-
选中数据包根目录下的所有文件,复制
-
选择新建的压缩文件夹,粘贴
-
重命名压缩文件夹为你想要的名字
至此打包完成!