feat: chat websocket
This commit is contained in:
parent
90e78bb824
commit
5bea628ae5
5
.idea/codeStyles/codeStyleConfig.xml
Normal file
5
.idea/codeStyles/codeStyleConfig.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
|
||||
</state>
|
||||
</component>
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
|
|
12
build.gradle
12
build.gradle
|
@ -1,9 +1,10 @@
|
|||
plugins {
|
||||
id 'java'
|
||||
id 'com.github.johnrengelman.shadow' version '8.1.1'
|
||||
}
|
||||
|
||||
group = 'me.theclashfruit'
|
||||
version = '0.1.0+mc1.1-alpha'
|
||||
version = '0.2.0+mc1.1-alpha'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
|
@ -14,6 +15,15 @@ dependencies {
|
|||
testImplementation 'org.junit.jupiter:junit-jupiter'
|
||||
|
||||
implementation files('/home/tcf/MinecraftDev/craftbukkit-1.1-R5-SNAPSHOT.jar')
|
||||
|
||||
implementation 'org.java-websocket:Java-WebSocket:1.5.4'
|
||||
implementation 'com.google.code.gson:gson:2.10.1'
|
||||
}
|
||||
|
||||
shadowJar {
|
||||
archiveBaseName.set('crss')
|
||||
archiveClassifier.set('')
|
||||
archiveVersion.set(project.version)
|
||||
}
|
||||
|
||||
test {
|
||||
|
|
|
@ -1,22 +1,60 @@
|
|||
package me.theclashfruit.crss;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import me.theclashfruit.crss.api.ChatSocket;
|
||||
import me.theclashfruit.crss.listener.ChatListener;
|
||||
import me.theclashfruit.crss.listener.FunListener;
|
||||
import me.theclashfruit.crss.models.SystemData;
|
||||
import me.theclashfruit.crss.models.SystemMessage;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
public class Plugin extends JavaPlugin {
|
||||
ChatSocket chatSocket;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
getLogger().info("Plugin enabled!");
|
||||
|
||||
PluginManager pluginManager = getServer().getPluginManager();
|
||||
|
||||
// create chat socket
|
||||
try {
|
||||
chatSocket = new ChatSocket(25580);
|
||||
|
||||
chatSocket.start();
|
||||
} catch (UnknownHostException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
// register events
|
||||
pluginManager.registerEvents(new FunListener(), this);
|
||||
pluginManager.registerEvents(new ChatListener(chatSocket), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
getLogger().info("Plugin disabled!");
|
||||
|
||||
// stop chat socket
|
||||
try {
|
||||
Gson gson = new Gson();
|
||||
|
||||
String chatMessage = gson.toJson(new SystemMessage(
|
||||
"playerQuit",
|
||||
new SystemData(
|
||||
"Server stopped.",
|
||||
0xFF5555
|
||||
)
|
||||
));
|
||||
|
||||
chatSocket.broadcast(chatMessage);
|
||||
|
||||
chatSocket.stop();
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
42
src/main/java/me/theclashfruit/crss/api/ChatSocket.java
Normal file
42
src/main/java/me/theclashfruit/crss/api/ChatSocket.java
Normal file
|
@ -0,0 +1,42 @@
|
|||
package me.theclashfruit.crss.api;
|
||||
|
||||
import org.java_websocket.WebSocket;
|
||||
import org.java_websocket.handshake.ClientHandshake;
|
||||
import org.java_websocket.server.WebSocketServer;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import static org.bukkit.Bukkit.getLogger;
|
||||
import static org.bukkit.Bukkit.getPlayer;
|
||||
|
||||
public class ChatSocket extends WebSocketServer {
|
||||
public ChatSocket(int port) throws UnknownHostException {
|
||||
super(new InetSocketAddress(port));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpen(WebSocket conn, ClientHandshake handshake) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessage(WebSocket conn, String message) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(WebSocket conn, Exception ex) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
getLogger().info("WebSocket server started on port " + getAddress().getPort() + "!");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
package me.theclashfruit.crss.listener;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import me.theclashfruit.crss.Plugin;
|
||||
import me.theclashfruit.crss.api.ChatSocket;
|
||||
import me.theclashfruit.crss.models.ChatData;
|
||||
import me.theclashfruit.crss.models.ChatMessage;
|
||||
import me.theclashfruit.crss.models.SystemData;
|
||||
import me.theclashfruit.crss.models.SystemMessage;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
public class ChatListener implements Listener {
|
||||
private final ChatSocket chatSocket;
|
||||
|
||||
public ChatListener(ChatSocket chatSocket) {
|
||||
this.chatSocket = chatSocket;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onChat(PlayerChatEvent event) {
|
||||
Gson gson = new Gson();
|
||||
|
||||
String chatMessage = gson.toJson(new ChatMessage(
|
||||
"chatMessage",
|
||||
new ChatData(
|
||||
event.getMessage(),
|
||||
event.getPlayer().getName(),
|
||||
0xFFFFFF
|
||||
)
|
||||
));
|
||||
|
||||
chatSocket.broadcast(chatMessage);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onJoin(PlayerJoinEvent event) {
|
||||
Gson gson = new Gson();
|
||||
|
||||
String chatMessage = gson.toJson(new SystemMessage(
|
||||
"serverStop",
|
||||
new SystemData(
|
||||
event.getPlayer().getName() + " joined the game.",
|
||||
0xFFFF55
|
||||
)
|
||||
));
|
||||
|
||||
chatSocket.broadcast(chatMessage);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onQuit(PlayerQuitEvent event) {
|
||||
Gson gson = new Gson();
|
||||
|
||||
String chatMessage = gson.toJson(new SystemMessage(
|
||||
"playerQuit",
|
||||
new SystemData(
|
||||
event.getPlayer().getName() + " left the game.",
|
||||
0xFFFF55
|
||||
)
|
||||
));
|
||||
|
||||
chatSocket.broadcast(chatMessage);
|
||||
}
|
||||
}
|
37
src/main/java/me/theclashfruit/crss/models/ChatData.java
Normal file
37
src/main/java/me/theclashfruit/crss/models/ChatData.java
Normal file
|
@ -0,0 +1,37 @@
|
|||
package me.theclashfruit.crss.models;
|
||||
|
||||
public class ChatData {
|
||||
private String message;
|
||||
private String player;
|
||||
private int globalColour;
|
||||
|
||||
public ChatData(String message, String player, int globalColour) {
|
||||
this.message = message;
|
||||
this.player = player;
|
||||
this.globalColour = globalColour;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public String getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public int getGlobalColour() {
|
||||
return globalColour;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public void setPlayer(String player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
public void setGlobalColour(int globalColour) {
|
||||
this.globalColour = globalColour;
|
||||
}
|
||||
}
|
27
src/main/java/me/theclashfruit/crss/models/ChatMessage.java
Normal file
27
src/main/java/me/theclashfruit/crss/models/ChatMessage.java
Normal file
|
@ -0,0 +1,27 @@
|
|||
package me.theclashfruit.crss.models;
|
||||
|
||||
public class ChatMessage {
|
||||
private String event;
|
||||
private ChatData data;
|
||||
|
||||
public ChatMessage(String chatMessage, ChatData data) {
|
||||
this.event = chatMessage;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public String getEvent() {
|
||||
return event;
|
||||
}
|
||||
|
||||
public ChatData getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setEvent(String event) {
|
||||
this.event = event;
|
||||
}
|
||||
|
||||
public void setData(ChatData data) {
|
||||
this.data = data;
|
||||
}
|
||||
}
|
27
src/main/java/me/theclashfruit/crss/models/SystemData.java
Normal file
27
src/main/java/me/theclashfruit/crss/models/SystemData.java
Normal file
|
@ -0,0 +1,27 @@
|
|||
package me.theclashfruit.crss.models;
|
||||
|
||||
public class SystemData {
|
||||
private String message;
|
||||
private int globalColour;
|
||||
|
||||
public SystemData(String message, int globalColour) {
|
||||
this.message = message;
|
||||
this.globalColour = globalColour;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public int getGlobalColour() {
|
||||
return globalColour;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public void setGlobalColour(int globalColour) {
|
||||
this.globalColour = globalColour;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package me.theclashfruit.crss.models;
|
||||
|
||||
public class SystemMessage {
|
||||
private String event;
|
||||
private SystemData data;
|
||||
|
||||
public SystemMessage(String chatMessage, SystemData data) {
|
||||
this.event = chatMessage;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public String getEvent() {
|
||||
return event;
|
||||
}
|
||||
|
||||
public SystemData getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setEvent(String event) {
|
||||
this.event = event;
|
||||
}
|
||||
|
||||
public void setData(SystemData data) {
|
||||
this.data = data;
|
||||
}
|
||||
}
|
Reference in a new issue