Skip to content

Commit d6d6696

Browse files
committed
添加连接WS服务器,执行任意自定义指令和发送消息
1 parent d7f119f commit d6d6696

File tree

6 files changed

+95
-9
lines changed

6 files changed

+95
-9
lines changed

pom.xml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>center.xzy.qb</groupId>
88
<artifactId>MessageSync</artifactId>
9-
<version>1.8-SNAPSHOT</version>
9+
<version>1.9-SNAPSHOT</version>
1010
<packaging>jar</packaging>
1111

1212
<name>MessageSync</name>
@@ -86,5 +86,15 @@
8686
<artifactId>TitleManager</artifactId>
8787
<version>2.2.0</version>
8888
</dependency>
89+
<dependency>
90+
<groupId>org.java-websocket</groupId>
91+
<artifactId>Java-WebSocket</artifactId>
92+
<version>1.3.5</version>
93+
</dependency>
94+
<dependency>
95+
<groupId>com.alibaba</groupId>
96+
<artifactId>fastjson</artifactId>
97+
<version>1.2.47</version>
98+
</dependency>
8999
</dependencies>
90100
</project>

src/main/java/center/xzy/qb/messagesync/Main.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
package center.xzy.qb.messagesync;
22

33
import center.xzy.qb.messagesync.executor.*;
4-
import center.xzy.qb.messagesync.commands.*;
5-
import org.bukkit.GameMode;
64
import org.bukkit.Material;
75
import org.bukkit.inventory.ItemStack;
86
import org.bukkit.inventory.meta.ItemMeta;
97
import org.bukkit.plugin.java.JavaPlugin;
108
import org.bukkit.ChatColor;
119
import center.xzy.qb.messagesync.events.*;
1210
import org.bukkit.plugin.Plugin;
11+
import center.xzy.qb.messagesync.socket.SocketClient;
1312

13+
import java.net.URISyntaxException;
1414
import java.security.MessageDigest;
1515
import java.security.NoSuchAlgorithmException;
1616
import java.util.Arrays;
@@ -21,7 +21,6 @@
2121
import java.sql.DriverManager;
2222
import java.sql.SQLException;
2323
import java.sql.Statement;
24-
import java.sql.ResultSet;
2524

