6 Commits

Author SHA1 Message Date
ded44804d4 Fix JsonUtils compatibility issue
Fix locking player object when executing command issue
2023-02-25 16:33:42 +08:00
4b8eb490f5 Remove version prefix dev 2023-02-18 15:49:46 +08:00
70261df520 Fix deprecated method JsonUtils.loadToClass 2023-02-18 15:47:51 +08:00
5c2be0e776 Update version to v1.5.1 2023-02-18 15:46:01 +08:00
72948121d6 Update README_en-US.md 2022-10-27 11:26:23 +08:00
42c748ad2e Update README.md 2022-10-27 11:24:55 +08:00
6 changed files with 31 additions and 10 deletions

View File

@@ -4,6 +4,11 @@
一个为第三方客户端开放GC命令执行接口的插件
## 使用本插件的应用
- [GrasscutterTools](https://github.com/jie65535/GrasscutterCommandGenerator) —— Windows 客户端工具
- [JGrasscutterCommand](https://github.com/jie65535/JGrasscutterCommand) —— [Mirai](https://github.com/mamoe/mirai) 插件在QQ里执行命令
- 待补充
## 服务端安装
1. 在 [Release](https://github.com/jie65535/gc-opencommand-plugin/releases) 下载 `jar`
@@ -286,4 +291,4 @@ public final class JsonResponse {
|---------|------------------|----------|
| retcode | `200` | `Int` |
| message | `Success` | `String` |
| data | `Command return` | `String` |
| data | `Command return` | `String` |

View File

@@ -4,6 +4,11 @@
A plugin that opens the GC command execution interface for third-party clients
## 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
- TODO
## Server installation
1. Download the `jar` in [Release](https://github.com/jie65535/gc-opencommand-plugin/releases)
@@ -272,4 +277,4 @@ Success
|---------|------------------|----------|
| retcode | `200` | `Int` |
| message | `Success` | `String` |
| data | `Command return` | `String` |
| data | `Command return` | `String` |

View File

@@ -4,7 +4,7 @@ plugins {
}
group 'com.github.jie65535.opencommand'
version 'dev-1.5.0'
version '1.5.1'
sourceCompatibility = 17
targetCompatibility = 17

View File

@@ -46,6 +46,8 @@ public final class OpenCommandHandler implements Router {
private static final Map<String, Integer> codes = new HashMap<>();
private static final Int2ObjectMap<Date> codeExpireTime = new Int2ObjectOpenHashMap<>();
private static final Int2ObjectMap<MessageHandler> playerMessageHandlers = new Int2ObjectOpenHashMap<>();
public static void handle(Context context) {
var plugin = OpenCommandPlugin.getInstance();
var config = plugin.getConfig();
@@ -152,13 +154,18 @@ public final class OpenCommandHandler implements Router {
return;
}
// Player MessageHandler do not support concurrency
var handler = playerMessageHandlers.get(player.getUid());
if (handler == null) {
handler = new MessageHandler();
playerMessageHandlers.put(player.getUid(), handler);
}
//noinspection SynchronizationOnLocalVariableOrMethodParameter
synchronized (player) {
synchronized (handler) {
try {
var resultCollector = new MessageHandler();
player.setMessageHandler(resultCollector);
handler.setMessage("");
player.setMessageHandler(handler);
CommandMap.getInstance().invoke(player, player, command);
context.json(new JsonResponse(resultCollector.getMessage()));
context.json(new JsonResponse(handler.getMessage()));
} catch (Exception e) {
plugin.getLogger().warn("Run command failed.", e);
context.json(new JsonResponse(500, "error", e.getLocalizedMessage()));

View File

@@ -29,6 +29,8 @@ import emu.grasscutter.server.event.player.PlayerQuitEvent;
import emu.grasscutter.utils.JsonUtils;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
public final class OpenCommandPlugin extends Plugin {
@@ -106,7 +108,8 @@ public final class OpenCommandPlugin extends Plugin {
}
} else {
try {
config = JsonUtils.loadToClass(configFile.getAbsolutePath(), OpenCommandConfig.class);
config = JsonUtils.decode(Files.readString(configFile.toPath(), StandardCharsets.UTF_8),
OpenCommandConfig.class);
} catch (Exception exception) {
config = new OpenCommandConfig();
getLogger().error("[OpenCommand] There was an error while trying to load the configuration from config.json. Please make sure that there are no syntax errors. If you want to start with a default configuration, delete your existing config.json.");
@@ -126,7 +129,8 @@ public final class OpenCommandPlugin extends Plugin {
saveData();
} else {
try {
data = JsonUtils.loadToClass(dataFile.getAbsolutePath(), OpenCommandData.class);
data = JsonUtils.decode(Files.readString(dataFile.toPath(), StandardCharsets.UTF_8),
OpenCommandData.class);
} catch (Exception exception) {
data = new OpenCommandData();
getLogger().error("[OpenCommand] There was an error while trying to load the data from data.json. Please make sure that there are no syntax errors. If you want to start with a default data, delete your existing data.json.");

View File

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