Skip to content

资源覆盖机制

本页面镜像自
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并添加以下内容:

json
{
	"resource_pack_name": "vanilla",
	"texture_data": {
		"sugar": {
			"textures": "textures/path/to/my/sugar"
		}
	}
}

该定义会与原版item_textures.json合并,覆盖sugar的纹理路径指向。当原版物品调用此简称时,将自动引用你的自定义纹理。 :::

覆盖风险提示

由于附加包采用覆盖机制而非合并机制,不同附加包之间可能存在兼容性问题。例如同时安装两个修改爬行者行为的附加包(一个提升速度,一个增大体型),后加载的包会完全覆盖前者的修改。

这个问题在player.json(资源包或行为包中的)中尤为突出,因为该文件常被用于核心玩法修改。

不可覆盖内容列表

以下内容无法通过上述任何方式覆盖:

  • 原版物品(部分不可覆盖)
  • 原版方块
  • 原版雾效(需新建命名空间的雾效并全局替换引用)

(注:保留英文术语以保持开发概念准确性)