8 Commits

Author SHA1 Message Date
a084d39b02 Update version to v1.6.1 2023-06-04 20:05:50 +08:00
6c19c09c00 Fix deserialization formatting error (#185) 2023-06-04 20:05:32 +08:00
c6e0b51ea6 Fix deserialization formatting error 2023-06-03 00:27:34 +08:00
bcb88740f1 Upgrade to 1.6.0 2023-06-03 00:11:12 +08:00
290c4fbf8c DON'T LOCK PLAYER! 2023-05-21 21:41:37 +08:00
564f4d1e56 Fix CI branch 2023-05-21 21:14:41 +08:00
66fb25aa9b Add url to enable log 2023-05-21 21:04:02 +08:00
c3c2ed08a7 Update player command response handler 2023-05-21 20:51:12 +08:00
9 changed files with 21 additions and 28 deletions

View File

@@ -5,7 +5,7 @@ on:
paths:
- "**.java"
branches:
- "for-unstable"
- "master"
pull_request:
paths:
- "**.java"
@@ -35,7 +35,7 @@ jobs:
restore-keys: |
${{ runner.os }}-gradle-
- name: Download latest grasscutter jar
run: wget https://nightly.link/Grasscutters/Grasscutter/workflows/build/unstable/Grasscutter.zip && mkdir lib && unzip Grasscutter.zip -d lib
run: wget https://nightly.link/Grasscutters/Grasscutter/workflows/build/development/Grasscutter.zip && mkdir lib && unzip Grasscutter.zip -d lib
- name: Change permission
run: chmod +x gradlew

View File

@@ -4,10 +4,6 @@
一个为第三方客户端开放GC命令执行接口的插件
## 分支说明
本分支目的在于兼容 GC 的 `unstable` 分支
## 使用本插件的应用
- [GrasscutterTools](https://github.com/jie65535/GrasscutterCommandGenerator) —— Windows 客户端工具
- [JGrasscutterCommand](https://github.com/jie65535/JGrasscutterCommand) —— [Mirai](https://github.com/mamoe/mirai) 插件在QQ里执行命令
@@ -74,7 +70,7 @@
## `config.json`
```json5
```json
{
// 控制台连接令牌
"consoleToken": "",
@@ -263,7 +259,7 @@ public final class JsonResponse {
| message | `Success` | `String` |
| data | `{}` | `JsonObject` |
```json5
```json
{
"retcode": 200,
"message": "success",

View File

@@ -4,10 +4,6 @@
A plugin that opens the GC command execution interface for third-party clients
## Branch Description
The purpose of this branch is to be compatible with the 'unstable' branch of GC
## Applications using this plug-in
- [GrasscutterTools](https://github.com/jie65535/GrasscutterCommandGenerator) —— Windows Client Tools
- [JGrasscutterCommand](https://github.com/jie65535/JGrasscutterCommand) —— [Mirai](https://github.com/mamoe/mirai) Plugin, run commands in QQ
@@ -248,7 +244,7 @@ Success
| message | `Success` | `String` |
| data | `{}` | `JsonObject` |
```json5
```json
{
"retcode": 200,
"message": "success",

View File

@@ -4,7 +4,7 @@ plugins {
}
group 'com.github.jie65535.opencommand'
version '1.5.2'
version '1.6.1'
sourceCompatibility = 17
targetCompatibility = 17
@@ -18,7 +18,7 @@ dependencies {
}
jar {
jar.baseName = 'opencommand-for-unstable'
jar.baseName = 'opencommand'
destinationDir = file(".")
}

View File

@@ -44,13 +44,11 @@ public final class EventListeners {
* @param uid 玩家uid
* @return 新的玩家消息处理类
*/
public static StringBuilder getPlayerNewMessageHandler(int uid) {
public static StringBuilder getPlayerMessageHandler(int uid) {
var handler = playerMessageHandlers.get(uid);
if (handler == null) {
handler = new StringBuilder();
playerMessageHandlers.put(uid, handler);
} else {
handler.setLength(0);
}
return handler;
}

View File

@@ -58,7 +58,7 @@ public final class OpenCommandHandler implements Router {
var req = context.bodyAsClass(JsonRequest.class);
if (req.action.equals("sendCode")) {
int playerId = (int) req.data;
int playerId = (int)Double.parseDouble(req.data.toString());
var player = plugin.getServer().getPlayerByUid(playerId);
if (player == null) {
context.json(new JsonResponse(404, "Player Not Found."));
@@ -152,11 +152,12 @@ public final class OpenCommandHandler implements Router {
context.json(new JsonResponse(404, "Player not found"));
return;
}
// Player MessageHandler do not support concurrency
var handler = EventListeners.getPlayerMessageHandler(player.getUid());
//noinspection SynchronizationOnLocalVariableOrMethodParameter
synchronized (player) {
// Player MessageHandler do not support concurrency
var handler = EventListeners.getPlayerNewMessageHandler(player.getUid());
synchronized (handler) {
try {
handler.setLength(0);
CommandMap.getInstance().invoke(player, player, command);
context.json(new JsonResponse(handler.toString()));
} catch (Exception e) {

View File

@@ -61,7 +61,7 @@ public final class OpenCommandOnlyHttpHandler implements Router {
var req = context.bodyAsClass(JsonRequest.class);
if (req.action.equals("sendCode")) {
int playerId = (int) req.data;
int playerId = (int)Double.parseDouble(req.data.toString());
var player = SocketData.getPlayer(playerId);
if (player == null) {
context.json(new JsonResponse(404, "Player Not Found."));

View File

@@ -159,11 +159,12 @@ public class SocketClient {
sendPacket(new HttpPacket(404, "Player not found."), packet.packetID);
return;
}
// Player MessageHandler do not support concurrency
var handler = EventListeners.getPlayerMessageHandler(playerData.getUid());
//noinspection SynchronizationOnLocalVariableOrMethodParameter
synchronized (playerData) {
// Player MessageHandler do not support concurrency
var handler = EventListeners.getPlayerNewMessageHandler(playerData.getUid());
synchronized (handler) {
try {
handler.setLength(0);
CommandMap.getInstance().invoke(playerData, playerData, command);
sendPacket(new HttpPacket(200, handler.toString()), packet.packetID);
} catch (Exception e) {

View File

@@ -1,7 +1,8 @@
{
"name": "opencommand-plugin",
"description": "Open command interface for third-party clients",
"version": "dev-1.5.2",
"version": "1.6.1",
"mainClass": "com.github.jie65535.opencommand.OpenCommandPlugin",
"authors": ["jie65535", "方块君"]
"authors": ["jie65535", "方块君"],
"api": 2
}