private static void DidDamageExtended(ItemSlot slot, DamageSource source, EntityAgent target) { if (target.World.Side == EnumAppSide.Client) { return; } Vec3d vec3d = (target.SidedPos.XYZ - (source.SourceEntity == null ? source.SourcePos : source.SourceEntity.SidedPos.XYZ)).Normalize(); vec3d.Y = 0.1; float force = (slot?.Itemstack?.Item is IDynamicAttackKnockback) ? ((IDynamicAttackKnockback)slot.Itemstack.Item).GetDynamicAttackKnockback(slot.Itemstack, source, target) : 1f; float single = GameMath.Clamp((force - target.Properties.KnockbackResistance) / 10f, 0f, 2f); target.SidedPos.Motion.Add(vec3d.X * (double)single, vec3d.Y * (double)single, vec3d.Z * (double)single); target.DidAttack(source, (EntityAgent)source.SourceEntity); }