public override void Initialize()
        {
            AssetPath = "file:///";
            Caching.expirationDelay = 1;
            Caching.CleanCache();
            Hooks.OnModulesLoaded += OnModulesLoaded;
            if (!File.Exists(Util.GetRootFolder() + "\\Save\\WorldEditorServer\\ClientSideAssets.txt"))
            {
                File.Create(Util.GetRootFolder() + "\\Save\\WorldEditorServer\\ClientSideAssets.txt").Dispose();
            }
            AssetPath = AssetPath + @Util.GetRootFolder() + "\\Save\\WorldEditorServer\\myasset.unity3d";
            RustBuster2016Server.API.AddFileToDownload(new RBDownloadable("WorldEditor\\", Util.GetRootFolder() + "\\Save\\WorldEditorServer\\myasset.unity3d"));
            RustBuster2016Server.API.AddFileToDownload(new RBDownloadable("WorldEditor\\", Util.GetRootFolder() + "\\Save\\WorldEditorServer\\ClientSideAssets.txt"));

            MainHolder = new GameObject();
            Handler    = MainHolder.AddComponent <LoadingHandler>();
            UnityEngine.Object.DontDestroyOnLoad(Handler);
            try
            {
                Handler.StartCoroutine(Handler.LoadAsset());
            }
            catch (Exception ex)
            {
                Logger.LogError("Couroutine failed. " + ex);
            }

            if (_FoundRB)
            {
                RustBuster2016Server.API.OnRustBusterUserMessage += OnRustBusterUserMessage;
            }
        }
        public override void Initialize()
        {
            RustPP = new RustPPExtension();

            var AssetPath_ = "file:///";

            Caching.expirationDelay = 1;
            Caching.CleanCache();

            Hooks.OnModulesLoaded      += OnModulesLoaded;
            Hooks.OnPlayerConnected    += OnPlayerConnected;
            Hooks.OnPlayerDisconnected += OnPlayerDisconnected;
            Hooks.OnPlayerSpawned      += OnPlayerSpawned;
            Hooks.OnPlayerKilled       += OnPlayerKilled;
            Hooks.OnCommand            += OnCommand;

            #region Settings

            if (!File.Exists(Util.GetRootFolder() + "\\Save\\WorldEditorServer\\ClientSideAssets.txt"))
            {
                File.Create(Util.GetRootFolder() + "\\Save\\WorldEditorServer\\ClientSideAssets.txt").Dispose();
            }

            if (!File.Exists(Util.GetRootFolder() + "\\Save\\WorldEditorServer\\Settings.ini"))
            {
                File.Create(Util.GetRootFolder() + "\\Save\\WorldEditorServer\\Settings.ini").Dispose();
                SettingsParser = new IniParser(Util.GetRootFolder() + "\\Save\\WorldEditorServer\\Settings.ini");
                SettingsParser.AddSetting("Settings", "AssetBundles");
                SettingsParser.AddSetting("Settings", "TimedSpawns");
                SettingsParser.AddSetting("Settings", "PerformanceLog", "false");
                SettingsParser.AddSetting("Settings", "BundlesToTransfer");
                SettingsParser.AddSetting("Settings", "BundleDownloadLink");
                SettingsParser.Save();
            }

            if (SettingsParser == null)
            {
                SettingsParser = new IniParser(Util.GetRootFolder() + "\\Save\\WorldEditorServer\\Settings.ini");
            }

            #endregion

            #region AssetBundles

            var bundlesString = SettingsParser.GetSetting("Settings", "AssetBundles");
            if (!string.IsNullOrEmpty(bundlesString))
            {
                foreach (var bundle in bundlesString.Split(','))
                {
                    if (string.IsNullOrEmpty(bundle))
                    {
                        continue;
                    }

                    Bundles.Add(bundle + "|" + AssetPath_ + Util.GetRootFolder() + "\\Save\\WorldEditorServer\\" +
                                bundle + ".unity3d");
                }
            }

            #endregion

            PerformanceLog = SettingsParser.GetBoolSetting("Settings", "PerformanceLog");

            #region ZoneSpawnAndDestroy

            var s = SettingsParser.GetSetting("Settings", "ZoneSpawnAndDestroy");
            if (!string.IsNullOrEmpty(s))
            {
                var dasEntries = s.Split('|');
                foreach (var dasEntry in dasEntries)
                {
                    if (string.IsNullOrEmpty(dasEntry))
                    {
                        continue;
                    }
                    var     dasEntrySplitted = dasEntry.Split('/');
                    Vector3 location         = Utils.StringToVector3(dasEntrySplitted[0]);
                    int     secondsToDestroy = int.Parse(dasEntrySplitted[1]);
                    int     radius           = int.Parse(dasEntrySplitted[2]);
                    string  prefab           = dasEntrySplitted[3];

                    _zones.Add(new Zone(location, radius, secondsToDestroy, prefab));
                }
            }

            #endregion

//            var bundlesToTransferString = SettingsParser.GetSetting("Settings", "BundlesToTransfer");
//            if (!string.IsNullOrEmpty(bundlesToTransferString))
//            {
//                var bundlesToTransfer = bundlesToTransferString.Split(',');
//                foreach (var bundleToTransfer in bundlesToTransfer)
//                {
//                    if (string.IsNullOrEmpty(bundleToTransfer))
//                        continue;

//                    RustBuster2016Server.API.AddFileToDownload(new RBDownloadable("WorldEditor\\", Util.GetRootFolder() + "\\Save\\WorldEditorServer\\" + bundleToTransfer + ".unity3d"));
//                }
//            }

//            TODO: AutoSpawn
//            var autoSpawnString = SettingsParser.GetSetting("Settings", "AutoSpawn");
//            if (!string.IsNullOrEmpty(autoSpawnString))
//            {
//                _autoSpawnGameObject = new GameObject();
//                var spawnBehaviour = _autoSpawnGameObject.AddComponent<AutoSpawnBehaviour>();
//                Object.DontDestroyOnLoad(_autoSpawnGameObject);
//
//                foreach (var autoSpawnEntryString in autoSpawnString.Split('|'))
//                {
//                    if (string.IsNullOrEmpty(autoSpawnEntryString))
//                    {
//                        continue;
//                    }
//
//                    if (!autoSpawnEntryString.Contains("/"))
//                    {
//                        string[] autoSpawnEntrySplit = autoSpawnEntryString.Split(':');
//
//                        var seconds = float.Parse(autoSpawnEntrySplit[0]);
//                        var destroySeconds = float.Parse(autoSpawnEntrySplit[1]);
//                        var bundle = autoSpawnEntrySplit[2];
//                        var name = autoSpawnEntrySplit[3];
//
//                        var locationString = autoSpawnEntrySplit[4].Split(',');
//                        Vector3 location = new Vector3(float.Parse(locationString[0]), float.Parse(locationString[1]),
//                            float.Parse(locationString[2]));
//
//                        var rotationString = autoSpawnEntrySplit[5].Split(',');
//                        Quaternion rotation = new Quaternion(float.Parse(rotationString[0]),
//                            float.Parse(rotationString[1]),
//                            float.Parse(rotationString[2]), float.Parse(rotationString[3]));
//
//                        var sizeString = autoSpawnEntrySplit[6].Split(',');
//                        Vector3 size = new Vector3(float.Parse(sizeString[0]), float.Parse(sizeString[1]),
//                            float.Parse(sizeString[2]));
//
//                        spawnBehaviour.StartCoroutine(
//                            spawnBehaviour.WaitAndSpawn(new AutoSpawnManager.SpawnedObject(seconds, destroySeconds,
//                                name,
//                                bundle, location,
//                                rotation,
//                                size)));
//
//                        Logger.Log("[WorldEditor] Started AutoSpawn Coroutine for " + name);
//                    }
//                    else
//                    {
//                        List<AutoSpawnManager.SpawnedObject>
//                            objectsToSpawn = new List<AutoSpawnManager.SpawnedObject>();
//                        foreach (var multiEntry in autoSpawnEntryString.Split('/'))
//                        {
//                            string[] autoSpawnEntrySplit = multiEntry.Split(':');
//
//                            var seconds = float.Parse(autoSpawnEntrySplit[0]);
//                            var destroySeconds = float.Parse(autoSpawnEntrySplit[1]);
//                            var bundle = autoSpawnEntrySplit[2];
//                            var name = autoSpawnEntrySplit[3];
//
//                            var locationString = autoSpawnEntrySplit[4].Split(',');
//                            Vector3 location = new Vector3(float.Parse(locationString[0]),
//                                float.Parse(locationString[1]),
//                                float.Parse(locationString[2]));
//
//                            var rotationString = autoSpawnEntrySplit[5].Split(',');
//                            Quaternion rotation = new Quaternion(float.Parse(rotationString[0]),
//                                float.Parse(rotationString[1]),
//                                float.Parse(rotationString[2]), float.Parse(rotationString[3]));
//
//                            var sizeString = autoSpawnEntrySplit[6].Split(',');
//                            Vector3 size = new Vector3(float.Parse(sizeString[0]), float.Parse(sizeString[1]),
//                                float.Parse(sizeString[2]));
//
//                            objectsToSpawn.Add(new AutoSpawnManager.SpawnedObject(seconds, destroySeconds, name, bundle,
//                                location, rotation, size));
//                        }
//
//                        spawnBehaviour.StartCoroutine(spawnBehaviour.WaitAndSpawn(objectsToSpawn));
//
//                        Logger.Log("[WorldEditor] Started multi AutoSpawn Coroutine for " + objectsToSpawn.Count +
//                                   " objects");
//                    }
//                }
//            }

//            API.AddFileToDownload(new RBDownloadable("WorldEditor\\",
//                Util.GetRootFolder() + "\\Save\\WorldEditorServer\\Settings.ini"));
//            API.AddFileToDownload(new RBDownloadable("WorldEditor\\",
//                Util.GetRootFolder() + "\\Save\\WorldEditorServer\\ClientSideAssets.txt"));
//            API.AddFileToDownload(new RBDownloadable("WorldEditor\\",
//                Util.GetRootFolder() + "\\Save\\WorldEditorServer\\Splash.png"));
//            API.AddFileToDownload(new RBDownloadable("WorldEditor\\",
//                Util.GetRootFolder() + "\\Save\\WorldEditorServer\\Hud.png"));

            MainHolder = new GameObject();
            Handler    = MainHolder.AddComponent <LoadingHandler>();
            Object.DontDestroyOnLoad(MainHolder);
            try
            {
                Handler.StartCoroutine(Handler.LoadAsset());
            }
            catch (Exception ex)
            {
                Logger.LogError("Couroutine failed. " + ex);
            }

            if (_FoundRB)
            {
                API.OnRustBusterUserMessage += OnRustBusterUserMessage;
            }
        }