feat(ServerCosmetics): hot reloading
All checks were successful
Build the Docker Image / docker (push) Successful in 4m51s

This commit is contained in:
Paul Fey 2025-06-07 12:11:41 +02:00
parent 6a1cec4df9
commit dc43007b6a
2 changed files with 15 additions and 40 deletions

View file

@ -1,7 +1,5 @@
package de.pauljako.cosmeticserver; package de.pauljako.cosmeticserver;
import de.craftsblock.craftscore.json.Json;
import de.craftsblock.craftscore.json.JsonParser;
import de.craftsblock.craftsnet.addon.Addon; import de.craftsblock.craftsnet.addon.Addon;
import de.craftsblock.craftsnet.api.Handler; import de.craftsblock.craftsnet.api.Handler;
@ -11,11 +9,13 @@ public class CosmeticServer extends Addon {
private static CosmeticServer instance; private static CosmeticServer instance;
public final File cosmeticFile = new File(getDataFolder(), "cosmetics.json");
private Json serverCosmetics;
private Thread thread; private Thread thread;
public static CosmeticServer instance() {
return instance;
}
@Override @Override
public void onEnable() { public void onEnable() {
@ -24,13 +24,10 @@ public class CosmeticServer extends Addon {
File assets = new File(getDataFolder(), "assets"); File assets = new File(getDataFolder(), "assets");
assets.mkdirs(); assets.mkdirs();
File file = new File(getDataFolder(), "cosmetics.json");
serverCosmetics = JsonParser.parse(file);
routeRegistry().share("/v1/cosmetic/assets", assets); routeRegistry().share("/v1/cosmetic/assets", assets);
CosmeticSocket socket = new CosmeticSocket(); CosmeticSocket socket = new CosmeticSocket();
routeRegistry().register((Handler) socket); routeRegistry().register(socket);
listenerRegistry().register(socket); listenerRegistry().register(socket);
new HeartbeatThread(); new HeartbeatThread();
} }
@ -47,12 +44,4 @@ public class CosmeticServer extends Addon {
instance = null; instance = null;
} }
public Json getServerCosmetics() {
return serverCosmetics;
}
public static CosmeticServer instance() {
return instance;
}
} }

View file

