UID184140性别保密经验 EP铁粒 粒回帖0主题精华在线时间 小时注册时间2021-11-27最后登录1970-1-1
| 本帖最后由 啊啊啊啊苦力怕 于 2022-6-16 21:53 编辑
重锁粥汁,在MC中有一条指令叫/connect。这条指令连接的就是WS服务器。ws服务器能实现一下功能:
--使用用不了的指令
--快速生成建筑(如tr-func一样的功能)
--获取玩家行为
--自定义功能
因为妄抑的原因,某些服务器都倒闭了,没倒闭的都要马内,而苦力怕论坛又没有这类教程,所以今天我们来康康这是怎么做的
首先了解一下ws(websocket)。
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。 ——百度知道
许多编程语言都可以做ws,这次我们用Python。
下载: Python
基础教程: 3.10.5 Documentation (python.org)
我们先解决程序依赖:
安装websockets库: 安装完成后在IDLE里试一下:
没有报错就正确。
然后我们开始编程
然后看一下数据包格式:
- {
- "body": {
- "origin": {
- "type": "player" #执行者
- },
- "commandLine": "agent create", #指令
- "version": 1
- },
- "header": {
- "requestId": "00000000-0000-0000-0000-000000000000",
- "messagePurpose": "commandRequest",
- "version": 1,
- "messageType":"commandRequest"
- }
- }
复制代码 劝退你了?别急,上代码!
- #asyncio库,用于异步I/O,是ws的基础。
- import asyncio
- #ws库,用于发送接收数据包
- import websockets
- #将字典(dict)转成json字符串
- import json
- async def recv(websocket,path):
- #输出连接信息,可以去掉。
- print('已连接:{}'.format(path))
- #数据包
- #commandLine:指令,可替换
- #requestId:请求ID,可替换为相同格式字符串
- data = {
- "body": {
- "origin": {
- "type": "player" #执行者
- },
- "commandLine": "agent create", #指令
- "version": 1
- },
- "header": {
- "requestId": "00000000-0000-0000-0000-000000000000",#ID,可以随便写相同格式的
- "messagePurpose": "commandRequest",
- "version": 1,
- "messageType": "commandRequest"
- }
- }
- data = json.dumps(data)
- #发送
- await websocket.send(data)
- #函数运行完成,连接关闭。
- ip = 'localhost' #对自己开放,可以换成你的IP以让局域网的Minecraft连接。
- port = 19132 #字符串,随便填,只要不与本机开放的端口重合就可以。
- #信息↑服务器↓
- server = websockets.serve(recv,ip,port)
- #让服务器一直启动
- asyncio.get_event_loop().run_until_complete(server)
- asyncio.get_event_loop().run_forever()
复制代码 好了,在MC里输入/connect localhost:19132(ip:端口)
如果一切正常,那么就会出现以下实体:
没反应再试一次就可以了。
如果大家觉得不错,那么请送我个铁粒,拒绝白嫖,从我做起
下期预告:订阅事件。
|
评分查看全部评分
|