• Stars
    star
    365
  • Rank 116,219 (Top 3 %)
  • Language
    Java
  • License
    GNU Affero Genera...
  • Created over 2 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A plugin that open the GC command execution interface for third-party clients

gc-opencommand-plugin

中文 | English

一个为第三方客户端开放GC命令执行接口的插件

使用本插件的应用

服务端安装

  1. Release 下载 jar
  2. 放入 plugins 文件夹即可

注意,如果出现以下错误:

INFO:PluginManager Enabling plugin: opencommand-plugin
Exception in thread "main" java.lang.NoSuchMethodError: 'void emu.grasscutter.server.event.EventHandler.register(emu.grasscutter.plugin.Plugin)'
at com.github.jie65535.opencommand.OpenCommandPlugin.onEnable(OpenCommandPlugin.java:49)
at emu.grasscutter.plugin.PluginManager.lambda$enablePlugins$3(PluginManager.java:131)

请使用v1.2.1版本插件,因为该报错表示你的服务端是旧版!

控制台连接

  1. 首次启动时,会在 plugins 目录下生成一个 opencommand-plugin 目录,打开并编辑 config.json
  2. 设置 consoleToken 的值为你的连接秘钥,建议使用至少32字符的长随机字符串。
  3. 重新启动服务端即可生效配置
  4. 在客户端中选择控制台身份,并填写你的 consoleToken 即可以控制台身份运行指令

多服务器

主服务器 (Dispatch)

  1. opencommand-plugin 目录下打开 config.json
  2. 修改 socketPort 值为一个未被使用的端口
  3. 设置 socketToken 多服务器通信密钥,建议使用至少32字符的长随机字符串。
  4. 重新启动服务端即可生效配置

子服务器 (Game)

  1. opencommand-plugin 目录下打开 config.json
  2. 修改 socketHostsocketPort 值为主服务器的地址和端口
  3. 设置 socketToken 和主服务器相同的值
  4. 设置 socketDisplayName 值为你的服务器名称 (用途请见下方)
  5. 重新启动服务端即可生效配置

构建说明

  1. 克隆仓库
  2. 在目录下新建 lib 目录
  3. grasscutter-1.1.x-dev.jar 放入 lib 目录
  4. gradle build

玩家使用流程

  1. 在客户端中填写服务地址,确认是否支持
  2. 填写UID,发送验证码
  3. 将游戏内收到的4位整数验证码填入客户端校验
  4. 享受便利!

客户端请求流程

  1. ping 确认是否支持 opencommand 插件
  2. sendCode 向指定玩家发送验证码(1分钟内不允许重发),保存返回的 token
  3. 使用 token4位整数验证码发送 verify 校验
  4. 如果验证通过,可以使用该 token 执行 command 动作

config.json

{
  // 控制台连接令牌
  "consoleToken": "",
  // 验证码过期时间(秒)
  "codeExpirationTime_S": 60,
  // 临时令牌过期时间(秒)
  "tempTokenExpirationTime_S": 300,
  // 授权令牌最后使用过期时间(小时)
  "tokenLastUseExpirationTime_H": 48,
  // 多服务器通信端口
  "socketPort": 5746,
  // 多服务器通信密钥
  "socketToken": "",
  // 多服务器Dispatch服务器地址
  "socketHost": "127.0.0.1",
  // 多服务器显示名称
  "socketDisplayName": ""
}

API /opencommand/api

示例

https://127.0.0.1/opencommand/api

Request 请求

public final class JsonRequest {
    public String token = "";
    public String action = "";
    public String server = "";
    public Object data = null;
}

Response 响应

public final class JsonResponse {
    public int retcode = 200;
    public String message = "Success";
    public Object data;
}

Actions 动作

测试连接

Request
请求参数 请求数据 类型
action ping String
Response
返回参数 返回数据 类型
retcode 200 Int
message Success String
data null null

获取在线玩家

