minecraft-src/net/minecraft/world/effect/HealOrHarmMobEffect.java
2025-07-04 02:49:36 +03:00

43 lines
1.3 KiB
Java

package net.minecraft.world.effect;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import org.jetbrains.annotations.Nullable;
class HealOrHarmMobEffect extends InstantenousMobEffect {
private final boolean isHarm;
public HealOrHarmMobEffect(MobEffectCategory category, int color, boolean isHarm) {
super(category, color);
this.isHarm = isHarm;
}
@Override
public boolean applyEffectTick(ServerLevel level, LivingEntity entity, int amplifier) {
if (this.isHarm == entity.isInvertedHealAndHarm()) {
entity.heal(Math.max(4 << amplifier, 0));
} else {
entity.hurtServer(level, entity.damageSources().magic(), 6 << amplifier);
}
return true;
}
@Override
public void applyInstantenousEffect(
ServerLevel level, @Nullable Entity source, @Nullable Entity indirectSource, LivingEntity entity, int amplifier, double health
) {
if (this.isHarm == entity.isInvertedHealAndHarm()) {
int i = (int)(health * (4 << amplifier) + 0.5);
entity.heal(i);
} else {
int i = (int)(health * (6 << amplifier) + 0.5);
if (source == null) {
entity.hurtServer(level, entity.damageSources().magic(), i);
} else {
entity.hurtServer(level, entity.damageSources().indirectMagic(source, indirectSource), i);
}
}
}
}