资源覆盖机制
本页面镜像自 BedrockWiki
根据原始项目协议授权。本文经过AI翻译处理,如有内容遗漏,可以提交PR进行补充。
附加包层级系统
附加包系统采用分层架构,每个资源包/行为包都会叠加在先前加载的包之上。即使你只添加了一个自定义包,系统也会默认加载隐式的原版包。当创建自定义内容时,这些内容将完全继承原版文件的所有权限。
访问原版文件
这种分层结构非常实用,它允许我们无需将原版文件复制到附加包中即可直接调用。例如你可以直接调用blocks/stone.png
作为自定义实体的纹理,无需复制文件即可直接生效。这种特性在模型、渲染控制器、音效等资源的调用中尤为便利。
若原版资源发生更新(例如JAPPA更新了石头纹理),你的附加包也会同步获得更新,因为你的资源始终动态关联着原版资源。
请尽可能使用这种分层调用机制。如果不需要复制粘贴原版资源,就不要进行冗余操作。
WARNING
绝对禁止直接复制原版资源包/行为包进行修改。这会导致附加包体积异常臃肿,并严重影响运行性能。正确做法是新建空白附加包,仅复制需要覆盖的特定文件。
资源覆盖方式
通过包层级系统,我们可以通过创建相同路径或相同标识符的文件来覆盖原版资源。新的文件将完全替代原版文件,从而实现纹理替换、音效修改、实体行为调整等功能。
WARNING
不同类型的资源需要采用不同的覆盖方式,请仔细确认每种资源的覆盖机制!
路径覆盖法
对于通过路径引用且没有标识符的资源,只需在相同路径下创建新文件即可覆盖。以下资源类型适用此方式:
- 游戏指令
- 战利品表
- 纹理贴图
- 音效文件
- 交易表
此方式会完全替换原文件内容。
TIP
示例:要替换红石矿石纹理,只需在textures/blocks/redstone_ore.png
路径放置新纹理文件即可。
标识符覆盖法
对于通过标识符定义的资源,只需创建具有相同标识符的文件(无论路径如何)即可覆盖。以下资源类型适用此方式:
- 行为包实体
- 资源包实体
- 动画
- 模型
- 动画控制器
- 生成规则
- 合成配方
- 粒子效果
- 渲染控制器
此方式会完全替换原文件内容。
TIP
示例:要提升恶魂生命值,需要创建包含minecraft:ghast
标识符的新实体行为文件,并完整定义恶魂的所有行为组件。
注意:实体文件不会自动合并,必须首先完整复制原版恶魂行为文件,再进行生命值修改。仅创建包含高生命值组件的minecraft:ghast
文件会导致功能异常。
注册表覆盖法
部分资源通过注册表文件进行管理,这类文件具有合并特性而非完全覆盖。这意味着你无需复制原版内容,只需创建新的定义即可覆盖特定条目。
以下注册表文件支持此方式:
- 所有UI文件
- 所有语言文件
item_textures.json
flipbook_textures.json
terrain_textures.json
sounds.json
music_definitions.json
sound_definitions.json
TIP
示例:通过注册表覆盖法修改糖的纹理,只需新建item_textures.json
并添加以下内容:
{
"resource_pack_name": "vanilla",
"texture_data": {
"sugar": {
"textures": "textures/path/to/my/sugar"
}
}
}
该定义会与原版item_textures.json
合并,覆盖sugar
的纹理路径指向。当原版物品调用此简称时,将自动引用你的自定义纹理。 :::
覆盖风险提示
由于附加包采用覆盖机制而非合并机制,不同附加包之间可能存在兼容性问题。例如同时安装两个修改爬行者行为的附加包(一个提升速度,一个增大体型),后加载的包会完全覆盖前者的修改。
这个问题在player.json
(资源包或行为包中的)中尤为突出,因为该文件常被用于核心玩法修改。
不可覆盖内容列表
以下内容无法通过上述任何方式覆盖:
- 原版物品(部分不可覆盖)
- 原版方块
- 原版雾效(需新建命名空间的雾效并全局替换引用)
(注:保留英文术语以保持开发概念准确性)