Example usage for net.minecraftforge.event.entity.living LivingFallEvent setDamageMultiplier

List of usage examples for net.minecraftforge.event.entity.living LivingFallEvent setDamageMultiplier

Introduction

In this page you can find the example usage for net.minecraftforge.event.entity.living LivingFallEvent setDamageMultiplier.

Prototype

public void setDamageMultiplier(float damageMultiplier) 

Source Link

Usage

From source file:com.lothrazar.cyclicmagic.potion.effect.PotionBounce.java

License:Open Source License

@SubscribeEvent
public void onFall(LivingFallEvent event) {
    EntityLivingBase entity = event.getEntityLiving();
    if (entity == null || entity instanceof EntityPlayer == false || entity.isSneaking()
            || entity.isPotionActive(this) == false) {
        return;//from  w w w.  j  a  v  a 2 s.c  o  m
    }
    EntityPlayer player = (EntityPlayer) entity;
    if (event.getDistance() >= MIN_HEIGHT_START_BOUNCE) {
        event.setDamageMultiplier(0);
        if (entity.getEntityWorld().isRemote == false) {
            event.setCanceled(true); //nada serverside
        } else {
            UtilSound.playSound(player, player.getPosition(), SoundEvents.BLOCK_SLIME_FALL,
                    SoundCategory.PLAYERS, UtilSound.VOLUME / event.getDistance());
            UtilParticle.spawnParticle(player.world, EnumParticleTypes.SLIME, player.getPosition());
            event.setDistance(0);// fall distance
            if (player.isElytraFlying() == false) {
                player.motionY *= -PERCENT_HEIGHT_BOUNCED;
                player.isAirBorne = true;
                player.onGround = false;
                //postpone until one tick later. otherwise there is vanilla code internally that says "ok you finished falldamage so motionY=0;"
                player.posY += 0.01;
                player.getEntityData().setInteger(NBT_TICK, player.ticksExisted + 1);
                player.getEntityData().setInteger(NBT_MOTIONY, (int) (player.motionY * 100f));
            }
        }
    } else if (!entity.getEntityWorld().isRemote && entity.isSneaking()) {
        event.setDamageMultiplier(DAMAGE_REDUCTION);
    }
}