開發想法來自 TISUnion/ChatBridge
minecraft mcdr chat bridge 實現
flowchart LR
subgraph Minecraft Host
Survival[Minecraft Survival Server]
Create[Minecraft Create Server]
Mirror[Minecraft Mirror Server]
server_else(...)
end
MCDR("mcdr-ChatBridgeE-plugin") <--> Survival & Create & Mirror & server_else
subgraph server plugins
plugin_discord(discord)
else_plugin(...)
end
plugins <--> plugin_discord & else_plugin
subgraph cli commands
cli_reload(plugin reload)
cli_add(plugin add)
cli_remove(plugin remove)
cli_list(plugin list)
cli_else(...)
end
cli --> cli_reload & cli_add & cli_remove & cli_list & cli_else
server(ChatBridgeE Server)
client <--> MCDR
server <--> client & plugins & cli
由於採用明文傳輸,請於防火牆中關閉 8081
或是您所設定的端口,在傳輸中可能會包含 RCON 密碼/端口
等私密信息,請做好安全防範。
以下 用戶端
皆指 MCDR 端
,事件名後的代號有以下說明
代號 | 代表 |
---|---|
S |
由伺服器發送 |
C |
由用戶端發送 |
A |
由伺服器向全部用戶端發送並排除事件原觸發者 |
由用戶端發送至伺服器,伺服器進行轉發並呼叫插件中註冊的事件
客戶端伺服器啟動中的事件
args: [ctx: Context]
客戶端伺服器啟動完成的事件
args: [ctx: Context]
客戶端伺服器關閉的事件
args: [ctx: Context]
於客戶端伺服器玩家發送的訊息事件
args: [ctx: Context, player_name: str, content: str]
於客戶端伺服器玩家加入的訊息事件
args: [ctx: Context, player_name: str]
於客戶端伺服器玩家退出的訊息事件
args: [ctx: Context, player_name: str]
檔案同步事件,需搭配 FileEncode
類別,將會把資料編譯成 bytes
以下為生成的數據範例:
offset |
bytes |
description |
---|---|---|
0 |
1 |
flag |
1 |
2 |
path length (n) |
3 |
n |
path |
3+n |
4 |
data length (m) |
7+n |
m |
data |
7+n+m |
2 |
server name length (o) |
9+n+m |
o |
server name |
進行編碼時 -> FileEncode(...args).encode()
進行解碼時 -> FileEncode.decode(<bytes>)
FileEncode
類別分別於:
Client
->chatbridgee/utils.py
(from chatbridgee.utils import FileEncode
)Server
->server/utils/utils.py
(from server.utils import FileEncode
)
args: [ctx: Context, data: FileEncode]
由伺服器發送至客戶端,客戶端會返回 cmd_callback
事件
目前包含以下事件
stats
command- success
code: 0
stats_name: <請求的統計名>
data: <請求的統計資料>
total: <統計總計值>
- unknown stats
code: 1
- no stats_helper
code: 2
- success
當有人向伺服器發起 ping
伺服器會向對方發送
向用戶端發送錯誤訊息,ex: 登入失敗
,重複登入
當新的用戶與伺服器連接時呼叫
當有用戶與伺服器斷開連接時呼叫
pip install mypy
stubgen -p plugins -p server -o types --include-private