currently refactoring a lot

This commit is contained in:
kento2 2026-07-05 00:36:22 +02:00
parent 31eb8a92eb
commit ea6ae529cc
32 changed files with 205 additions and 185 deletions

View file

@ -17,7 +17,9 @@ repositories {
}
dependencies {
implementation(project(":core-velocity-api"))
implementation(project(":core-velocity-api")) {
isTransitive = true
}
// https://docs.papermc.io/velocity/dev/creating-your-first-plugin/
annotationProcessor("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT")
@ -25,6 +27,10 @@ dependencies {
implementation("com.github.ben-manes.caffeine:caffeine:3.2.4")
}
tasks.build {
dependsOn("shadowJar")
}
val generateBuildInfo by tasks.registering {
val outputDir = layout.buildDirectory.dir("generated/sources/buildInfo")
outputs.dir(outputDir)

View file

@ -23,7 +23,6 @@ import net.kyori.adventure.text.format.NamedTextColor;
)
@Log
public class CoreVelocityPlugin {
@Inject
public CoreVelocityPlugin(ProxyServer server) {
ScrowAPISurface.initScrowAPI(server, true);
@ -38,8 +37,8 @@ public class CoreVelocityPlugin {
cmds.register(new OnlineCommand(server).getRootNode());
}
var registerWatchdog = new ServerRegisterWatchdog(ScrowAPI.getNats(), server);
var sendPlayerWatchdog = new SendPlayerWatchdog(ScrowAPI.getNats(), server);
var registerWatchdog = new ServerRegisterWatchdog(ScrowAPI.getMessageBroker(), server);
var sendPlayerWatchdog = new SendPlayerWatchdog(ScrowAPI.getMessageBroker(), server);
registerWatchdog.listen();
sendPlayerWatchdog.listen();
}

View file

@ -4,6 +4,7 @@ import com.velocitypowered.api.proxy.ProxyServer;
import de.kentoj.kencommandapi.CommandAPI;
import de.kentoj.scrow.velocity.ScrowAPI;
import de.kentoj.scrowlib.instancemanager.InstanceManagerImpl;
import de.kentoj.scrowlib.messaging.MessageBroker;
import de.kentoj.scrowlib.utils.EnvUtils;
import io.nats.client.Nats;
import io.nats.client.Options;
@ -23,7 +24,7 @@ public class ScrowAPISurface {
.server(natsHost)
.pedantic()
.build();
ScrowAPI.setNats(Nats.connect(options));
ScrowAPI.setMessageBroker(new MessageBroker(Nats.connect(options)));
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
@ -32,7 +33,7 @@ public class ScrowAPISurface {
ScrowAPI.setJdbi(Jdbi.create(EnvUtils.envOrThrow("HOST_POSTGRES")));
}
ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.getNats()));
ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.getMessageBroker()));
ScrowAPI.setCommandApi(new CommandAPI(server));
}

View file

