开启辅助访问      

站内搜索

搜索
热搜: 下载 1.19 1.20

Minecraft(我的世界)苦力怕论坛

[BE教程] 附加包教程:41.附加包兼容性

发表于 2023-12-3 11:58:42 来自手机 | 显示全部楼层 |阅读模式 IP:天津
本帖最后由 Cat_Anchor 于 2023-12-10 12:31 编辑

前言
上期,我们讲述了附加包与游戏本身的兼容性关系。这期,我们来看看为什么有些附加包就是不能一起运行——这种情况有时会非常严重。
我们下载了两个都可以在1.20版本工作的附加包并把它装到一个存档上,打开存档准备游玩。如果这两个附加包新增了各不相同的方块物品实体,那情况会很好;但如果它们修改了同一个实体,或者有同样命名空间ID的物品等,游戏就要出问题了。
附加包的融合
那么首先,游戏会看看这两个附加包分别添加了什么内容。如果它们互不相干,游戏会简单地把它们一起加载,这时游戏很正常。原版的方块是无法通过附加包修改的,因此不会出现方块方面的矛盾。
部分原版物品可以通过附加包修改,那么这时,游戏读取你安装的两个附加包的优先级顺序,并用高的那个修改的原版物品覆盖低的那个;实体也是一样。对于物品和实体,如果ID重复才会造成上述情况。对于战利品表等没有ID的文件,则文件名重复就会造成覆盖现象。
但是有很多附加包修改了玩家实体(行为包根目录/entities/player.json),有些附加包就是依靠这个文件才得以正常工作。高优先级的附加包把低优先级的附加包中的这个文件覆盖了,那么低优先级的附加包就无法正常工作。
可以总结出,以下文件会被上述方法直接覆盖:物品、(行为包和资源包的)实体、函数、战利品表、交易、动画、模型、动画控制器、生成规则、配方、粒子、渲染控制器、纹理和声音。
那么既然有这么多文件会被直接覆盖,为什么还是有很多附加包能一起工作呢?因为只有两个附加包都定义了相同的ID/路径时,才会发生覆盖。

还有一种特殊情况,有些文件会被“合并”,这些文件通常是“注册表”一类的,比如terrain_texture.json。一个附加包定义了纹理短名和纹理路径的对应关系,另一个附加包定义了不同短名的相同关系,那么它们就会被合并在一起。如果这些注册表会被覆盖,那附加包之间的兼容性就几乎会是零。
可以总结出,以下文件会按上述方法合并:语言文件、UI文件、flipbook_textures.json、item_textures.json、terrain_textures.json、blocks.json、sounds.json、music_definitions.json和sound_definitions.json。
使附加包兼容
说了这么多,如何使两个不兼容的附加包兼容?如果是带脚本的附加包,你很可能需要把脚本研究透彻,再修改出现矛盾的地方;对于普通玩家(尤其是我)来说成本过高。
但是如果附加包不带脚本,那就可以分为三类情况:修改同一原版资源、修改同一原版行为、ID冲突。
第一种情况,修改同一原版资源。比如一个附加包把石头的纹理改成了钻石块,另一个把石头的纹理改成了煤炭块,那么它们永远不可能兼容,因为石头的纹理只能有一个。如果你就是想看到这两个纹理同时出现,那就用terrain_textures.json中的纹理变种吧。
  1. "stone": {
  2.   "textures": { //指定纹理短名“stone”对应的纹理路径
  3.     "variations": [ //指定纹理变种内容
  4.       { //一个纹理变种
  5.         "path": "textures/blocks/coal_block", //纹理的路径
  6.         "weight": 1 //煤炭块纹理出现的权重(概率),这里是1/(1+2)=33%
  7.       },
  8.       { //另一个纹理变种
  9.         "path": "textures/blocks/diamond_block", //纹理的路径
  10.         "weight": 2 //钻石块纹理出现的权重(概率),这里是2/(1+2)=67%
  11.       }
  12.     ]
  13.   }
  14. } //这样,石头的纹理就会随机替换为煤炭块或钻石块了。
复制代码

第二种情况,修改同一原版行为。比如一个附加包让玩家跑得很快,另一个让玩家生命值很高。这时需要一定的知识,把两个附加包里修改过的组件放到一起,有时候这会很麻烦。
第三种情况,也是解决起来最简单的一种,ID冲突。这时只需要把一个附加包里冲突的那个ID全部查找替换为另一个你随便写的ID即可,大部分情况下,只要查找替换完全,附加包是可以工作的,不过要注意不仅替换文件里的代码,还要替换文件名。
后记
所以附加包之间的兼容性原则如下:
1.尽最大可能不使用作者列出的冲突的带脚本的附加包,联系作者适配可以解决问题;
2.修改同一原版资源、行为的附加包装在一起时,绝大多数情况下不会工作;
3.ID冲突的附加包装在一起时,附加包的功能可能会以某种奇怪的方式实现,或者不会工作;
4.虽然话是这么说,但为何不试试呢?附加包不兼容的问题其实也没那么大,万一,我是说,万一成功运行了呢?保留一点希望总是好的,对吧。


苦力怕论坛,感谢有您~
回复

使用道具 举报

发表于 2023-12-3 12:04:28 来自手机 | 显示全部楼层 IP:江西省
顶顶,块根优秀教程
2# 2023-12-3 12:04:28 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供云服务 | GMT+8, 2024-5-4 06:50

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号