2625
public final class Main extends JavaPlugin {
2726
public static boolean pluginStatus = true;
@@ -31,6 +30,7 @@ public final class Main extends JavaPlugin {
3130
public static Map<String, List<String>> regData = new HashMap<>(); // 注册(二次输入密码)储存的玩家数据
3231
public static Map<String, String> regIpData = new HashMap<>(); // prelogin储存的登录IP数据
3332
public static Connection dbConn; // 数据库连接,在`onEnable`方法中初始化
33+
public static SocketClient socket;
3434

3535
@Override
3636
public void onEnable() {
@@ -59,6 +59,18 @@ public void onEnable() {
5959
// check TitleManager
6060
// more code...
6161

62+
// WebSocket
63+
if (getConfig().getBoolean("enable-socket")){
64+
try {
65+
socket = new SocketClient(plugin.getConfig().getString("socket-uri"));
66+
socket.connect();
67+
// socket.send("{\"type\":\"init\",\"client_id\":\"" +plugin.getConfig().getString("socket-client_id")+ "\",\"client_secret\":\"" +plugin.getConfig().getString("socket-client_secret")+ "\",\"data\":{}}");
68+
getLogger().info(ChatColor.GREEN + "已连接WebSocket服务器");
69+
} catch (URISyntaxException e) {
70+
getLogger().warning(ChatColor.RED + "连接WebSocket服务器失败:" + e.getMessage());
71+
}
72+
}
73+
6274
// log information
6375
getLogger().info(ChatColor.GREEN + "More info on " + ChatColor.BLUE + "https://minept.top");
6476
getLogger().info(ChatColor.GREEN + "Enabled MessageSync Plugin for PBF!");

src/main/java/center/xzy/qb/messagesync/events/customEventHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public void PlayerLogin(PlayerJoinEvent event) {
100100

101101
PlayerLogin playerLogin = new PlayerLogin();
102102
playerLogin.setPlayer(event.getPlayer());
103-
playerLogin.runTaskLater(Main.instance, timeout);
103+
playerLogin.runTaskLater(Main.getPlugin(Main.class), timeout);
104104
Player player = event.getPlayer();
105105
if (Main.gmData.containsKey(player.getName())){
106106
Main.gmData.replace(player.getName(), player.getGameMode().toString());

src/main/java/center/xzy/qb/messagesync/executor/sayHandler.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import center.xzy.qb.messagesync.Main;
44
import org.bukkit.ChatColor;
5-
import org.bukkit.Bukkit;
65
import org.bukkit.command.Command;
76
import org.bukkit.command.CommandExecutor;
87
import org.bukkit.command.CommandSender;
@@ -19,9 +18,9 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
1918
msg += args[i] +" ";
2019
}
2120
if (sender instanceof Player){
22-
Bukkit.broadcastMessage("<" + sender.getName() + "> " + msg);
21+
Main.instance.getServer().broadcastMessage("<" + sender.getName() + "> " + msg);
2322
}else {
24-
Bukkit.broadcastMessage(plugin.getConfig().getString("say-prefix") + " " + msg);
23+
Main.instance.getServer().broadcastMessage(plugin.getConfig().getString("say-prefix") + " " + msg);
2524
}
2625
return true;
2726
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package center.xzy.qb.messagesync.socket;
2+
3+
import java.net.URI;
4+
import java.net.URISyntaxException;
5+
6+
import com.alibaba.fastjson.JSONObject;
7+
import org.bukkit.Bukkit;
8+
import org.bukkit.ChatColor;
9+
import org.bukkit.plugin.Plugin;
10+
import org.bukkit.scheduler.BukkitRunnable;
11+
import org.java_websocket.client.WebSocketClient;
12+
import org.java_websocket.handshake.ServerHandshake;
13+
14+
import center.xzy.qb.messagesync.Main;
15+
16+
public class SocketClient extends WebSocketClient{
17+
Plugin plugin = Main.getPlugin(Main.class);
18+
19+
public SocketClient(String url) throws URISyntaxException {
20+
super(new URI(url));
21+
// TODO Auto-generated constructor stub
22+
}
23+
24+
@Override
25+
public void onOpen(ServerHandshake shake) {
26+
// 发送init请求
27+
send("{\"type\":\"init\",\"client_id\":\"" +plugin.getConfig().getString("socket-client_id")+ "\",\"client_secret\":\"" +plugin.getConfig().getString("socket-client_secret")+ "\",\"data\":{}}");
28+
}
29+
30+
@Override
31+
public void onMessage(String paramString) {
32+
// TODO Auto-generated method stub
33+
Main.instance.getLogger().warning(ChatColor.BLUE + "WebSocket收到消息:" + paramString);
34+
JSONObject object = JSONObject.parseObject(paramString);
35+
switch (object.getString("type")){
36+
case "command":
37+
Bukkit.getScheduler().runTask(Main.instance, () -> {
38+
Main.instance.getServer().dispatchCommand(Main.instance.getServer().getConsoleSender(), object.getJSONObject("data").getString("cmd"));
39+
});
40+
break;
41+
42+
case "message":
43+
Main.instance.getServer().broadcastMessage(plugin.getConfig().getString("say-prefix") + " " + object.getJSONObject("data").getString("msg"));
44+
break;
45+
}
46+
}
47+
48+
@Override
49+
public void onClose(int paramInt, String paramString, boolean paramBoolean) {
50+
// TODO Auto-generated method stub
51+
Main.instance.getLogger().warning(ChatColor.RED + "WebSocket被关闭:" + paramString);
52+
}
53+
54+
@Override
55+
public void onError(Exception e) {
56+
// TODO Auto-generated method stub
57+
Main.instance.getLogger().warning(ChatColor.RED + "WebSocket异常:" + e.getMessage());
58+
}
59+
}

src/main/resources/config.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,10 @@ reg-ip-max-fail-msg: "当前IP注册ID数量已达上限!" # 当IP注册数
2020
login-allow-tick: 600 # 指定tick后还未登录就踢出玩家
2121
login-allow-tick-msg: "登录已超时,请重新进入" # 登录超时时提示的消息
2222
reg-allow-tick: 1200 # 指定tick后还未注册就踢出玩家
23-
reg-allow-tick-msg: "注册已超时,请重新进入" # 注册超时时提示的消息
23+
reg-allow-tick-msg: "注册已超时,请重新进入" # 注册超时时提示的消息
24+
25+
# socket设置
26+
enable-socket: true # 是否启用socket通信(见 https://socket.xzy.center)
27+
socket-client_id: "123" # client_id
28+
socket-client_secret: "123" # client_secret
29+
socket-uri: "wss://socket.xzy.center/ws" # SocketURI 正常情况下请不要修改

0 commit comments

Comments
 (0)