This commit is contained in:
kento2 2026-04-29 17:38:23 +02:00
parent 8eb15179db
commit 19df9ed066
5 changed files with 58 additions and 1 deletions

View file

@ -34,7 +34,10 @@ dependencies {
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
api("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT")
api("net.kyori:adventure-platform-bukkit:4.4.1")
// Source: https://mvnrepository.com/artifact/io.nats/jnats
implementation("io.nats:jnats:2.25.2")
api("io.nats:jnats:2.25.2")
api("de.kentoj.scrow:kencommandapi-core:0.2")
implementation("de.kentoj.scrow:kencommandapi-bukkit:0.2")

View file

@ -4,6 +4,8 @@ import com.mongodb.reactivestreams.client.MongoDatabase;
import de.kentoj.kencommandapi.BukkitKenCommandApi;
import de.kentoj.scrow.bukkit.friends.FriendRequestService;
import de.kentoj.scrow.bukkit.friends.FriendshipService;
import de.kentoj.scrow.bukkit.message.NatsDocumentRepository;
import io.nats.client.Connection;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
@ -26,6 +28,10 @@ public class ScrowAPI {
private static FriendshipService friendshipService;
@Getter
private static FriendRequestService friendRequestService;
@Getter
private static Connection nats;
@Getter
private static NatsDocumentRepository natsRepository;
@ApiStatus.Internal
public static void setDatabase(@Nullable MongoDatabase database) {
@ -56,5 +62,15 @@ public class ScrowAPI {
public static void setFriendRequestService(FriendRequestService friendRequestService) {
ScrowAPI.friendRequestService = friendRequestService;
}
@ApiStatus.Internal
public static void setNats(Connection nats) {
ScrowAPI.nats = nats;
}
@ApiStatus.Internal
public static void setNatsRepository(NatsDocumentRepository natsRepository) {
ScrowAPI.natsRepository = natsRepository;
}
}

View file

@ -0,0 +1,16 @@
package de.kentoj.scrow.bukkit.message;
import io.nats.client.Message;
import io.nats.client.Subscription;
import org.bson.Document;
import java.util.function.Consumer;
public interface NatsDocumentRepository {
void publish(String topic, Document document);
Subscription subscribe(String topic, Consumer<Document> document);
Message request(String topic, Document document);
}

View file

@ -2,6 +2,9 @@ package de.kentoj.scrow.bukkit;
import de.kentoj.scrow.bukkit.economy.CoinsCommand;
import de.kentoj.scrow.bukkit.friends.command.FriendCommand;
import io.nats.client.Message;
import io.nats.client.Nats;
import org.bson.Document;
import org.bukkit.plugin.java.JavaPlugin;
import reactor.core.publisher.Mono;
@ -37,6 +40,16 @@ public class CoreImplPlugin extends JavaPlugin {
}
}
private void registerServer() {
ScrowAPI.getNatsRepository().publish("crown.status", new Document()
.append("state", "up"));
ScrowAPI.getNatsRepository().subscribe("crown.status", doc -> {
doc.
});
ScrowAPI.getNats().reqpublish("crown.status", new Document()
.append("state", "up").toJson());
}
@Override
public void onDisable() {
ScrowAPISurface.destroyScrowAPI();

View file

@ -11,6 +11,7 @@ import de.kentoj.scrow.bukkit.friends.friendship.InMemoryFriendshipService;
import de.kentoj.scrow.bukkit.friends.friendship.MongoFriendshipService;
import de.kentoj.scrow.bukkit.friends.request.InMemoryFriendRequestService;
import de.kentoj.scrow.bukkit.friends.request.MongoFriendRequestService;
import io.nats.client.Nats;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.bson.UuidRepresentation;
@ -21,6 +22,8 @@ import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.Nullable;
import reactor.core.scheduler.Schedulers;
import java.io.IOException;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class ScrowAPISurface {
@ -31,6 +34,12 @@ public class ScrowAPISurface {
Bukkit.getScheduler().runTask(plugin, cmd);
}));
try {
ScrowAPI.setMessageBroker(Nats.connect());
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
if (enableDatabase) {
var pojoCodecProvider = PojoCodecProvider.builder().automatic(true).build();
var codecRegistry = CodecRegistries.fromRegistries(