激素效果

基本信息

属性 值
modid RandomThings
注册类 lumien.randomthings.Potions.ModPotions
效果类 lumien.randomthings.Potions.PotionImbue
效果总数 6(全部由 PotionImbue 生成)
颜色数组 ModPotions.imbueColors(ModPotions.java:25)
药水 ID 6 个可配键,默认自动分配
需物品 Items.Imbues(RTConfiguration.java:229)

功能

6 种"感染"效果由激素药水饮用后附加在玩家身上,而非装备上。每种效果在不同事件下触发不同行为。

通用参数

饮用时创建的效果实例(Items/ItemImbue.java:134):

PotionEffect pe = new PotionEffect(imbueID, Settings.IMBUE_DURATION, 0, false);
参数 值
持续时间 ImbueDuration = 6000 tick = 5 分钟(RTConfiguration.java:103,20 * 60 * 5)
等级 amplifier 0(所有效果统一)
是否显示粒子 false
治愈物 空列表(pe.setCurativeItems(curatives) 传入空 ArrayList,:137)—— 无法用牛奶解除

药水 ID 全部可配(PotionIds 分类下 6 个键,RTConfiguration.java:184-189),默认 -1 表示自动分配空闲 ID;已被占用时会自动迁移,数组不足时通过 PotionAccessor Mixin 动态扩容(ModPotions.java:55-84)。

6 种效果

攻击加成(AttackEntityEvent,RTEventHandler.java:381-398)

这 4 种效果作用于攻击者的目标,且是 if / else if 链 —— 同时持有多种时只有优先级最高的一种生效:

meta 效果 优先级 目标承受 参数
0 毒性 1(最高) 中毒 200 tick,等级 1
2 火焰 2 着火 setFire(200) = 200 tick
4 虚弱 3 虚弱 100 tick,等级 1
3 凋零 4(最低) 凋零 200 tick,等级 1

原版效果常量取自 lumien.randomthings.Library.PotionEffects(RTEventHandler.java:388、:390、:392、:394),非直接引用 net.minecraft.potion.Potion。

经验加成(死亡事件,RTEventHandler.java:549-559)

meta 效果 行为
1 经验 击杀者被感染时,被击杀实体的经验值 × 1.5
if (livingAttacker.isPotionActive(ModPotions.imbueExperience)) {
    final int buffedExp = (int) (((EntityLivingAccessor) attacked).getExperienceValue() * 1.5f);
    ((EntityLivingAccessor) attacked).setExperienceValue(buffedExp);
}

经验读写通过 EntityLivingAccessor Mixin 完成(Mixins/early/EntityLivingAccessor.java)。

闪避(受伤事件,RTEventHandler.java:412-430)

meta 效果 行为
5 灵魂 按 SPECTRE_IMBUE_CHANCE 概率取消一次伤害

SpectreImbueChance 默认 0.1(10%),范围限定 0–1(RTConfiguration.java:91-97)。

取消伤害需同时满足 5 个排除条件(:421-427):

if (!event.source.isMagicDamage()
        && (event.source.getSourceOfDamage() != null || event.source.isExplosion())
        && !event.source.canHarmInCreative()
        && !event.source.isFireDamage()
        && !event.source.isUnblockable()
        && Math.random() <= Settings.SPECTRE_IMBUE_CHANCE) {
    event.setCanceled(true);

即魔法伤害、创造模式可伤害的来源、火焰伤害、不可格挡伤害一律无法闪避;且必须存在伤害来源实体或属于爆炸。

数值总表

meta 效果名 颜色 触发时机 效果值 作用对象
0 毒性感染 10145074 攻击 中毒 200 tick / I 目标
1 经验感染 14214234 击杀 经验 ×1.5 目标
2 火焰感染 16729344 攻击 着火 200 tick 目标
3 凋零感染 3881787 攻击 凋零 200 tick / I 目标
4 虚弱感染 16777215 攻击 虚弱 100 tick / I 目标
5 灵魂感染 12578815 受伤 10% 免伤 自身

颜色取自 ModPotions.java:25:

public static int[] imbueColors = new int[] { 10145074, 14214234, 16729344, 3881787, 16777215, 12578815 };

中文效果名见 zh_CN.lang:84-89(毒性感染 / 经验感染 / 火焰感染 / 凋零感染 / 虚弱感染 / 灵魂感染)。

交互

触发 行为
饮用激素药水 获得对应感染 5 分钟
攻击生物 施加毒性 / 火焰 / 虚弱 / 凋零(互斥)
击杀生物 经验 ×1.5
受到伤害 灵魂感染 10% 免伤
喝牛奶 无效 —— 治愈物品列表为空

渲染

PotionImbue 覆写两个方法(Potions/PotionImbue.java):

  • getLiquidColor() 返回 0 —— 刻意不渲染药水粒子(:29-33)
  • renderInventoryEffect 自绘:先画药水颜色条,再叠加 randomthings:textures/gui/imbueEffects/<name>.png 图标(:35-48)

灵魂感染(IMBUE_SPECTRE)的图标额外以 0.8 alpha 半透明绘制(:40-45)。

相关条目