feat: some stuff I did a while ago but forgor to commit
This commit is contained in:
parent
e645f7d588
commit
972f3a1f65
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -39,4 +39,7 @@ bin/
|
|||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
||||
.DS_Store
|
||||
|
||||
### DevRunner ###
|
||||
run/
|
26
build.gradle
26
build.gradle
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
32
src/main/java/me/theclashfruit/crss/api/StatusServlet.java
Normal file
32
src/main/java/me/theclashfruit/crss/api/StatusServlet.java
Normal 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));
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
57
src/main/java/me/theclashfruit/crss/models/Status.java
Normal file
57
src/main/java/me/theclashfruit/crss/models/Status.java
Normal 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;
|
||||
}
|
||||
}
|
33
src/main/java/me/theclashfruit/devrunner/DevRunner.java
Normal file
33
src/main/java/me/theclashfruit/devrunner/DevRunner.java
Normal 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();
|
||||
}
|
||||
}
|
Reference in a new issue