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