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