# 理解附加包的结构

接下来在本节中,我们将着重且正式介绍前文中已经出现过多次的附加包Add-on)的概念。

# 附加包的概念

附件包这一概念由是微软引入我的世界开发,在我的世界中国版中,网易沿用了这一概念同样作为中国版作品的代名词。从本质上看,国际版和中国版的附加包性质是一样的。附加包就是一个带有一个清单文件Manifest File)的能够通过基岩引擎Bedrock Engine)对我的世界做出修改的模组Mod),一般是以一个文件夹、一个压缩包或者某种特殊格式的加密文件出现。

基岩引擎就是我的世界游戏读取并应用附加包的一套接口和程序。我们只要按照规定的格式编写附加包,引擎就不会报错。而清单文件则是一个被称作pack_manifest.json或者manifest.json的文件,用于引领整个附加包的内容,同时方便基岩引擎了解附加包的类型,使其能够知道应选择何种接口来对接这个附加包。

从上述定义可以看出,附加包根据清单文件中的规定可以分为不同的类型。在中国版中,我们主要使用的便是资源包Resource Pack)和行为包Behavior Pack)两种附加包。

  • 资源包:资源包是一种用来存放客户端资源的附加包,其中存放的大部分内容都是用于客户端显示、渲染、计算的内容。比如,资源包中常放着方块、物品、实体等物体的纹理,有些资源包中还存放着渲染用的自定义的材质和着色器。对于和行为包一起制作用于特定玩法的一些资源包,还存放着各种方块、物品、实体等元素的客户端定义文件。
  • 行为包:顾名思义,行为包主要用来存放各种元素、物体的行为。同时行为包还存放着各种用于逻辑计算的表、脚本,决定了游戏的服务端如何运作。比如,行为包中一般用来存放玩法的方块、物品、实体等元素的服务端定义文件,以及交易表、战利品表、维度、群系、地物等用于游戏服务端的数据或逻辑。模组API编写的脚本也存在于行为包中。

国际版和中国版的附加包的格式有相同之处,也有不同之处,这里我们着重介绍中国版的附加包格式。

# 资源包结构

RESOURCE_PACK
│  biomes_client.json # 客户端生物群系配色定义文件
│  blocks.json # 客户端方块属性定义文件,包括纹理、各向异性和方块形状等
│  pack_icon.jpg # 资源包的图标,也可以为.png或.tag格式
│  pack_manifest.json # 资源包的清单文件,也可以单纯地为manifest.json
│  sounds.json # 声音定义文件,将声音事件链接到对应的系统音效类型上
│  
├─animations # 客户端动画定义
├─animation_controllers # 客户端动画控制器定义,主要用于实体骨骼动画
├─attachables # 附着物定义
├─effects # 中国版特效定义
├─entity # 国际版客户端实体定义
├─fogs # 迷雾定义
├─font # 字体图片及其定义
├─items # 国际版客户端物品定义
├─materials # 材质定义
├─models # 模型定义,包括了几何、骨架和网格等
├─netease_items_res # 中国版客户端物品定义
├─particles # 国际版粒子定义
├─render_controllers # 渲染控制器定义
├─shaders # 着色器
├─sounds # 声音,包含了声音文件和声音事件的定义文件
├─texts # 本地化
├─textures # 纹理(资源包必须存在的文件夹)
└─ui # JSON UI定义

# 行为包结构

BEHAVIOR_PACK
│  pack_icon.jpg # 行为包的图标,也可以为.png或.tag格式
│  pack_manifest.json # 行为包的清单文件,也可以单纯地为manifest.json
│  
├─animations # 服务端动画定义
├─animation_controllers # 服务端动画控制器定义,主要用于实体命令动画
├─biomes # 国际版服务端生物群系定义
├─BoxData # 中国版素材
├─config # 中国版模组配置文件
├─customBook # 中国版自定义书
├─blocks # 国际版服务端方块定义
├─entities # 国际版服务端实体定义(行为包必须存在的文件夹)
├─features # 国际版地物定义
├─feature_rules # 国际版地物规则定义
├─functions # 函数
├─Galaxy # 中国版逻辑编辑器的宏和模板
├─items # 国际版服务端物品定义
├─loot_tables # 战利品表定义
├─netease_biomes # 中国版服务端生物群系定义
├─netease_blocks # 中国版服务端方块定义
├─netease_dimension # 中国版维度定义
├─netease_effects # 中国版状态效果定义
├─netease_enchants # 中国版魔咒定义
├─netease_features # 中国版特征定义
├─netease_feature_rules # 中国版特征规则定义
├─netease_group # 中国版物品分组定义
├─netease_items_beh # 中国版服务端物品定义
├─netease_micro_blocks # 中国版微缩方块定义
├─netease_recipes # 中国版配方定义
├─netease_tab # 中国版物品分类/物品栏分页定义
├─Parts # 中国版零件定义及其脚本
├─Presets # 中国版预设定义
├─recipes # 国际版配方定义
├─Script_xxx # 中国版的各类Python脚本
├─spawn_rules # 生成规则定义
├─storyline # 中国版逻辑编辑器的逻辑文件
├─structures # 结构
├─texts # 本地化
└─trading # 交易定义

以上为完整的资源包和行为包的文件夹模板框架。大部分资源包和行为包无需拥有以上全部的文件夹,只须在需要的时候建立对应的文件夹和相关的文件即可。在上述所有文件中,只有清单文件pack_manifest.jsonmanifest.json)是必须正确存在的,这关系到一个附加包是否能被游戏正常识别。

# 资源包、纹理包和光影包的区别

为了避免大家对各种概念的混淆,这里着重强调一下资源包纹理包Texture Pack,旧译材质包)和光影包Shader Pack)的区别。

前面我们已经介绍了,资源包就是一种附加包的类型,一般包含着纹理文件、声音文件、着色器文件、各种客户端的实体、物品、方块定义文件中的全部或者一部分。这种包我们统称为资源包。

而纹理包(旧译材质包)则是指那些基本上只有纹理Texture)贴图文件的资源包。一般的纹理包都主要用于修改原版纹理,更改原版游戏的外观,使游戏画风焕然一新。

光影包则是指主要包含着色器Shader)文件的资源包,有些光影包还包含一些自定义材质(Material),或暴露出一些纹理(Texture)接口供其他纹理包使用(比如这段时间很火的四合一PBR贴图规则接口)。光影包主要用于改变游戏的渲染效果,同样的纹理在不同的渲染效果下显示的样貌和状态是不同的。阴影效果、水面反射、体积云雾都是光影包能够实现的特效。

https://nie.res.netease.com/r/pic/20211104/69055361-2e7a-452f-8b1a-f23e1262a03a.jpg

入门

10分钟

附加包的概念

资源包结构

行为包结构

资源包、纹理包和光影包的区别