gpt4 book ai didi

c# - 从 .jar 文件捕获非标准输出

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:26 24 4
gpt4 key购买 nike

我正在尝试使用 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。任何帮助将不胜感激。

编辑1:我发现 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;
}

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

最佳答案

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

关于c# - 从 .jar 文件捕获非标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15851710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com