1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Обсудим Лепим пиратский лаунчер

Тема в разделе "Управление сервером Bukkit", создана пользователем Oinvizion Craft, 27 сен 2016.

  1. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Долго ты думал...
     
  2. Автор темы
    Oinvizion Craft

    Oinvizion Craft Активный участник Пользователь

    Баллы:
    76
    Да, просто код корявый немного вышел, теперь всё норм, спс
     
  3. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Теперь думай, как запускать клиенты с мульти json, где пишется inheritsFrom и jar :D.
     
  4. Автор темы
    Oinvizion Craft

    Oinvizion Craft Активный участник Пользователь

    Баллы:
    76
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
  6. Автор темы
    Oinvizion Craft

    Oinvizion Craft Активный участник Пользователь

    Баллы:
    76
    Хотя я до этого ещё и не дошёл, но всё равно спасибо!

    У меня тут проблемка, короче в ComboBox пишется такие первые две строчки:

    versionlistbox.Items.Add("Последняя версия: " + Convert.ToString(versionlist["latest"]["release"]));
    versionlistbox.Items.Add("Последний снапшот: " + Convert.ToString(versionlist["latest"]["snapshot"]));

    Откуда лаунчеру узнать правильный selectedIndex этих строк и остальных, ведь у этих первых двух нет url???
    У меня есть джоновский массив versionlist["versions"]
    И есть версия, например "1.10.2"
    Как отрыть индекс элемента "1.10.2" в этом массиве???
    Типа стандартного
    int переменная = Array.IndexOf(массив, объект);
    Слушай, а как организовать "консоль разработчика"?
    Т.е. Чтобы Java выводила все действия в TextBox или в cmd
    Но если в cmd, то чтобы при закрытии окна, майнкрафт продолжал работать.
     
    Последнее редактирование: 13 ноя 2016
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Цепляешься к процессу и выводишь консоль.
     
  8. Автор темы
    Oinvizion Craft

    Oinvizion Craft Активный участник Пользователь

    Баллы:
    76
    Я не очень понял что ты сказал, поясни пожалуйста
    А понял. Только как это организовать?
    Короче так, у меня есть некий Rich Text Box в который должен выводится весь процесс майнкрафта (его лог)
    Пока единственное что я придумал вместе с гуглом:

    Добавить в строку запуска майна com.manage.Program > С:/Users/Username/Desktop/log.txt

    А потом:

    Код:
    while (1 == 1) //Тупо, согласен
                {
                    await Task.Delay(5);
                    StreamReader sw = new StreamReader(@"С:/Users/Username/Desktop/log.txt");
                    string read_line = sw.ReadToEnd();
                    form3.richTextBox1.Text = read_line;
                }
    Но он не хочет читать файл т.к. он "открыт в другой программе"
    Всё, с выводом логов и с консолью разобрался. Сделал топором, но зато работает.
    Я сделал возможность переключиться. Первый режим - это отдельной формой, второй - во вкладке
    А зачем это надо?:

    Код:
    "logging": {
            "client": {
                "file": {
                    "id": "client-1.7.xml",
                    "sha1": "49e2e41bc339698bd8199e0da9398c926e68c95d",
                    "size": 467,
                    "url": "https://launchermeta.mojang.com/mc/log_configs/client-1.7.xml/49e2e41bc339698bd8199e0da9398c926e68c95d/client-1.7.xml"
                },
                "argument": "-Dlog4j.configurationFile=${path}",
                "type": "log4j2-xml"
            }
        },

    И ещё вопрос, что обозначает параметр action?

    Код:
    "name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0",
          "rules": [
            {
              "action": "allow"
            },
            {
              "action": "disallow",
              "os": {
                "name": "osx",
                "version": "^10\\.5\\.\\d$"
              }
            }
          ]
        },

    Всё-таки мой топорный метод не сработал.

    psi.StartInfo.FileName = "java.exe";
    psi.StartInfo.UseShellExecute = false;
    psi.StartInfo.CreateNoWindow = true;
    psi.StartInfo.Arguments = @"-XX:HeapDumpPath...";

    Как сделать вывод логово такого плана?
     
  9. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
            ProcessStartInfo Info = new ProcessStartInfo("java");
            Info.Arguments = url;
            Info.WorkingDirectory = clientdir;
            Info.UseShellExecute = false;
            Info.RedirectStandardOutput = true;
            Process process = new Process();
            process.StartInfo = Info;
            int lineCount = 0;
            StringBuilder output = new StringBuilder();
            process.OutputDataReceived += new DataReceivedEventHandler((sender, e) => {
                if (!String.IsNullOrEmpty(e.Data)) {
                    lineCount++;
                    output.Append("\n[" + lineCount + "]: " + e.Data);
                }
            });
            process.Start();
            Выводим в неком гуи или консоли output;

    В java это намного проще, и можно спокойно закрыть консоль не убив запущенный процесс.
     
  10. Автор темы
    Oinvizion Craft

    Oinvizion Craft Активный участник Пользователь

    Баллы:
    76
  11. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Все там правильно, эт твоя иде писдит.
    [​IMG]
     
  12. Автор темы
    Oinvizion Craft

    Oinvizion Craft Активный участник Пользователь

    Баллы:
    76
    А надо отдельным методом делать?
    Ну типо я сделал
    richTextBox1.AppendText("\n[" + lineCount + "]: " + e.Data);

    Но оно ничего не выводит.
     
  13. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    using System.Diagnostics; забыл наверное.
     
  14. Автор темы
    Oinvizion Craft

    Oinvizion Craft Активный участник Пользователь

    Баллы:
    76
    Программа не доходит до
    process.OutputDataReceived += new DataReceivedEventHandler((sender, e) => {
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Выводить нужно output
     
  16. Автор темы
    Oinvizion Craft

    Oinvizion Craft Активный участник Пользователь

    Баллы:
    76
    Ну поверь, без System.Diagnostics оно вообще майн не запустит. А всё открывается, и java-вская консоль с логами, но в моём richtextbox пусто
    Типо так что ли?
    richTextBox1.AppendText(Convert.ToString(output));
    process.OutputDataReceived += new DataReceivedEventHandler((sender, e) => {
    MessageBox.Show("123");

    Сообщение не выводится, следовательно программа игнорирует process.OutputDataReceived += new DataReceivedEventHandler((sender, e) => {
     
  17. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Есть еще RedirectStandardError = true
    process.ErrorDataReceived += new DataReceivedEventHandler((sender, e) => {
    В некоторых версиях майна идет еррор стреам.
     
  18. Автор темы
    Oinvizion Craft

    Oinvizion Craft Активный участник Пользователь

    Баллы:
    76
    RedirectStandardError = true
    уже пробывал - не помогло
    Он тупо игнорит это:
    process.Output/ErrorDataReceived += new DataReceivedEventHandler((sender, e) => {
    MessageBox.Show("123");
     
  19. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
            Info.UseShellExecute = false;
            Info.RedirectStandardOutput = true;
            Info.RedirectStandardError = true;
            Process process = new Process();
            process.StartInfo = Info;
            Action<object, DataReceivedEventArgs> actionWrite = (sender, e) =>
            {
                Console.WriteLine(e.Data);
            };
            process.ErrorDataReceived += (sender, e) => actionWrite(sender, e);
            process.OutputDataReceived += (sender, e) => actionWrite(sender, e);
            process.Start();
            process.BeginOutputReadLine();
            process.BeginErrorReadLine();
            process.WaitForExit();
     
  20. Автор темы
    Oinvizion Craft

    Oinvizion Craft Активный участник Пользователь

    Баллы:
    76
    Спасибо огромное, работает.
    Не знаешь как решить эту проблему:
    "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "richTextBox1" не из того потока, в котором он был создан."
     

Поделиться этой страницей