initGlobalVars = settings => {
        // "global" is a general setting, not a plugin setting
        Object.defineProperty(settings, "global", { enumerable: false })

        global.BasePlugin = BasePlugin
        global.BaseCustomPlugin = BaseCustomPlugin
        global.LoadPlugins = LoadPlugins
        global.__plugins__ = null
        global.__plugin_utils__ = utils
        global.__plugin_i18n__ = i18n
        global.__plugin_settings__ = settings
    }
Initializes global variables.
The plugin system exposes the following global variables, but only 3 are actually useful: BasePlugin, BaseCustomPlugin, and LoadPlugins.
The remaining variables are exposed by the static class `utils` and should never be referenced by business plugins.
Furthermore, `utils` is also an instance property of BasePlugin and BaseCustomPlugin, so `utils` itself doesn't need to be exposed.
Since they will never be referenced by business plugins, why are they set as global variables? Answer: For debugging convenience.