private void Prepare()
 {
     try
     {
         if (!serverDirectory.Exists)
         {
             serverDirectory.Create();
         }
         if (!Flags.IgnoreNotEmtpyDir && !Utils.IsDirEmpty(serverDirectory))
         {
             CreationStateChanged?.Invoke(this, new ServerCreationCanceledState(ServerCreationCanceledReason.TargetDirectoryNotEmpty));
         }
         else
         {
             StartDownload();
         }
     }
     catch (IOException ex)
     {
         CreationStateChanged?.Invoke(this, new ServerCreationCanceledState(ServerCreationCanceledReason.IOException, ex));
     }
     catch (Exception ex)
     {
         CreationStateChanged?.Invoke(this, new ServerCreationCanceledState(ServerCreationCanceledReason.Unknown, ex));
     }
 }
 private void DownloadEngine(Uri uri)
 {
     try
     {
         WebClient client = new WebClient();
         client.DownloadProgressChanged += (sender, e) =>
         {
             CreationStateChanged?.Invoke(this, new ServerCreationDownloadState(e.ProgressPercentage, e.BytesReceived, e.TotalBytesToReceive));
         };
         client.DownloadFileCompleted += (sender, e) =>
         {
             CreationStateChanged?.Invoke(this, new ServerCreationStateArgs(ServerCreationState.FirstStart));
             if (Flags.RunServerForFirstTime)
             {
                 RunForFirstTime();
             }
             else
             {
                 CreationStateChanged?.Invoke(this, new ServerCreationStateArgs(ServerCreationState.Finished));
             }
         };
         client.DownloadFileAsync(uri, EngineFile.FullName);
     }
     catch (WebException)
     {
         throw;
     }
     catch (Exception)
     {
         throw;
     }
 }
 private void JavaCheck()
 {
     if (Utils.IsJavaInstalled())
     {
         Prepare();
     }
     else
     {
         CreationStateChanged?.Invoke(this, new ServerCreationCanceledState(ServerCreationCanceledReason.JavaNotInstalled));
     }
 }
 private void Eula_AgreementStateChanged(object sender, bool e)
 {
     if (e)
     {
         MinecraftServer server = new MinecraftServer(EngineFile);
         server.ServerOutput       += (s, e2) => { JavaOutput?.Invoke(s, e2); };
         server.ServerStateChanged += Server_ServerStateChanged;
         server.PreparingSpawnArea += (sender2, e2) => { CreationStateChanged?.Invoke(this, new ServerCreationStateArgs(ServerCreationState.PreparingSpawn)); };
         server.Start();
     }
     else
     {
         CreationStateChanged?.Invoke(this, new ServerCreationCanceledState(ServerCreationCanceledReason.EulaAgreementRequired));
     }
 }
        private void Server_ServerStateChanged(object sender, ServerState e)
        {
            switch (e)
            {
            case ServerState.Stopped:
                CreationStateChanged?.Invoke(this, new ServerCreationStateArgs(ServerCreationState.Finished));
                break;

            case ServerState.Running:
                CreationStateChanged?.Invoke(this, new ServerCreationStateArgs(ServerCreationState.Finishing));
                ((MinecraftServer)sender).Stop();
                break;

            default:
                break;
            }
        }
        private void StartDownload()
        {
            Uri uri;

            switch (serverType)
            {
            case AdvancedVersionAPI.VersionType.VANILLA:

                CreationStateChanged?.Invoke(this, new ServerCreationStateArgs(ServerCreationState.GettingDownloadInformation));
                uri = new Uri(serverVersion.url);


                CreationStateChanged?.Invoke(this, new ServerCreationStateArgs(ServerCreationState.StartingDownload));
                DownloadEngine(uri);
                break;


            case AdvancedVersionAPI.VersionType.SPIGOT:

                CreationStateChanged?.Invoke(this, new ServerCreationStateArgs(ServerCreationState.GettingDownloadInformation));

                uri = new Uri(serverVersion.url);

                CreationStateChanged?.Invoke(this, new ServerCreationStateArgs(ServerCreationState.StartingDownload));
                DownloadEngine(uri);
                break;

            case AdvancedVersionAPI.VersionType.CRAFTBUKKIT:
                CreationStateChanged?.Invoke(this, new ServerCreationStateArgs(ServerCreationState.GettingDownloadInformation));

                uri = new Uri(serverVersion.url);

                CreationStateChanged?.Invoke(this, new ServerCreationStateArgs(ServerCreationState.StartingDownload));
                DownloadEngine(uri);
                break;

            default:
                CreationStateChanged?.Invoke(this, new ServerCreationCanceledState(ServerCreationCanceledReason.NotSupportedServerType));
                break;
            }
        }