Я пытаюсь создать графический интерфейс для размещения серверов Minecraft CraftBukkit в C#. Серверы CraftBukkit размещены с помощью .jar, исходный код которого можно найти здесь: https://github.com/Bukkit/CraftBukkit/.Поймать нестандартный вывод из файла .jar
До сих пор я могу получить выход из него и внести свой вклад в это так:
var serverProcInfo = new ProcessStartInfo("javaw",
"-jar -Xms" + Ram + "M -Xmx" + Ram + "M \"" +
JarFileLocation + "\" -nojline " + AdditionalParams)
{
RedirectStandardInput = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false
};
serverProc = new Process {StartInfo = serverProcInfo };
serverProc.OutputDataReceived += ServerOutputDataReceived;
serverProc.ErrorDataReceived += ServerOutputDataReceived;
serverProc.BeginOutputReadLine();
serverProc.BeginErrorReadLine();
serverProc.WaitForExit();
Я хочу, чтобы создать список всех игроков, которые в настоящее время онлайн.
Когда игрок присоединяется к сообщению, подобному этому, выводится player <playername> has joined the server
. Я знаю, что я мог бы разделить эту строку и получить имя игрока, но я думаю, что это не очень хорошо, так как кто-то может сказать что-то подобное в чате, и моя программа может интерпретировать его так, как будто кто-то присоединился к серверу.
Я видел, что другие программы делают это («BukkitGUI»), но я не уверен, как я мог это сделать. Выводит ли файл .jar список игроков? Что я должен искать в своем исходном коде, чтобы узнать, что он выводит?
Я относительно новичок в C# и никогда не изучал Java. Любая помощь будет оценена по достоинству.
EDIT1: Я обнаружил, что CraftBukkit.jar имеет класс вроде этого:
@SuppressWarnings("unchecked")
public Player[] getOnlinePlayers() {
List<EntityPlayer> online = playerList.players;
Player[] players = new Player[online.size()];
for (int i = 0; i < players.length; i++) {
players[i] = online.get(i).playerConnection.getPlayer();
}
return players;
}
Есть ли способ, я могу назвать этот класс?
Да, к сожалению, это единственный способ, но спасибо за ваш ответ. – davidwroxy