Request
请求参数 请求数据 类型
action online String
Response
返回参数 返回数据 类型
retcode 200 Int
message Success String
data {"count": 0, playerList": []} JsonObject

发送验证码

Request
请求参数 请求数据 类型
action sendCode String
data uid Int
Response
返回参数 返回数据 类型
retcode 200 Int
message Success String
data token String

验证验证码

Request
请求参数 请求数据 类型
action verify String
token token String
data code Int
Response

成功

返回参数 返回数据 类型
retcode 200 Int
message Success String
data null null

失败

返回参数 返回数据 类型
retcode 400 Int
message Verification failed String
data null null

执行命令

Request
请求参数 请求数据 类型
action command String
token token String
data command String
Response

成功

返回参数 返回数据 类型
retcode 200 Int
message Success String
data Command return String

执行控制台命令

获取运行模式

Request
请求参数 请求数据 类型
action runmode String
token token String
Response

成功

返回参数 返回数据 类型
retcode 200 Int
message Success String
data 1 (多服务器) / 0 (单服务器) Int

获取多服务器列表

Request
请求参数 请求数据 类型
action server String
token token String
Response

成功

返回参数 返回数据 类型
retcode 200 Int
message Success String
data {} JsonObject
{
  "retcode": 200,
  "message": "success",
  "data": {
    // 服务器 UUID
    "13d82d0d-c7d9-47dd-830c-76588006ef6e": "2.8.0 服务器",
    "e6b83224-a761-4023-be57-e054c5bb823a": "2.8.0 开发服务器"
  }
}

执行命令

Request

如果为单服务器则无需填写服务器 UUID

请求参数 请求数据 类型
action command String
token token String
server UUID String
data command String
Response

成功

返回参数 返回数据 类型
retcode 200 Int
message Success String
data Command return String

More Repositories

1

GrasscutterCommandGenerator

Command Generator and Gacha Banner Editor
C#
1,889
star
2

awesome-balatro

A list of Balatro Mods and Tools
327
star
3

gc-openchat-plugin

A Grasscutter plugin that allows players to chat within the server.
Java
44
star
4

JGrasscutterCommand

Run Grasscutter command in QQ through Mirai
Kotlin
37
star
5

mirai-console-jnr-plugin

MiraiConsolePlugin 自定义戳一戳回复消息
Kotlin
19
star
6

mirai-console-jcc-plugin

基于Glot接口的mirai-console在线编译器插件
Kotlin
13
star
7

mirai-console-j24-plugin

24点小游戏
Kotlin
13
star
8

mirai-console-jcf-plugin

基于Mirai Console的Curseforge插件
Kotlin
10
star
9

maze

C++ 控制台 迷宫 使用了自动生成迷宫算法,实现迷宫基本玩法
C++
5
star
10

mirai-console-jhr-plugin

JHR - 基于MiraiConsole的赛马游戏插件
Kotlin
5
star
11

gc-openpermission-plugin

A Grasscutter plugin allows users to customize permissions
Java
5
star
12

Ancient-Spider

C++ 控制台 蜘蛛纸牌游戏
C++
5
star
13

JMailNotify

Mirai机器人邮件通知
Kotlin
3
star
14

mirai-console-jms-plugin

JMS - 基于MiraiConsole的MC皮肤查询插件
Kotlin
2
star
15

KeyGo

通过注册热键 启动/切换到/最小化 预设应用的小工具
C#
2
star
16

mirai-console-jcab-arg-plugin

Kotlin
2
star
17

IM

使用Qt 5.1 编写的IM(Instant Messaging) 使用TcpSocket通讯 使用SQLite作为数据库
C++
2
star
18

mirai-console-jgs-plugin

Genshin plugin
Kotlin
2
star
19

AuditoriumMS

礼堂票务管理系统 使用C# WinForm编写 使用MS Access作为数据库
C#
2
star
20

SphygmomanometerTester

C#
1
star
21

stm32f10x-uC-OS-II

基于stm32f103zet6加uC/OS-II为内核的项目存档
C
1
star
22

DaemonService

保护指定端口免受攻击,只有通过服务校验以后,将其添加至白名单,才可以连接指定端口。
C++
1
star
23

gc-noplayerstop-plugin

A gc plugin that prevents players from executing stop commands
Java
1
star
24

JChatGPT

OpenAI ChatGPT Mirai Plugin
Kotlin
1
star
25

Landlords

基与酷Q SDK 开发的斗地主游戏
C++
1
star
26

JPicStitcher

Android application for splicing images
Kotlin
1
star
27

CodeMatrix

模仿《赛博朋克 2077》游戏中‘入侵协议’时的小游戏。
C#
1
star
28

JMods

Lua
1
star