From d3e20606d91aa2b9f39df081cdadcaa176a32b75 Mon Sep 17 00:00:00 2001 From: kento2 Date: Sun, 31 May 2026 17:09:19 +0200 Subject: [PATCH] . --- .idea/gradle.xml | 1 + README.md | 15 +++--- core-bukkit-api/build.gradle.kts | 10 +--- .../message/NatsDocumentRepository.java | 16 ------ .../kentoj/scrow/bukkit/CoreImplPlugin.java | 4 +- .../bukkit/crown/CrownServerManager.java | 7 +-- core-lib/build.gradle.kts | 50 +++++++++++++++++++ .../kentoj/scrowlib/DocumentRepository.java | 18 +++++++ .../de/kentoj/scrowlib/NatsRepository.java | 43 ++++++++++++++++ settings.gradle.kts | 3 +- 10 files changed, 130 insertions(+), 37 deletions(-) delete mode 100644 core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/message/NatsDocumentRepository.java create mode 100644 core-lib/build.gradle.kts create mode 100644 core-lib/src/main/java/de/kentoj/scrowlib/DocumentRepository.java create mode 100644 core-lib/src/main/java/de/kentoj/scrowlib/NatsRepository.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 679db2d..7d5b9ed 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -11,6 +11,7 @@ diff --git a/README.md b/README.md index 58e293b..188971b 100644 --- a/README.md +++ b/README.md @@ -17,14 +17,15 @@ access the mongo-db web interface at http://localhost:8081; username `a`, passwo ## modules -### APIs +### core-lib -* core-api contains api for all java development -* core-bukkit-api contains api for bukkit development - * depends on core-api +core-lib is a stateless java util library + +### core-bukkit-api + +core-bukkit-api is stateful and contains api for bukkit development + * depends on core-lib ### implementations -the `-impl` suffix indicates that this module implements the API with the same prefix. -So `core-impl` implements `core-api`. -* core-bukkit-impl is a spigot plugin. It shades core-impl. \ No newline at end of file +core-bukkit-impl is a spigot plugin. It shades and implements core-bukkit-api \ No newline at end of file diff --git a/core-bukkit-api/build.gradle.kts b/core-bukkit-api/build.gradle.kts index 25c7882..c0b067e 100644 --- a/core-bukkit-api/build.gradle.kts +++ b/core-bukkit-api/build.gradle.kts @@ -29,11 +29,7 @@ repositories { } dependencies { - testImplementation(platform("org.junit:junit-bom:5.10.0")) - testImplementation("org.junit.jupiter:junit-jupiter") - testRuntimeOnly("org.junit.platform:junit-platform-launcher") - - api("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT") + //api("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT") // Source: https://mvnrepository.com/artifact/io.nats/jnats implementation("io.nats:jnats:2.25.2") @@ -53,8 +49,4 @@ publishing { from(components["java"]) } } -} - -tasks.test { - useJUnitPlatform() } \ No newline at end of file diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/message/NatsDocumentRepository.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/message/NatsDocumentRepository.java deleted file mode 100644 index 2450e5d..0000000 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/message/NatsDocumentRepository.java +++ /dev/null @@ -1,16 +0,0 @@ -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); - - Message request(String topic, Document document); -} diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java index d28f67e..09b28e5 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java @@ -3,6 +3,7 @@ package de.kentoj.scrow.bukkit; import de.kentoj.scrow.bukkit.crown.command.CrownCommand; import de.kentoj.scrow.bukkit.economy.CoinsCommand; import de.kentoj.scrow.bukkit.friends.command.FriendCommand; +import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; import reactor.core.publisher.Mono; @@ -26,7 +27,8 @@ public class CoreImplPlugin extends JavaPlugin { } private void registerServer() { - ScrowAPI.getServerManager().updateState(System.getenv("SERVER_HANDLE"), "UP"); + ScrowAPI.getServerManager().updateState(System.getenv("SERVER_HANDLE"), "UP") + .subscribe(__ -> Bukkit.getLogger().info("registered self")); } @Override diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/crown/CrownServerManager.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/crown/CrownServerManager.java index ee2814a..320db4e 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/crown/CrownServerManager.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/crown/CrownServerManager.java @@ -5,20 +5,21 @@ import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.ServerManager; import io.nats.client.Connection; import lombok.RequiredArgsConstructor; +import org.bson.Document; import org.jetbrains.annotations.NotNull; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.Arrays; -@RequiredArgsConstructor public class CrownServerManager implements ServerManager { - private final Connection nats; + private final @Override public Mono<@NotNull String> deployServer(String template) { - return Mono.fromFuture(nats.request("crown.deploy-server", template.getBytes())) + return Mono.fromFuture(nats.request("crown.deploy-server", new Document() + .append("template", template)) .map(msg -> new String(msg.getData())); } diff --git a/core-lib/build.gradle.kts b/core-lib/build.gradle.kts new file mode 100644 index 0000000..f47993b --- /dev/null +++ b/core-lib/build.gradle.kts @@ -0,0 +1,50 @@ +val scrowToken = providers.gradleProperty("scrowMavenToken") + .orElse(providers.environmentVariable("SCROW_MAVEN_TOKEN")).get() + +plugins { + id("java") + id("java-library") + id("maven-publish") +} + +group = "de.kentoj.scrow" +version = "0.1" + +repositories { + mavenCentral() +} + +dependencies { + // https://mvnrepository.com/artifact/io.nats/jnats + implementation("io.nats:jnats:2.25.2") + api("io.nats:jnats:2.25.2") + + // https://mvnrepository.com/artifact/org.mongodb/bson + implementation("org.mongodb:bson:5.8.0") + api("org.mongodb:bson:5.8.0") +} + +publishing { + publications { + create("CoreLib") { + groupId = project.group.toString() + artifactId = project.name + version = project.version.toString() + from(components["java"]) + } + } + repositories { + maven { + name = "scrow" + url = uri("http://forge.kentoj.de/api/packages/scrow/maven") + isAllowInsecureProtocol = true + credentials(HttpHeaderCredentials::class) { + name = "Authorization" + value = "token $scrowToken" + } + authentication { + create("header") + } + } + } +} diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/DocumentRepository.java b/core-lib/src/main/java/de/kentoj/scrowlib/DocumentRepository.java new file mode 100644 index 0000000..70c86f3 --- /dev/null +++ b/core-lib/src/main/java/de/kentoj/scrowlib/DocumentRepository.java @@ -0,0 +1,18 @@ +package de.kentoj.scrowlib; + +import io.nats.client.Message; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.bson.Document; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class DocumentRepository { + + public static Document fromMessage(Message message) { + return Document.parse(new String(message.getData())); + } + + public static byte[] toBytes(Document document) { + return document.toJson().getBytes(); + } +} diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/NatsRepository.java b/core-lib/src/main/java/de/kentoj/scrowlib/NatsRepository.java new file mode 100644 index 0000000..36974e8 --- /dev/null +++ b/core-lib/src/main/java/de/kentoj/scrowlib/NatsRepository.java @@ -0,0 +1,43 @@ +package de.kentoj.scrowlib; + +import io.nats.client.Connection; +import io.nats.client.Dispatcher; +import io.nats.client.Message; +import org.jetbrains.annotations.NotNull; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +public class NatsRepository { + + private final Connection nats; + + private final Dispatcher dispatcher; + + public NatsRepository(Connection nats) { + this.nats = nats; + this.dispatcher = nats.createDispatcher(); + } + + public Mono<@NotNull Void> publish(String subject, byte[] data) { + return Mono.fromRunnable(() -> nats.publish(subject, data)); + } + + public Flux<@NotNull Message> subscribe(String subject) { + return Flux.create(sink -> { + var handler = dispatcher.subscribe(subject, msg -> { + try { + sink.next(msg); + } catch (Throwable e) { + sink.error(e); + } + }); + + sink.onCancel(handler::unsubscribe); + sink.onDispose(handler::unsubscribe); + }); + } + + public Mono<@NotNull Message> request(String subject, byte[] data) { + return Mono.fromFuture(nats.request(subject, data)); + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 7346df7..710883e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -8,4 +8,5 @@ plugins { } rootProject.name = "core" include("core-bukkit-api") -include("core-bukkit-impl") \ No newline at end of file +include("core-bukkit-impl") +include("core-lib") \ No newline at end of file