开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

[BE教程] WebSocket服务器搭建教程!:发送一条指令

 发表于 2022-6-16 21:11:37|显示全部楼层|阅读模式 IP:广东省
本帖最后由 啊啊啊啊苦力怕 于 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库:
  1. pip install websockets
复制代码
安装完成后在IDLE里试一下:
image.png
没有报错就正确。


然后我们开始编程

然后看一下数据包格式:

  1. {
  2.         "body": {
  3.                 "origin": {
  4.                         "type": "player" #执行者
  5.                 },
  6.                 "commandLine": "agent create", #指令
  7.                 "version": 1
  8.         },
  9.         "header": {
  10.                 "requestId": "00000000-0000-0000-0000-000000000000",
  11.                 "messagePurpose": "commandRequest",
  12.                 "version": 1,
  13.                 "messageType":"commandRequest"
  14.         }
  15. }
复制代码
劝退你了?别急,上代码!
  1. #asyncio库,用于异步I/O,是ws的基础。
  2. import asyncio
  3. #ws库,用于发送接收数据包
  4. import websockets
  5. #将字典(dict)转成json字符串
  6. import json

  7. async def recv(websocket,path):
  8.     #输出连接信息,可以去掉。
  9.     print('已连接:{}'.format(path))
  10.     #数据包
  11.     #commandLine:指令,可替换
  12.     #requestId:请求ID,可替换为相同格式字符串
  13.     data = {
  14.         "body": {
  15.                 "origin": {
  16.                         "type": "player" #执行者
  17.                 },
  18.                 "commandLine": "agent create", #指令
  19.                 "version": 1
  20.         },
  21.         "header": {
  22.                 "requestId": "00000000-0000-0000-0000-000000000000",#ID,可以随便写相同格式的
  23.                 "messagePurpose": "commandRequest",
  24.                 "version": 1,
  25.                 "messageType": "commandRequest"
  26.         }
  27. }
  28.     data = json.dumps(data)
  29.     #发送
  30.     await websocket.send(data)
  31.     #函数运行完成,连接关闭。


  32. ip = 'localhost' #对自己开放,可以换成你的IP以让局域网的Minecraft连接。
  33. port = 19132 #字符串,随便填,只要不与本机开放的端口重合就可以。
  34. #信息↑服务器↓
  35. server = websockets.serve(recv,ip,port)
  36. #让服务器一直启动
  37. asyncio.get_event_loop().run_until_complete(server)
  38. asyncio.get_event_loop().run_forever()
复制代码
好了,在MC里输入/connect localhost:19132(ip:端口)
如果一切正常,那么就会出现以下实体:
image.png
没反应再试一次就可以了。


如果大家觉得不错,那么请送我个铁粒,拒绝白嫖,从我做起
下期预告:订阅事件。

评分

参与人数 1铁粒 +2收起理由
 hep*** + 2赞一个!

查看全部评分

苦力怕论坛,感谢有您~

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供支持 | GMT+8, 2024-12-29 05:28

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号-3