Падение в воду

Версия Minecraft
1.12.2
Есть ли возможность реализовать нанесение урона при падении игрока в воду?

Насколько я понял, урон при падении в воду не наносится по данной причине:
- в методе updateFallState класса EntityLivingBase вызывается метод handleWaterMovement
Java:
    protected void updateFallState(double y, boolean onGroundIn, IBlockState state, BlockPos pos)
    {
        if (!this.isInWater())
        {
            this.handleWaterMovement();
        }

        if (!this.world.isRemote && this.fallDistance > 3.0F && onGroundIn)
        {
            float f = (float)MathHelper.ceil(this.fallDistance - 3.0F);

            if (!state.getBlock().isAir(state, world, pos))
            {
                double d0 = Math.min((double)(0.2F + f / 15.0F), 2.5D);
                int i = (int)(150.0D * d0);
                if (!state.getBlock().addLandingEffects(state, (WorldServer)this.world, pos, state, this, i))
                ((WorldServer)this.world).spawnParticle(EnumParticleTypes.BLOCK_DUST, this.posX, this.posY, this.posZ, i, 0.0D, 0.0D, 0.0D, 0.15000000596046448D, Block.getStateId(state));
            }
        }

        super.updateFallState(y, onGroundIn, state, pos);
    }

- в методе handleWaterMovement класса Entity при проверке на падение в воду [this.world.handleMaterialAcceleration(this.getEntityBoundingBox().grow(0.0D, -0.4000000059604645D, 0.0D).shrink(0.001D), Material.WATER, this)] устанавливается this.fallDistance = 0.0F;

Java:
public boolean handleWaterMovement()
{
    if (this.getRidingEntity() instanceof EntityBoat)
    {
        this.inWater = false;
    }
    else if (this.world.handleMaterialAcceleration(this.getEntityBoundingBox().grow(0.0D, -0.4000000059604645D, 0.0D).shrink(0.001D), Material.WATER, this))
    {
        if (!this.inWater && !this.firstUpdate)
        {
            this.doWaterSplashEffect();
        }

        this.fallDistance = 0.0F;
        this.inWater = true;
        this.extinguish();
    }
    else
    {
        this.inWater = false;
    }

    return this.inWater;
}

- в связи с тем, что теперь this.fallDistance = 0.0F, то проверка if (this.fallDistance > 0.0F) в методе updateFallState класса Entity не выполняется
Java:
protected void updateFallState(double y, boolean onGroundIn, IBlockState state, BlockPos pos)
{
    if (onGroundIn)
    {
        if (this.fallDistance > 0.0F)
        {
            state.getBlock().onFallenUpon(this.world, pos, this, this.fallDistance);
        }

        this.fallDistance = 0.0F;
    }
    else if (y < 0.0D)
    {
        this.fallDistance = (float)((double)this.fallDistance - y);
    }
}

- из-за этого не вызывается state.getBlock().onFallenUpon(this.world, pos, this, this.fallDistance); (т.к. метод находится внутри блока с данным условием)

- и поэтому не вызывется метод fall класса Block (т.к. вызов происходит в onFallenUpon, который не вызывался)
Код:
    public void onFallenUpon(World worldIn, BlockPos pos, Entity entityIn, float fallDistance)
    {
        entityIn.fall(fallDistance, 1.0F);
    }

- а так как собственно сам урон от падения наносится в методе fall, то из-за того, что данный метод не был вызван, урон при падении в воду и не наносится

Не могу придумать, как это обойти. Буду рад предложенным идеям)
 
Сверху