@ -8,7 +8,9 @@ import de.craftsblock.craftscore.event.ListenerAdapter;
import de.craftsblock.craftscore.json.Json; import de.craftsblock.craftscore.json.Json;
import de.craftsblock.craftscore.json.JsonParser; import de.craftsblock.craftscore.json.JsonParser;
import de.craftsblock.craftscore.utils.Validator; import de.craftsblock.craftscore.utils.Validator;
import de.craftsblock.craftsnet.api.websocket.*; import de.craftsblock.craftsnet.api.websocket.SocketExchange;
import de.craftsblock.craftsnet.api.websocket.SocketHandler;
import de.craftsblock.craftsnet.api.websocket.WebSocketClient;
import de.craftsblock.craftsnet.api.websocket.annotations.Socket; import de.craftsblock.craftsnet.api.websocket.annotations.Socket;
import de.craftsblock.craftsnet.events.sockets.ClientDisconnectEvent; import de.craftsblock.craftsnet.events.sockets.ClientDisconnectEvent;
@ -80,10 +82,7 @@ public class CosmeticSocket implements SocketHandler, ListenerAdapter {
data.get("cosmetics").getAsJsonObject().entrySet().forEach(entry -> cosmetics.put(entry.getKey(), entry.getValue())); data.get("cosmetics").getAsJsonObject().entrySet().forEach(entry -> cosmetics.put(entry.getKey(), entry.getValue()));
ClientMapping mapping = new ClientMapping(uuid, cosmetics); ClientMapping mapping = new ClientMapping(uuid, cosmetics);
exchange.broadcast(JsonParser.parse("{}") exchange.broadcast(JsonParser.parse("{}").set("uuid", uuid.toString()).set("cosmetics", bakeData(cosmetics)).toString());
.set("uuid", uuid.toString())
.set("cosmetics", bakeData(cosmetics))
.toString());
clients.put(client, mapping); clients.put(client, mapping);
CosmeticSocket.cosmetics.put(uuid, mapping); CosmeticSocket.cosmetics.put(uuid, mapping);
} }
@ -110,29 +109,21 @@ public class CosmeticSocket implements SocketHandler, ListenerAdapter {
})); }));
} }
client.sendMessage(JsonParser.parse("{}") client.sendMessage(JsonParser.parse("{}").set("data", array).toString());
.set("data", array)
.toString());
} }
private JsonObject searchServerCosmetic(String type, String name) { private JsonObject searchServerCosmetic(String type, String name) {
Json serverCosmetics = CosmeticServer.instance().getServerCosmetics(); Json serverCosmetics = JsonParser.parse(CosmeticServer.instance().cosmeticFile);
if (!serverCosmetics.contains(type + "." + name)) return null; if (!serverCosmetics.contains(type + "." + name)) return null;
Json cosmetic = JsonParser.parse(serverCosmetics.get(type + "." + name)); Json cosmetic = JsonParser.parse(serverCosmetics.get(type + "." + name));
String id = cosmetic.contains("id") ? cosmetic.getString("id") : name; String id = cosmetic.contains("id") ? cosmetic.getString("id") : name;
return (JsonObject) JsonParser.parse("{}") return (JsonObject) JsonParser.parse("{}").set("display", cosmetic.contains("display") ? cosmetic.get("display") : name).set("name", name).set("delay", cosmetic.contains("delay") ? cosmetic.getInt("delay") : 30).set("frames", cosmetic.contains("frames") ? cosmetic.getStringList("frames").size() : 1).set("url", "https://cosmetic.airclient.pauljako.de/v1/cosmetic/assets/" + type + "/" + name + "/frame_" + id).getObject();
.set("display", cosmetic.contains("display") ? cosmetic.get("display") : name)
.set("name", name)
.set("delay", cosmetic.contains("delay") ? cosmetic.getInt("delay") : 30)
.set("frames", cosmetic.contains("frames") ? cosmetic.getStringList("frames").size() : 1)
.set("url", "https://cosmetic.airclient.pauljako.de/v1/cosmetic/assets/" + type + "/" + name + "/frame_" + id)
.getObject();
} }
private JsonObject allServerCosmetics(String type) { private JsonObject allServerCosmetics(String type) {
Json serverCosmetics = CosmeticServer.instance().getServerCosmetics(); Json serverCosmetics = JsonParser.parse(CosmeticServer.instance().cosmeticFile);
if (!serverCosmetics.contains(type + ".")) return null; if (!serverCosmetics.contains(type + ".")) return null;
Json allCosmetics = Json.empty(); Json allCosmetics = Json.empty();
@ -142,12 +133,7 @@ public class CosmeticSocket implements SocketHandler, ListenerAdapter {
String id = cosmetic.contains("id") ? cosmetic.getString("id") : cosmeticName; String id = cosmetic.contains("id") ? cosmetic.getString("id") : cosmeticName;
Json cosmeticObject = JsonParser.parse("{}") Json cosmeticObject = JsonParser.parse("{}").set("display", cosmetic.contains("display") ? cosmetic.get("display") : cosmeticName).set("name", cosmeticName).set("delay", cosmetic.contains("delay") ? cosmetic.getInt("delay") : 30).set("frames", cosmetic.contains("frames") ? cosmetic.getStringList("frames").size() : 1).set("url", "https://cosmetic.airclient.pauljako.de/v1/cosmetic/assets/" + type + "/" + cosmeticName + "/frame_" + id);
.set("display", cosmetic.contains("display") ? cosmetic.get("display") : cosmeticName)
.set("name", cosmeticName)
.set("delay", cosmetic.contains("delay") ? cosmetic.getInt("delay") : 30)
.set("frames", cosmetic.contains("frames") ? cosmetic.getStringList("frames").size() : 1)
.set("url", "https://cosmetic.airclient.pauljako.de/v1/cosmetic/assets/" + type + "/" + cosmeticName + "/frame_" + id);
allCosmetics.set(cosmeticName, cosmeticObject); allCosmetics.set(cosmeticName, cosmeticObject);
} }