激素效果
基本信息
| 属性 | 值 |
|---|---|
| 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)。