From 3433e1d4df3b2e3cd7c9d0a678865c815ce93515 Mon Sep 17 00:00:00 2001 From: kento2 Date: Thu, 16 Apr 2026 22:17:48 +0200 Subject: [PATCH] . --- README.md | 16 +++++++--------- core-bukkit-api/build.gradle.kts | 6 +++--- .../java/de/kentoj/scrow/bukkit/ScrowAPI.java | 1 + .../de/kentoj/scrow/bukkit/CoreImplPlugin.java | 9 +++++++-- .../kentoj/scrow/bukkit/ScrowAPISurface.java | 10 ++++++---- .../bukkit/friends/command/FriendCommand.java | 5 +++-- .../friends/command/FriendListLiteral.java | 9 ++++++--- ...dshipRepository.java => FriendshipDAO.java} | 4 +--- ...Repository.java => MongoFriendshipDAO.java} | 18 +++++++++--------- 9 files changed, 43 insertions(+), 35 deletions(-) rename core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/{FriendshipRepository.java => FriendshipDAO.java} (84%) rename core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/{MongoFriendshipRepository.java => MongoFriendshipDAO.java} (86%) diff --git a/README.md b/README.md index 2bfdac0..b9779e3 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,13 @@ -TODO -- separate error handling from processing -- tab completion - environment ----------- - ```shell - docker network create scrow 2>/dev/null || true - docker run -d --network scrow -it --rm --name mongo -p 27017:27017 mongo - docker run -d --network scrow -e ME_CONFIG_MONGODB_SERVER=mongo -e ME_CONFIG_MONGODB_AUTH_PASSWORD='' -e ME_CONFIG_MONGODB_AUTH_USERNAME='' --name mongo-express -p 8081:8081 mongo-express - ``` +```shell +docker network create scrow 2>/dev/null || true +docker run -d --network scrow -it --rm --name mongo -p 27017:27017 mongo +docker run -d --network scrow -e ME_CONFIG_MONGODB_SERVER=mongo -e ME_CONFIG_MONGODB_AUTH_PASSWORD='' -e ME_CONFIG_MONGODB_AUTH_USERNAME='' -e ME_CONFIG_BASICAUTH_USERNAME='a' -e ME_CONFIG_BASICAUTH_PASSWORD=1234 --name mongo-express -p 8081:8081 mongo-express +``` + +acce**ss the mongo-db web interface at http://localhost:8081; username `a`, password `1234`** modules ------- diff --git a/core-bukkit-api/build.gradle.kts b/core-bukkit-api/build.gradle.kts index 211bc70..cb7bc0e 100644 --- a/core-bukkit-api/build.gradle.kts +++ b/core-bukkit-api/build.gradle.kts @@ -36,9 +36,9 @@ dependencies { api("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT") api("net.kyori:adventure-platform-bukkit:4.4.1") - api("de.kentoj:kencommandapi-core:2.0.1") - implementation("de.kentoj:kencommandapi-bukkit:2.0.1") - api("de.kentoj:kencommandapi-bukkit:2.0.1") + api("de.kentoj:kencommandapi-core:2.0.2") + implementation("de.kentoj:kencommandapi-bukkit:2.0.2") + api("de.kentoj:kencommandapi-bukkit:2.0.2") } publishing { diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java index 9d96b04..f83556b 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java +++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java @@ -1,5 +1,6 @@ package de.kentoj.scrow.bukkit; +import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoDatabase; import de.kentoj.kencommandapi.BukkitKenCommandApi; import de.kentoj.scrow.bukkit.friends.FriendsService; 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 78b295d..2fe4eb7 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 @@ -2,6 +2,7 @@ package de.kentoj.scrow.bukkit; import de.kentoj.scrow.bukkit.economy.CoinsCommand; import de.kentoj.scrow.bukkit.friends.command.FriendCommand; +import de.kentoj.scrow.bukkit.friends.friendship.MongoFriendshipDAO; import org.bukkit.plugin.java.JavaPlugin; import reactor.core.publisher.Mono; @@ -11,11 +12,11 @@ public class CoreImplPlugin extends JavaPlugin { @Override public void onEnable() { - ScrowAPISurface.initScrowAPI(this, false); + ScrowAPISurface.initScrowAPI(this, true); { ScrowAPI.getCommandManager().register(new CoinsCommand().getRootNode()); - ScrowAPI.getCommandManager().register(new FriendCommand().getRootNode()); + ScrowAPI.getCommandManager().register(new FriendCommand(new MongoFriendshipDAO(ScrowAPI.getDatabase())).getRootNode()); } { @@ -33,6 +34,10 @@ public class CoreImplPlugin extends JavaPlugin { .doOnNext(a -> System.out.println("coins: " + a)) .block(); } + } + + @Override + public void onDisable() { ScrowAPISurface.destroyScrowAPI(); } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java index c4c3144..c7fc147 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java @@ -20,7 +20,7 @@ import reactor.core.scheduler.Schedulers; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class ScrowAPISurface { - private static @Nullable MongoClient databaseClient = null; + private static @Nullable MongoClient mongoClient; public static void initScrowAPI(Plugin plugin, boolean enableDatabase) { ScrowAPI.setMinecraftScheduler(Schedulers.fromExecutor(cmd -> { @@ -38,7 +38,9 @@ public class ScrowAPISurface { .uuidRepresentation(UuidRepresentation.STANDARD) .applyConnectionString(new ConnectionString("mongodb://localhost:27017/scrow")) .build(); - databaseClient = MongoClients.create(settings); + + mongoClient = MongoClients.create(settings); + ScrowAPI.setDatabase(mongoClient.getDatabase("scrow")); } ScrowAPI.setEconomyService( @@ -52,8 +54,8 @@ public class ScrowAPISurface { } public static void destroyScrowAPI() { - if (databaseClient != null) { - databaseClient.close(); + if (mongoClient != null) { + mongoClient.close(); } } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendCommand.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendCommand.java index c4252e7..865fcfd 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendCommand.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendCommand.java @@ -3,6 +3,7 @@ package de.kentoj.scrow.bukkit.friends.command; import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.api.structure.node.CommandNode; import de.kentoj.scrow.bukkit.ScrowAPI; +import de.kentoj.scrow.bukkit.friends.friendship.FriendshipDAO; import lombok.Getter; import org.bukkit.command.CommandSender; @@ -11,8 +12,8 @@ public class FriendCommand { @Getter private final CommandNode rootNode; - public FriendCommand() { + public FriendCommand(FriendshipDAO friendshipDAO) { this.rootNode = ScrowAPI.getCommandManager().createNode("friends", "f", "friend"); - rootNode.addLiteral(new FriendListLiteral().getNode()); + rootNode.addLiteral(new FriendListLiteral(friendshipDAO).getNode()); } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendListLiteral.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendListLiteral.java index 0bfaa57..11b5628 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendListLiteral.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendListLiteral.java @@ -3,6 +3,7 @@ package de.kentoj.scrow.bukkit.friends.command; import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.api.structure.node.CommandNode; import de.kentoj.scrow.bukkit.ScrowAPI; +import de.kentoj.scrow.bukkit.friends.friendship.FriendshipDAO; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -12,8 +13,10 @@ public class FriendListLiteral { @Getter private final CommandNode node; + private final FriendshipDAO friendshipDAO; - public FriendListLiteral() { + public FriendListLiteral(FriendshipDAO friendshipDAO) { + this.friendshipDAO = friendshipDAO; this.node = ScrowAPI.getCommandManager().createNode("list"); node.setExecutor(this::friendList); } @@ -21,11 +24,11 @@ public class FriendListLiteral { private void friendList(BukkitCommandContext ctx) { var ownUid = ctx.getPlayerSender().getUniqueId(); ctx.getPlayerSender().sendMessage("friends:"); - ScrowAPI.getFriendsService().getFriendships(ownUid) + friendshipDAO.getFriendships(ownUid) .publishOn(ScrowAPI.getMinecraftScheduler()) .subscribeOn(Schedulers.boundedElastic()) .map(friendship -> { - var friendPlayerUid = friendship.getOther(ownUid); + var friendPlayerUid = friendship.getUuids().getOther(ownUid); var friendPlayerName = Bukkit.getOfflinePlayer(friendPlayerUid).getName(); return "- " + friendPlayerName; }).doOnNext(line -> { diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/FriendshipRepository.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/FriendshipDAO.java similarity index 84% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/FriendshipRepository.java rename to core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/FriendshipDAO.java index 4ba662a..0af008c 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/FriendshipRepository.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/FriendshipDAO.java @@ -1,15 +1,13 @@ package de.kentoj.scrow.bukkit.friends.friendship; import de.kentoj.scrow.bukkit.friends.Friendship; -import de.kentoj.scrow.bukkit.util.pair.Tuple2; import org.jetbrains.annotations.NotNull; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; -import java.time.Instant; import java.util.UUID; -public interface FriendshipRepository { +public interface FriendshipDAO { Flux<@NotNull Friendship> getFriendships(UUID playerId); diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/MongoFriendshipRepository.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/MongoFriendshipDAO.java similarity index 86% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/MongoFriendshipRepository.java rename to core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/MongoFriendshipDAO.java index b371f83..9b0ec1c 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/MongoFriendshipRepository.java +++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/MongoFriendshipDAO.java @@ -17,32 +17,32 @@ import reactor.core.publisher.Mono; import java.sql.Date; import java.util.UUID; -public class MongoFriendshipRepository implements FriendshipRepository { +public class MongoFriendshipDAO implements FriendshipDAO { private static final String COLLECTION_NAME = "friendships"; private final MongoDatabase database; - public MongoFriendshipRepository(MongoDatabase database) { + public MongoFriendshipDAO(MongoDatabase database) { this.database = database; - database.createCollection(COLLECTION_NAME); - collection().createIndex( + Mono.from(database.createCollection(COLLECTION_NAME)).block(); + Mono.from(collection().createIndex( Indexes.compoundIndex( Indexes.ascending("first"), Indexes.ascending("second") ), new IndexOptions().unique(true) - ); + )).block(); } @Override public Flux<@NotNull Friendship> getFriendships(UUID playerId) { return Flux.from(collection() - .find(Filters.or( - Filters.eq("first", playerId), - Filters.eq("second", playerId) - ))) + .find(Filters.or( + Filters.eq("first", playerId), + Filters.eq("second", playerId) + ))) .map(this::fromDocument); }