覆盖资源
附加包分层¶
附加包系统是分层构建的,每个包都是在之前的包之上添加的。即使你只添加了一个包,始终会有一个隐含的“原版”包被添加。当你添加自定义内容时,这些内容将可以完全访问所有原版文件。
访问原版文件¶
这种分层结构非常有用,因为它允许我们访问原版中的文件,而无需将它们复制粘贴到我们的附加包中。例如,你可以访问blocks/stone.png
而无需将其移动到你的附加包中!只需将其设置为你的自定义实体的纹理——它将开箱即用。这对于模型、渲染控制器或声音等内容特别有用。
如果原版资源发生变化,例如如果JAPPA更新了石头纹理,你的附加包也会收到更新,因为你依赖的是实际的动态原版资源。
你应该尽可能多地使用这种分层系统。如果你不需要将某些东西复制粘贴到你的附加包中,就不要这样做。
警告
在原版资源/行为包的副本中制作附加包是绝对不可以的。这将使你的附加包下载量极大,并降低性能。始终从一个空白的附加包开始,然后复制粘贴你想要覆盖的文件。
覆盖资源¶
包分层还允许我们通过与原版相同的路径或标识符来覆盖原版资源。我们的新文件将替换原版中使用的文件,使我们能够更改纹理、声音、实体行为等。
警告
不同的资源有不同的覆盖方法,因此请务必为每种类型使用正确的方法!
按路径覆盖¶
通过路径引用且没有标识符的资源可以通过简单地将新资源放置到相同路径中来覆盖。以下内容可以通过这种方式覆盖:
- 函数
- 战利品表
- 纹理
- 声音
- 交易表
当你覆盖这些文件时,覆盖是绝对的:新资源将完全替换旧资源。
提示
示例:如果你想替换红石矿石的纹理,只需在textures/blocks/redstone_ore.png
放置一个新文件。
按标识符覆盖¶
许多资源不是通过名称定义,而是通过标识符!要覆盖这些资源,只需创建一个共享相同标识符的新文件,无论文件路径如何。以下内容可以通过这种方式覆盖:
- BP 实体
- RP 实体
- 动画
- 模型
- 动画控制器
- 生成规则
- 配方
- 粒子
- 渲染控制器
当你覆盖这些文件时,覆盖是绝对的:新资源将完全替换旧资源。
提示
示例:如果你想让恶魂拥有更高的生命值,只需创建一个标识符为minecraft:ghast
的新BP实体,并添加所有使恶魂正常工作的行为。
请记住,实体文件不会合并,因此你需要先复制粘贴整个BP恶魂文件,然后再编辑生命值。仅仅创建一个内部有高生命值组件的minecraft:ghast
是行不通的。
通过参考文件覆盖¶
许多资源也可以注册到某种“注册系统”文件中。这些文件很有趣,因为与其他资源类型不同,它们是合并在一起而不是被覆盖。这意味着当你定义这些文件时,不需要从原版资源中复制。你可以简单地从一个空白文件开始,然后覆盖你想要的特定定义。
以下文件以这种方式工作:
- 所有UI文件
- 所有语言文件
item_textures.json
flipbook_textures.json
terrain_textures.json
sounds.json
music_definitions.json
sound_definitions.json
提示
示例:假设你想使用参考文件覆盖sugar
纹理。你可以通过创建一个新的item_textures.json
,并包含以下内容来实现:
{
"resource_pack_name": "vanilla",
"texture_data": {
"sugar": {
"textures": "textures/path/to/my/sugar"
}
}
}
这个定义将与原版的item_textures.json
合并,并将覆盖短名称sugar
。当原版物品访问这个短名称时,它将获取对你自定义纹理路径的引用,而不是实际的糖的纹理路径。
覆盖的危险¶
由于附加包主要是覆盖彼此而不是合并,因此使两个不兼容的附加包一起工作可能非常困难。例如,如果你尝试组合两个覆盖苦力怕行为的附加包(例如,一个使它们非常快,另一个使它们非常大),第二个应用的附加包将覆盖第一个。
这主要是player.json
(在RP或BP中)的问题,因为这个文件通常用于游戏目的。
不能被覆盖的内容¶
并非所有内容都可以被覆盖,以下是无法使用任何描述的方法进行覆盖的内容列表:
- 原版物品(并非全部)
- 原版区块
- 原版雾(创建一个具有其他命名空间的雾并在使用的地方进行更改)