使用 java 操纵 minecraft 服务器 input/output
using java to manipulate a minecraft server input/output
我正在尝试通过 java 管理我的 Minecraft 服务器,但即使我可以轻松读取输出,我也无法获取命令甚至文本:
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd C:\my\path\ && java -jar server.jar nogui");
builder.redirectErrorStream(true);
Process p;
p = builder.start();
this.p = p;
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (loop) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
这很好用,但是当我尝试发送命令时它根本不起作用:
OutputStream os = BotData.minecraftServer.getOutputStream();
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(os));
String stop = "stop";
try {
out.write(stop + "\n");
out.write("\n");
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我试过 "Command:>>" + stop + "\n"
在 stop
等
之前有或没有 /
强制或非强制终止进程,在线程中启动它然后停止...
我无法使用文本或命令。
document 表示来自 cmd 的命令应带有前导 /
。
尝试发送 /stop
而不是 stop
.
另外请注意,当进程处于活动状态时(默认情况下),行 line = r.readLine();
可能永远不会 return 成为 null
。
好的,找到了,需要使用 write() newline() 然后 flush() 将任何内容发送到控制台。
我的第二个问题是对我的流程的无效引用。
销毁进程不起作用,但停止命令起作用。
使用 / 没用,\n 不会替换 newline()
我正在尝试通过 java 管理我的 Minecraft 服务器,但即使我可以轻松读取输出,我也无法获取命令甚至文本:
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd C:\my\path\ && java -jar server.jar nogui");
builder.redirectErrorStream(true);
Process p;
p = builder.start();
this.p = p;
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (loop) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
这很好用,但是当我尝试发送命令时它根本不起作用:
OutputStream os = BotData.minecraftServer.getOutputStream();
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(os));
String stop = "stop";
try {
out.write(stop + "\n");
out.write("\n");
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我试过 "Command:>>" + stop + "\n"
在 stop
等
/
强制或非强制终止进程,在线程中启动它然后停止...
我无法使用文本或命令。
document 表示来自 cmd 的命令应带有前导 /
。
尝试发送 /stop
而不是 stop
.
另外请注意,当进程处于活动状态时(默认情况下),行 line = r.readLine();
可能永远不会 return 成为 null
。
好的,找到了,需要使用 write() newline() 然后 flush() 将任何内容发送到控制台。
我的第二个问题是对我的流程的无效引用。
销毁进程不起作用,但停止命令起作用。
使用 / 没用,\n 不会替换 newline()