自动从Minecraft中读取聊天文本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动从Minecraft中读取聊天文本相关的知识,希望对你有一定的参考价值。
在Minecraft中,我希望找到一种方法来自动阅读聊天,如下图所示
为了将虚拟商店中进行的事务记录到PostgreSQL数据库中。最好使用Python。我不拥有Minecraft服务器。
我的计划是找到一种直接读取Minecraft服务器发送的数据包的方法(首选可靠性,但难度不大),或者作为备份计划可能会弄清楚如何屏蔽文本。我找到了一些资源,可以让我将字体更改为monospaced,这将提供更可靠的字体读取方式,我相信在屏幕上为每个字符创建完美一致的位置。我可以面对一个接近黑色但不完全的方向,但不愿意这样做。如上图所示,您可以看到有许多不同颜色的字体可供使用。
即使在如上所述减少它之后,我仍然不确定如何使用python将其转换为文本。
关于我的方法的任何提示?有关如何读取来自服务器的数据包的任何提示?有关从屏幕上抓取文字的提示吗?
首先,正如kuyan所建议的那样,请参阅http://wiki.vg/Main_Page,它可以直接链接到各种可能有用的程序,也可以查看源代码。
例如,在Utilities下,首先出现的是日志代理。
还有一点,有mc3p
,由Joran Beasley建议的程序 - 一个Python代理,有插件支持。它只能达到1.2.5,但sadimusi/mc3p
声称是1.4.2兼容的分叉。正如J.F. Sebastian所说,mc3p
有一个日志插件接口,所以你可以写一个登录到postgres的接口。
如果你想自己阅读数据包,那并不难。您可以在几十行Python中编写一个通用的TCP代理,或者在netcat周围编写两行shellcript中的一个,将数据发送到Python脚本。
困难的部分不是拦截数据;它正在解析协议。 Minecraft可能不会发送“Nightbane:每个100,000美元1个月”,但是“提供:Nightbane:1:tnt:100”或“ x13 x09Nightbane x00 x01 x72 x00 x64”。根据wiki所说的,协议是有记录的,但很差,有时不准确,而wiki有时也是不正确的,官方代码非常丑陋且难以阅读。这意味着找出协议的最佳方法可能是阅读sadimusi / mc3p或McPacketSniffer或ProtoProxy等其他项目之一,此时您必须询问是否更容易使用该项目而不是重新实现它。
无论如何,刮擦屏幕应该是最后的选择。
实际上有更好的方式来阅读Minecraft的聊天,它不需要屏幕抓取或数据包解码。
Minecraft会自动将聊天消息(以及许多其他内容)写入日志文件,包括单人游戏和多人游戏。在Windows上,它们位于%appdata%/.minecraft/logs
。以前的日志使用gzip压缩,但最新会话的日志实时写入文本文件latest.log。聊天消息包含文本[Client thread/INFO]: [CHAT]
。您可以像使用普通文件一样打开它:
import os
with open(os.getenv("APPDATA")+"/.minecraft/logs/latest.log", "r") as logfile:
for line in logfile:
if "[Client thread/INFO]: [CHAT]" in line:
print line,
或者如果你想实时阅读聊天,你可以使用下面的代码,稍微修改一下这个answer的代码:
import time, os
def follow(thefile):
thefile.seek(0,2)
while True:
line = thefile.readline()
if not line:
time.sleep(0.1)
continue
yield line
if __name__ == "__main__":
logfile = open(os.getenv("APPDATA")+"/.minecraft/logs/latest.log", "r")
loglines = follow(logfile)
for line in loglines:
if "[Client thread/INFO]: [CHAT]" in line:
print line,
以上是关于自动从Minecraft中读取聊天文本的主要内容,如果未能解决你的问题,请参考以下文章