本程序为一个简单的Spring服务器程序,为Minecraft游戏端以及python数据生成端的数据传输提供一个解决方案。
Minecraft游戏端的数据获取mod,请见McMusic
本程序数据传输流程概念如下图所示,简单来说,就是建立一个数据转发的中间程序,彻底将大模型或OCR流程与游戏进行机器解绑。
- JDK >= 17
- maven
mvn clean package
# Ouput Jar Package will in './target'
程序辨识数据的方式使用了玩家名称PlayerName
,数据自Minecraft游戏端发送至服务器时,会同时发送当前数据所属的玩家名称,同样接收数据端向服务器请求数据时,也需要告知所需数据属于的玩家名称。
所以不管是从哪端建立与服务器的连接,最需要注意的就是玩家名称为何。
python端通常为数据接收端,而本程序数据接收端与服务器连接的协议采用了Websocket协议,方便实现当新的数据抵达服务器时,服务器主动发送数据给接收端。
Webosocket的url可见Api章节,为了不增加使用者自己实现python的Websocket客户端的麻烦,本程序也提供了相应模块实现了与服务器建立连接,同时提供相应函数令使用者调用已接收之数据。
python 模块文件 GetData.py
pip install websocket-client
import DataGet
dataGet = DataGet.DataGet()
本程序同样提供了使用模块的简单例子,模拟了获取到数据 -> OCR处里 -> 音乐生成
的整体过程,细节在例子程序中注释。
example.py
- setServerHost
设置当前需要建立连接之服务器地址,预设是我目前已部属的服务器地址ws://m7.ctymc.cn:21443
,注意以下两点:- 若调用此函数时,未关闭调用前已创建的连接,服务器新地址生效要等到旧连接关闭,重新建立连接之时
- 传入的服务器地址格式为
ws://<host>:<port>
或是使用wss协议的wss://<host>:<port>
def setServerHost(host: str) -> None:
# host : 服务器地址
# return value : None
- buildConnect
此函数用来建立与服务器的Websocket连接,注意:若当前已建立了连接且并未断开,调用此函数将直接return
def buildConnect(playerName: str) -> None:
# playerName : 需要获取哪个玩家的数据
# return value : None
- closeConnect
此函数用来断开与服务器的Websocket连接,注意:若当前未建立连接,调用此函数将直接return
def closeConnect() -> None:
# return value : None
- getState
此函数用来获取当前的数据状态,区分为可用与不可用,不可用状态的数据就不是游戏数据了,通常是一些服务器发送过来的提示信息。
def getState() -> bool:
# return value : bool, 表示当前数据是否为可用状态
- getDataDictDeep
此函数用来获取当前的数据,以字典的形式回传,注意:此函数为深拷贝了目前类中储存的数据值,并非引用。
建议在调用此函数之前,先对数据状态getState()
进行检查,若当前状态为不可用,回传值为空字典。
def getDataDictDeep() -> dict:
# return value : dict, 当前数据
- getDataString
此函数用来获取当前接收到的消息,如果当前状态为不可用的话,此函数返回的便是服务器发送来的提示消息。
若当前状态为可用,此函数返回的是当前数据的字符串形式。
def getDataString() -> str:
# return value : str, 当前接收到的消息
- isWebsocketClose
检查当前连接是否关闭。
def isWebsocketClose() -> bool:
# return value : bool, 当前连接是否关闭
Minecraft端为数据发送端,搭配可获取数据以及发送数据的模组之整体项目为McMusic。
注:当前McMusic项目的main分支已同步了与服务器连接功能,旧版项目在backup分支
本程序限制了相同玩家名的数据发送端,只能有一个发送端能发送数据,所以尽量不要重名。
设置当前Minecraft数据发送端玩家名称的方式也很简单,更改McMusic项目中配置文件run/outputDataConfig.json
。
同样,更改要上传数据的服务器地址也是在配置文件中更改,格式为server:port
// run/outputDataConfig.json
// *Default
{
"PauseSecond": 5.0, // how long between each output
"SavePath": ".", // where to save ouput files
// e.g. /home/novel2430
// --> DO NOT put "/" at the path end! <--
// --> path "." means directory `run` <--
"Debug": true, // need or not to print thread log
"Calculate": true, // need or not to do calculation
"URL": "http://127.0.0.1:44349", // Data Transfer Server Address
"PlayerName": "novel" // Player Name
}
本程序对于数据的上传采用的是HTTP协议,而数据的获取则是Websocket协议,所以不管是发送端还是获取端,只要能建立相应协议的连接,都能与服务器进行通信。
而程序的Api接口,则详见Api章节。