此效果类似于[MC]我的世界原版内的牛奶,但可在一定时间范围内(此时间范围取决于玩家饮用的饮品)清除负面效果的同时保留正面效果。
负面效果消除的瞬时时间取决于下方代码的运行速度;即此效果不能完全保证玩家不会被负面效果影响。
玩家仍可能受到负面效果的瞬时影响;如凋零,中毒及瞬间伤害等负面效果。(详见:我的世界原版:DEBUFF)。
源代码:
public void func_76394_a(EntityLivingBase entityLivingBaseIn, int amplifier) {
if (entityLivingBaseIn instanceof net.minecraft.entity.player.EntityPlayer){
for (Potion potion : ForgeRegistries.POTIONS.getValuesCollection()) {
if (potion.func_76398_f()){
entityLivingBaseIn.func_184589_d(potion);
}
}
}
}下方为部分代码释义,与此效果(免疫力)间接相关;可忽略。
其中:
potion.func_76398_f()
此函数的作用不明为历史遗留问题。
此函数(据开源且可追溯的公开工程文件)最早出现于1.8.8的MC原版文件[1]中。
其作用为“检测此实体(见:行2)是否携带负面效果,若携带则返回true”。
此问题可追溯的造成原因是:早期Mojang在编写药水作用工程文件时,并未使用可读性有效的函数名称;且此模组作者并未特殊阐述此效果(免疫力)的作用导致玩家需要对代码进行解析及在游戏内进行测试来获取此效果的效果数据。
不严谨证明:
此
potion.func_76398_f()
在Oringo-Client的叶文件[2]内提及:
if (this.isBestEffect(effect, stack) && !potion.func_76398_f() && !this.isDelayed(potion) && (!AutoPot.mc.field_71439_g.func_70644_a(potion) || effect.func_76458_c() > AutoPot.mc.field_71439_g.func_70660_b(potion).func_76458_c()))
注意到:
this.isBestEffect(effect, stack) && !potion.func_76398_f()
当两者返回的值都为true时,此if语句即可执行(是需要所有在if语句内的函数都返回true才能执行,不过在这个问题上这些都不重要)。
由此可知:前者
this.isBestEffect(effect, stack)
则与后者
!potion.func_76398_f()
相同。
通过阅读英文函数得出:
this.isBestEffect(effect, stack)
为正面(或“最好”)效果检测函数。
即原方程式:
potion.func_76398_f()
为对于实体的负面效果的检测的函数。
更多信息请在GitHub搜索Code:
potion.func_76398_f()
/minecraft/net/minecraft/item/ItemPotion.java[1]
/minecraft/net/minecraft/potion/PotionUtils.java[2]
| 资料分类: | 特殊BUFF |


