public VStancerEditor()
        {
            // If the resource name is not the expected one ...
            if (GetCurrentResourceName() != ResourceName)
            {
                CitizenFX.Core.Debug.WriteLine($"{ScriptName}: Invalid resource name, be sure the resource name is {ResourceName}");
                return;
            }

            lastTime       = GetGameTimer();
            currentVehicle = -1;
            currentPreset  = null;
            vehicles       = Enumerable.Empty <int>();

            RegisterDecorators();
            LoadConfig();

            #region Register Commands

            RegisterCommand("vstancer_range", new Action <int, dynamic>((source, args) =>
            {
                if (args.Count < 1)
                {
                    Debug.WriteLine($"{ScriptName}: Missing float argument");
                    return;
                }

                if (float.TryParse(args[0], out float value))
                {
                    ScriptRange = value;
                    Debug.WriteLine($"{ScriptName}: Received new {nameof(ScriptRange)} value {value}");
                }
                else
                {
                    Debug.WriteLine($"{ScriptName}: Error parsing {args[0]} as float");
                }
            }), false);

            RegisterCommand("vstancer_debug", new Action <int, dynamic>((source, args) =>
            {
                if (args.Count < 1)
                {
                    Debug.WriteLine($"{ScriptName}: Missing bool argument");
                    return;
                }

                if (bool.TryParse(args[0], out bool value))
                {
                    debug = value;
                    Debug.WriteLine($"{ScriptName}: Received new {nameof(debug)} value {value}");
                }
                else
                {
                    Debug.WriteLine($"{ScriptName}: Error parsing {args[0]} as bool");
                }
            }), false);

            RegisterCommand("vstancer_decorators", new Action <int, dynamic>((source, args) =>
            {
                if (args.Count < 1)
                {
                    PrintDecoratorsInfo(currentVehicle);
                }
                else
                {
                    if (int.TryParse(args[0], out int value))
                    {
                        PrintDecoratorsInfo(value);
                    }
                    else
                    {
                        Debug.WriteLine($"{ScriptName}: Error parsing entity handle {args[0]} as int");
                    }
                }
            }), false);

            RegisterCommand("vstancer_preset", new Action <int, dynamic>((source, args) =>
            {
                if (currentPreset != null)
                {
                    Debug.WriteLine(currentPreset.ToString());
                }
                else
                {
                    Debug.WriteLine($"{ScriptName}: Current preset doesn't exist");
                }
            }), false);

            RegisterCommand("vstancer_print", new Action <int, dynamic>((source, args) =>
            {
                PrintVehiclesWithDecorators(vehicles);
            }), false);

            #endregion


            if (exposeCommand)
            {
                RegisterCommand("vstancer", new Action <int, dynamic>((source, args) =>
                {
                    ToggleMenuVisibility?.Invoke(this, EventArgs.Empty);
                }), false);
            }

            if (exposeEvent)
            {
                EventHandlers.Add("vstancer:toggleMenu", new Action(() =>
                {
                    ToggleMenuVisibility?.Invoke(this, EventArgs.Empty);
                }));
            }


            Exports.Add("SetVstancerPreset", new Action <int, float, float, float, float, float, float, object, object, object, object, object, object>(SetVstancerPreset));
            Exports.Add("GetVstancerPreset", new Func <int, float[]>(GetVstancerPreset));

            // Create a script for the menu ...
            vstancerMenu = new VStancerMenu(this);

            if (vstancerMenu != null)
            {
                // Actually only required to have its Tick event triggered
                // TODO: Workaround this and avoid to register the script
                RegisterScript(vstancerMenu);
            }

            vstancerMenu.MenuResetPresetButtonPressed += (sender, args) => OnMenuResetPresetButtonPressed();
            vstancerMenu.MenuPresetValueChanged       += OnMenuPresetValueChanged;

            Tick += GetCurrentVehicle;
            Tick += UpdateCurrentVehicle;
            Tick += UpdateWorldVehicles;
            Tick += UpdateCurrentVehicleDecorators;
        }