使用Python与minecraft服务器通信

时间:2014-01-02 22:11:10

标签: python subprocess ipc minecraft

当我刚要用一些相关信息回答这个问题时,这个问题被删除了。我认为,虽然它的表达方式让人们不喜欢它,并且没有发布任何代码,但 是一个有用的问题。因此,我决定在这里发布,以及我的部分答案。我当前的代码有一个问题,如果有人知道解决方案,我会很高兴听到它。此外,如果有人知道更清晰的解决方案(例如使用communicate Popen对象的方法),那也会很好。

我记得,问题的相关部分是:

如何使用Python与Minecraft服务器通信?我有一个用户界面设置,但我不确定如何连接到服务器并将命令发送到它。

3 个答案:

答案 0 :(得分:0)

以下是我目前解决此问题的方法。它允许轻松地与服务器通信,但是当没有更多行要读取时,存在挂起对readline的调用的问题。如果有人知道如何解决这个问题,我会很感激他们告诉我。:

from subprocess import Popen, PIPE, STDOUT
server = Popen("java -jar minecraft_server.1.7.4.jar nogui", stdin=PIPE, stdout=PIPE, stderr=STDOUT)
while True:
    print(server.stdout.readline())
    server.stdout.flush()
    command = input("> ")
    if command:
        server.stdin.write(bytes(command + "\r\n", "ascii"))
        server.stdin.flush()

请注意,要使此代码按原样运行,脚本必须与服务器位于同一目录中。

答案 1 :(得分:0)

这是我正在使用的代码,我对rlms的代码进行了一些编辑以解决读取行问题:

setPlayersSelect(select.winner.playerCount + 1)

答案 2 :(得分:0)

https://github.com/Fallen-Breath/MCDReforged

MCDReforged(缩写为 MCDR)是一个使用自定义插件系统提供 Minecraft 服务器管理能力的工具。完全不需要修改或修改原来的 Minecraft 服务器