@ -8,18 +8,16 @@ import de.kentoj.kencommandapi.api.invocation.CommandContext;
import de.kentoj.kencommandapi.api.invocation.SyncCommandExecutor;
import de.kentoj.kencommandapi.api.node.CommandNode;
import de.kentoj.kencommandapi.api.node.RootCommandNode;
import de.kentoj.kencommandapi.api.platform.MessageStyle;
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.kyori.adventure.text.Component;
@RequiredArgsConstructor
public class OnlineCommand implements SyncCommandExecutor<CommandSource> {
@Getter
private final RootCommandNode<CommandSource> rootNode;
private final ScrowMessageStyle style = ScrowMessageStyle.GENERIC;
private final ProxyServer server;
public OnlineCommand(ProxyServer server) {
@ -32,9 +30,9 @@ public class OnlineCommand implements SyncCommandExecutor<CommandSource> {
public Result<Object, String> executeSync(CommandContext<CommandSource> ctx) {
int cnt = server.getPlayerCount();
var msg = cnt != 1
? "There are currently " + cnt + " players online"
: "There is currently 1 player online";
ctx.getSender().sendMessage(Component.text(msg));
? "There are currently " + cnt + " players online."
: "There is currently 1 player online.";
ctx.getSender().sendMessage(style.ok(msg));
return Results.success(new Object());
}
}

View file

@ -45,7 +45,7 @@ public class MsgCommand implements SyncCommandExecutor<CommandSource> {
var sender = (Player) ctx.getSender();
var isMessagingSelf = target.getUniqueId().equals(sender.getUniqueId());
if (isMessagingSelf) return Results.failure("You can't message yourself");
if (isMessagingSelf) return Results.failure("You can't message yourself.");
cache.setLastTarget(sender.getUniqueId(), target.getUniqueId());
privMsgHandler.handle(sender, target, msg);

View file

@ -13,7 +13,7 @@ public class PrivMsgHandler {
private final ScrowMessageStyle style;
public void handle(Player player, Player target, String msg) {
target.sendMessage(style.ok(text(player.getUsername() + " -> You:").append(Component.text(msg))));
player.sendMessage(style.ok(text("You -> " + player.getUsername()).append(Component.text(msg))));
target.sendMessage(style.ok(text(player.getUsername() + " -> You: ").append(Component.text(msg))));
player.sendMessage(style.ok(text("You -> " + player.getUsername() + ": ").append(Component.text(msg))));
}
}

View file

@ -39,11 +39,13 @@ public class ReplyCommand implements SyncCommandExecutor<CommandSource> {
public Result<Object, String> executeSync(CommandContext<CommandSource> ctx) {
var sender = (Player) ctx.getSender();
var targetId = cache.getLastTarget(sender.getUniqueId());
if (targetId == null)
return Results.failure("You didn't messaged anyone recently. Use /msg first");
var target = server.getPlayer(targetId).orElse(null);
var msg = ctx.getArg(msgArg);
if (target == null)
return Results.failure("The player you last messaged is no longer online");
return Results.failure("The player you last messaged is no longer online.");
cache.setLastTarget(sender.getUniqueId(), target.getUniqueId());
privMsgHandler.handle(sender, target, msg);
return Results.success(new Object());

View file

@ -5,6 +5,7 @@ import com.leakyabstractions.result.core.Results;
import com.velocitypowered.api.proxy.ProxyServer;
import de.kentoj.scrowlib.messaging.MessageBroker;
import io.nats.client.Connection;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
@ -14,16 +15,12 @@ import java.util.concurrent.CompletionStage;
import java.util.concurrent.ExecutionException;
@Slf4j
@RequiredArgsConstructor
public class SendPlayerWatchdog {
private final MessageBroker natsRepo;
private final ProxyServer server;
public SendPlayerWatchdog(Connection nats, ProxyServer server) {
this.natsRepo = new MessageBroker(nats);
this.server = server;
}
public void listen() {
natsRepo.handle("players.send", doc -> sendPlayer(
doc.get("playerId", UUID.class),

View file

@ -1,44 +1,34 @@
package de.kentoj.scrow.corevelocity.server;
import com.leakyabstractions.result.core.Results;
import com.velocitypowered.api.proxy.ProxyServer;
import com.velocitypowered.api.proxy.server.ServerInfo;
import de.kentoj.scrowlib.messaging.MessageBroker;
import de.kentoj.scrowlib.messaging.SyncRequestHandler;
import io.nats.client.Connection;
import lombok.RequiredArgsConstructor;
import lombok.extern.java.Log;
import org.bson.Document;
import java.net.InetSocketAddress;
@Log
@RequiredArgsConstructor
public class ServerRegisterWatchdog {
private final MessageBroker natsRepo;
private final ProxyServer server;
public ServerRegisterWatchdog(Connection nats, ProxyServer server) {
this.natsRepo = new MessageBroker(nats);
this.server = server;
}
public void listen() {
natsRepo.handle("event.instance.up", (SyncRequestHandler) doc -> {
natsRepo.subscribe("event.instance.up", doc -> {
var handle = doc.getString("handle");
var port = doc.getInteger("port");
return Results.ofCallable(() -> {
server.registerServer(new ServerInfo(handle, new InetSocketAddress(port)));
return new Document();
}).mapFailure(Throwable::getMessage);
server.unregisterServer(new ServerInfo(handle, new InetSocketAddress(port)));
log.info("registered server " + handle);
});
natsRepo.handle("event.instance.down", (SyncRequestHandler) doc -> {
natsRepo.subscribe("event.instance.down", doc -> {
var handle = doc.getString("handle");
var port = doc.getInteger("port");
return Results.ofCallable(() -> {
server.unregisterServer(new ServerInfo(handle, new InetSocketAddress(port)));
return new Document();
}).mapFailure(Throwable::getMessage);
server.unregisterServer(new ServerInfo(handle, new InetSocketAddress(port)));
log.info("unregistered server " + handle);
});
}
}