feat: chat websocket

This commit is contained in:
TheClashFruit 2023-09-29 19:36:40 +02:00
parent 90e78bb824
commit 5bea628ae5
Signed by: TheClashFruit
GPG key ID: CF4A319B9A73290C
10 changed files with 284 additions and 1 deletions

View file

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>

View file

@ -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>

View file

@ -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 {

View file

@ -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);
}
}
}

View 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() + "!");
}
}

View file

@ -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);
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View file

@ -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;
}
}