37 lines
1.8 KiB
Java
37 lines
1.8 KiB
Java
package net.fretux.ailments.effect;
|
|
|
|
import net.fretux.ailments.api.AilmentApi;
|
|
import net.fretux.ailments.config.AilmentsConfig;
|
|
import net.fretux.ailments.damage.ModDamageSources;
|
|
import net.fretux.ailments.util.EffectSourceUtil;
|
|
import net.fretux.ailments.util.HemorrhageTracker;
|
|
import net.minecraft.world.effect.MobEffect;
|
|
import net.minecraft.world.effect.MobEffectCategory;
|
|
import net.minecraft.world.entity.LivingEntity;
|
|
|
|
public final class BleedEffect extends MobEffect {
|
|
public BleedEffect() { super(MobEffectCategory.HARMFUL, 0xAA0000); }
|
|
|
|
@Override public boolean isDurationEffectTick(int duration, int amplifier) {
|
|
int interval = amplifier <= 0 ? AilmentsConfig.value(AilmentsConfig.BLEED_INTERVAL_0)
|
|
: amplifier == 1 ? AilmentsConfig.value(AilmentsConfig.BLEED_INTERVAL_1)
|
|
: AilmentsConfig.value(AilmentsConfig.BLEED_INTERVAL_2);
|
|
return duration % interval == 0;
|
|
}
|
|
|
|
@Override public void applyEffectTick(LivingEntity entity, int amplifier) {
|
|
if (entity.level().isClientSide) return;
|
|
if (!AilmentApi.canBleed(entity)) {
|
|
HemorrhageTracker.clearIfPresent(entity);
|
|
return;
|
|
}
|
|
double base = amplifier <= 0 ? AilmentsConfig.value(AilmentsConfig.BLEED_DAMAGE_0)
|
|
: amplifier == 1 ? AilmentsConfig.value(AilmentsConfig.BLEED_DAMAGE_1)
|
|
: AilmentsConfig.value(AilmentsConfig.BLEED_DAMAGE_2);
|
|
float potency = EffectSourceUtil.getPotency(entity, EffectSourceUtil.BLEED);
|
|
LivingEntity source = EffectSourceUtil.getSourceInLevel(entity, EffectSourceUtil.BLEED);
|
|
boolean damaged = entity.hurt(ModDamageSources.bleed(entity.level(), source), (float) (base * potency));
|
|
if (damaged) HemorrhageTracker.recordBleedDamage(entity, amplifier, potency);
|
|
}
|
|
}
|