package cn.dawn47.core; import java.util.List; import net.minecraft.entity.Entity; import net.minecraft.util.DamageSource; import net.minecraft.world.World; import cn.dawn47.weapon.entity.EntityRadiationBall; import cn.liutils.util.generic.MathUtils; import cn.liutils.util.mc.EntitySelectors; import cn.liutils.util.mc.WorldUtils; public class DamageUtils { /** * Using the simple linear attenuation calculation and apply a range damage. */ public static void doRangeDamage(World world, DamageSource cause, double x, double y, double z, double range, float damage, Entity... excls) { List<Entity> list = WorldUtils.getEntities(world, x, y, z, range, new EntitySelectors.SelectorList( EntitySelectors.living, new EntitySelectors.Exclusion(excls) )); for(Entity e : list) { float distance = (float) e.getDistance(x, y, z); float dmg = damage * MathUtils.lerpf(0.4f, 1, (float) (1 - distance / range)); e.attackEntityFrom(cause, dmg); } } }