feat: some stuff I did a while ago but forgor to commit

This commit is contained in:
TheClashFruit 2024-02-25 10:47:19 +01:00
parent e645f7d588
commit 972f3a1f65
Signed by: TheClashFruit
GPG key ID: 09BB24C34C2F3204
11 changed files with 214 additions and 41 deletions

5
.gitignore vendored
View file

@ -39,4 +39,7 @@ bin/
.vscode/
### Mac OS ###
.DS_Store
.DS_Store
### DevRunner ###
run/

View file

@ -13,13 +13,18 @@ repositories {
name = "Secret Thing :trol:"
url = "https://mvn.theclashfruit.me/bukkit"
}
maven {
name = "Sonatype"
url = "https://oss.sonatype.org/content/repositories/snapshots/"
}
}
dependencies {
testImplementation platform('org.junit:junit-bom:5.9.1')
testImplementation 'org.junit.jupiter:junit-jupiter'
shadow implementation('org.bukkit:craftbukkit:1.5.2-R1.0')
shadow implementation("org.bukkit:craftbukkit:${project.bukkit_version}")
implementation 'org.eclipse.jetty:jetty-server:9.4.52.v20230823'
implementation 'org.eclipse.jetty:jetty-servlet:9.4.52.v20230823'
@ -44,11 +49,28 @@ processResources {
}
}
tasks.register("launchMinecraftServer", JavaExec) {
group('minecraft')
dependsOn("build")
classpath = sourceSets.main.runtimeClasspath
main = "me.theclashfruit.devrunner.DevRunner"
doFirst {
copy {
from(layout.buildDirectory.file("libs/${project.name}-${project.version}.jar"))
into(layout.projectDirectory.file("run/plugins"))
}
}
}
shadowJar {
// exclude devrunner from jar
exclude('me/theclashfruit/devrunner')
archiveBaseName.set(rootProject.name)
archiveClassifier.set('')
archiveVersion.set(project.version)
}
tasks.jar.enabled = false

View file

@ -1,2 +1,2 @@
bukkit_version = 1.5.2-R1.0
plugin_version = 1.0.0+mc1.1-alpha
bukkit_version = 1.6.4-R2.0
plugin_version = 1.1.0+mc1.6.4-alpha

View file

