1

我正在尝试制作一个用于在 C# 中托管 Minecraft CraftBukkit 服务器的 GUI。CraftBukkit 服务器使用 .jar 托管,其源代码可在此处找到:https ://github.com/Bukkit/CraftBukkit/ 。

到目前为止,我能够从它接收输出并像这样给它输入:

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;
}

有什么办法可以调用这个类吗?

4

2 回答 2

1

不幸的是,java 和 C# 之间的跨进程通信并不是那么简单。您最好的选择是将 list 命令发送到服务器并解析输出,或者如果您愿意编写一些 java,您可以为 minecraft 服务器创建一个插件,该插件打开一个套接字并来回发送信息。

于 2013-05-07T12:48:49.480 回答
0

我找到了解决方案。这实际上很容易。

首先,我创建一个将启动 .jar 文件的进程。然后我执行以下操作:

Process.OutputDataReceived += ServerOutputHandler.ServerOutputReceived;
Process.ErrorDataReceived += ServerOutputHandler.ServerOutputReceived;

在我开始这个过程之后(Process.Start):

Process.BeginOutputReadLine();
Process.BeginErrorReadLine();

如果您想了解有关处理 .jar 文件的更多信息,请随时查看我的开源项目(我不久前放弃了)ServerCrafter。对于我上面提到的代码部分,请看这里:Server Crafter source code: ServerCrafter\ServerCrafter.ClassLibrary\ClassLibrary\Server\Server.cs

于 2014-01-04T17:16:19.950 回答