@ -1,14 +1,14 @@
package me.theclashfruit.crss;
import me.theclashfruit.crss.api.ChatServlet;
import me.theclashfruit.crss.api.ChatSocket;
import me.theclashfruit.crss.api.GatewaySocket;
import me.theclashfruit.crss.api.PlayersServlet;
import me.theclashfruit.crss.api.StatusServlet;
import me.theclashfruit.crss.listener.ChatListener;
import me.theclashfruit.crss.listener.SleepingListener;
import me.theclashfruit.crss.map.MapServlet;
import me.theclashfruit.crss.models.SocketData;
import me.theclashfruit.crss.models.SocketMessage;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.eclipse.jetty.server.Connector;
@ -19,7 +19,7 @@ import org.eclipse.jetty.servlet.ServletHandler;
import java.io.File;
public class Plugin extends JavaPlugin {
ChatSocket chatSocket;
GatewaySocket chatSocket;
Server server = new Server(25580);
Connector connector = new ServerConnector(server);
@ -37,8 +37,9 @@ public class Plugin extends JavaPlugin {
// ContextHandler context = new ContextHandler(new ApiHandler(), "/v1");
if(getConfig().getBoolean("web.api.enabled")) {
handler.addServletWithMapping(ChatServlet.class, "/api/v1/chat");
handler.addServletWithMapping(ChatServlet.class, "/api/v1/gateway");
handler.addServletWithMapping(PlayersServlet.class, "/api/v1/players");
handler.addServletWithMapping(StatusServlet.class, "/api/v1/status");
}
if(getConfig().getBoolean("web.map.enabled")) {
@ -72,7 +73,7 @@ public class Plugin extends JavaPlugin {
// stop chat socket
try {
ChatSocket.broadcast(new SocketMessage(
GatewaySocket.broadcast(new SocketMessage(
"serverStop",
new SocketData(
null,

View file

@ -9,7 +9,7 @@ import javax.servlet.annotation.WebServlet;
public class ChatServlet extends WebSocketServlet {
@Override
public void configure(WebSocketServletFactory factory) {
factory.register(ChatSocket.class);
factory.register(GatewaySocket.class);
}
}

View file

@ -1,6 +1,7 @@
package me.theclashfruit.crss.api;
import com.google.gson.Gson;
import me.theclashfruit.crss.models.GatewayConnection;
import me.theclashfruit.crss.models.SocketData;
import me.theclashfruit.crss.models.SocketMessage;
import org.eclipse.jetty.websocket.api.Session;
@ -14,50 +15,48 @@ import java.util.concurrent.CopyOnWriteArraySet;
import static org.bukkit.Bukkit.getLogger;
@WebSocket
public class ChatSocket {
private static Set<ChatSocket> chatConnections = new CopyOnWriteArraySet<>();
public class GatewaySocket {
private static final Set<GatewaySocket> gatewayConnections = new CopyOnWriteArraySet<>();
private Session session;
@OnWebSocketConnect
public void onConnect(Session session) throws IOException {
this.session = session;
SocketMessage greeting = new SocketMessage(
"connectionGreet",
new SocketData(
null,
"Greetings!",
true
)
);
Gson gson = new Gson();
session.getRemote().sendString(
gson.toJson(greeting)
);
chatConnections.add(this);
gatewayConnections.add(this);
}
@OnWebSocketMessage
public void onMessage(String message) throws IOException, EncodeException {
getLogger().info(message);
try {
Gson gson = new Gson();
GatewayConnection socketMessage = gson.fromJson(message, GatewayConnection.class);
getLogger().info(socketMessage.getClientName());
for (String subscription : socketMessage.getSubscriptions()) {
getLogger().info(subscription);
}
} catch (Exception e) {
getLogger().throwing(GatewaySocket.class.getName(), "WebSocket", e);
}
}
@OnWebSocketClose
public void onClose(int statusCode, String reason) throws IOException {
chatConnections.remove(this);
gatewayConnections.remove(this);
}
@OnWebSocketError
public void onError(Throwable throwable) {
getLogger().throwing(ChatSocket.class.getName(), "WebSocket", throwable);
getLogger().throwing(GatewaySocket.class.getName(), "WebSocket", throwable);
}
public static void broadcast(SocketMessage message) {
chatConnections.forEach(endpoint -> {
gatewayConnections.forEach(endpoint -> {
try {
Gson gson = new Gson();
@ -68,7 +67,7 @@ public class ChatSocket {
gson.toJson(message)
);
} catch (IOException e) {
getLogger().throwing(ChatSocket.class.getName(), "WebSocket", e);
getLogger().throwing(GatewaySocket.class.getName(), "WebSocket", e);
}
});
}

View file

@ -0,0 +1,32 @@
package me.theclashfruit.crss.api;
import com.google.gson.Gson;
import me.theclashfruit.crss.models.Status;
import org.bukkit.Bukkit;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "Status API")
public class StatusServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
Gson gson = new Gson();
Status status = new Status(
true,
Bukkit.getBukkitVersion(),
Bukkit.getOnlinePlayers().length,
Bukkit.getMaxPlayers(),
Bukkit.getMotd()
);
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println(gson.toJson(status));
}
}

View file

@ -1,7 +1,6 @@
package me.theclashfruit.crss.listener;
import com.google.gson.Gson;
import me.theclashfruit.crss.api.ChatSocket;
import me.theclashfruit.crss.api.GatewaySocket;
import me.theclashfruit.crss.models.*;
import me.theclashfruit.crss.util.StringUtil;
import org.bukkit.ChatColor;
@ -17,7 +16,7 @@ public class ChatListener implements Listener {
@EventHandler
public void onChat(PlayerChatEvent event) {
ChatSocket.broadcast(new SocketMessage(
GatewaySocket.broadcast(new SocketMessage(
"chatMessage",
new SocketData(
event.getPlayer().getName(),
@ -29,7 +28,7 @@ public class ChatListener implements Listener {
@EventHandler
public void onJoin(PlayerJoinEvent event) {
ChatSocket.broadcast(new SocketMessage(
GatewaySocket.broadcast(new SocketMessage(
"playerJoin",
new SocketData(
null,
@ -41,7 +40,7 @@ public class ChatListener implements Listener {
@EventHandler
public void onQuit(PlayerQuitEvent event) {
ChatSocket.broadcast(new SocketMessage(
GatewaySocket.broadcast(new SocketMessage(
"playerQuit",
new SocketData(
null,
@ -53,7 +52,7 @@ public class ChatListener implements Listener {
@EventHandler
public void onDeath(PlayerDeathEvent event) {
ChatSocket.broadcast(new SocketMessage(
GatewaySocket.broadcast(new SocketMessage(
"playerDeath",
new SocketData(
null,
@ -67,7 +66,7 @@ public class ChatListener implements Listener {
public void onServerCommand(ServerCommandEvent event) {
switch (StringUtil.getFirstPartBeforeSpace(event.getCommand())) {
case "say":
ChatSocket.broadcast(new SocketMessage(
GatewaySocket.broadcast(new SocketMessage(
"serverSay",
new SocketData(
null,

View file

@ -0,0 +1,27 @@
package me.theclashfruit.crss.models;
public class GatewayConnection {
private String clientName;
private String[] subscriptions;
public GatewayConnection(String clientName, String[] subscriptions) {
this.clientName = clientName;
this.subscriptions = subscriptions;
}
public String getClientName() {
return clientName;
}
public String[] getSubscriptions() {
return subscriptions;
}
public void setClientName(String clientName) {
this.clientName = clientName;
}
public void setSubscriptions(String[] subscriptions) {
this.subscriptions = subscriptions;
}
}

View file

@ -0,0 +1,57 @@
package me.theclashfruit.crss.models;
public class Status {
private Boolean status;
private String version;
private int players;
private int maxPlayers;
private String motd;
public Status(Boolean status, String version, int players, int maxPlayers, String motd) {
this.status = status;
this.version = version;
this.players = players;
this.maxPlayers = maxPlayers;
this.motd = motd;
}
public Boolean getStatus() {
return status;
}
public String getVersion() {
return version;
}
public int getPlayers() {
return players;
}
public int getMaxPlayers() {
return maxPlayers;
}
public String getMotd() {
return motd;
}
public void setStatus(Boolean status) {
this.status = status;
}
public void setVersion(String version) {
this.version = version;
}
public void setPlayers(int players) {
this.players = players;
}
public void setMaxPlayers(int maxPlayers) {
this.maxPlayers = maxPlayers;
}
public void setMotd(String motd) {
this.motd = motd;
}
}

View file

@ -0,0 +1,33 @@
package me.theclashfruit.devrunner;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Paths;
/**
* <h1>
* DevRunner
* </h1>
* <p>
* This class is used to run the server in development mode.
* </p>
* <p>Copyright 2023-2024 TheClashFruit</p>
*/
public class DevRunner {
public static void main(String[] args) throws IOException {
// windows only oops
File runDir = new File(System.getProperty("user.dir"), "run");
System.out.println(runDir.getAbsolutePath());
ProcessBuilder pb = new ProcessBuilder();
pb.command("cmd", "/c", "start", "java", "-Xms128M", "-XX:MaxRAMPercentage=95.0", "-jar", "server.jar");
pb.directory(runDir);
pb.start();
}
}