.
This commit is contained in:
parent
ad4e00a6ab
commit
3433e1d4df
9 changed files with 43 additions and 35 deletions
16
README.md
16
README.md
|
|
@ -1,15 +1,13 @@
|
||||||
TODO
|
|
||||||
- separate error handling from processing
|
|
||||||
- tab completion
|
|
||||||
|
|
||||||
environment
|
environment
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
docker network create scrow 2>/dev/null || true
|
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 -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
|
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
|
modules
|
||||||
-------
|
-------
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,9 @@ dependencies {
|
||||||
api("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT")
|
api("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT")
|
||||||
api("net.kyori:adventure-platform-bukkit:4.4.1")
|
api("net.kyori:adventure-platform-bukkit:4.4.1")
|
||||||
|
|
||||||
api("de.kentoj:kencommandapi-core:2.0.1")
|
api("de.kentoj:kencommandapi-core:2.0.2")
|
||||||
implementation("de.kentoj:kencommandapi-bukkit:2.0.1")
|
implementation("de.kentoj:kencommandapi-bukkit:2.0.2")
|
||||||
api("de.kentoj:kencommandapi-bukkit:2.0.1")
|
api("de.kentoj:kencommandapi-bukkit:2.0.2")
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package de.kentoj.scrow.bukkit;
|
package de.kentoj.scrow.bukkit;
|
||||||
|
|
||||||
|
import com.mongodb.reactivestreams.client.MongoClient;
|
||||||
import com.mongodb.reactivestreams.client.MongoDatabase;
|
import com.mongodb.reactivestreams.client.MongoDatabase;
|
||||||
import de.kentoj.kencommandapi.BukkitKenCommandApi;
|
import de.kentoj.kencommandapi.BukkitKenCommandApi;
|
||||||
import de.kentoj.scrow.bukkit.friends.FriendsService;
|
import de.kentoj.scrow.bukkit.friends.FriendsService;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package de.kentoj.scrow.bukkit;
|
||||||
|
|
||||||
import de.kentoj.scrow.bukkit.economy.CoinsCommand;
|
import de.kentoj.scrow.bukkit.economy.CoinsCommand;
|
||||||
import de.kentoj.scrow.bukkit.friends.command.FriendCommand;
|
import de.kentoj.scrow.bukkit.friends.command.FriendCommand;
|
||||||
|
import de.kentoj.scrow.bukkit.friends.friendship.MongoFriendshipDAO;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
|
@ -11,11 +12,11 @@ public class CoreImplPlugin extends JavaPlugin {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
ScrowAPISurface.initScrowAPI(this, false);
|
ScrowAPISurface.initScrowAPI(this, true);
|
||||||
|
|
||||||
{
|
{
|
||||||
ScrowAPI.getCommandManager().register(new CoinsCommand().getRootNode());
|
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))
|
.doOnNext(a -> System.out.println("coins: " + a))
|
||||||
.block();
|
.block();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisable() {
|
||||||
ScrowAPISurface.destroyScrowAPI();
|
ScrowAPISurface.destroyScrowAPI();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import reactor.core.scheduler.Schedulers;
|
||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class ScrowAPISurface {
|
public class ScrowAPISurface {
|
||||||
|
|
||||||
private static @Nullable MongoClient databaseClient = null;
|
private static @Nullable MongoClient mongoClient;
|
||||||
|
|
||||||
public static void initScrowAPI(Plugin plugin, boolean enableDatabase) {
|
public static void initScrowAPI(Plugin plugin, boolean enableDatabase) {
|
||||||
ScrowAPI.setMinecraftScheduler(Schedulers.fromExecutor(cmd -> {
|
ScrowAPI.setMinecraftScheduler(Schedulers.fromExecutor(cmd -> {
|
||||||
|
|
@ -38,7 +38,9 @@ public class ScrowAPISurface {
|
||||||
.uuidRepresentation(UuidRepresentation.STANDARD)
|
.uuidRepresentation(UuidRepresentation.STANDARD)
|
||||||
.applyConnectionString(new ConnectionString("mongodb://localhost:27017/scrow"))
|
.applyConnectionString(new ConnectionString("mongodb://localhost:27017/scrow"))
|
||||||
.build();
|
.build();
|
||||||
databaseClient = MongoClients.create(settings);
|
|
||||||
|
mongoClient = MongoClients.create(settings);
|
||||||
|
ScrowAPI.setDatabase(mongoClient.getDatabase("scrow"));
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrowAPI.setEconomyService(
|
ScrowAPI.setEconomyService(
|
||||||
|
|
@ -52,8 +54,8 @@ public class ScrowAPISurface {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void destroyScrowAPI() {
|
public static void destroyScrowAPI() {
|
||||||
if (databaseClient != null) {
|
if (mongoClient != null) {
|
||||||
databaseClient.close();
|
mongoClient.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package de.kentoj.scrow.bukkit.friends.command;
|
||||||
import de.kentoj.kencommandapi.BukkitCommandContext;
|
import de.kentoj.kencommandapi.BukkitCommandContext;
|
||||||
import de.kentoj.kencommandapi.api.structure.node.CommandNode;
|
import de.kentoj.kencommandapi.api.structure.node.CommandNode;
|
||||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||||
|
import de.kentoj.scrow.bukkit.friends.friendship.FriendshipDAO;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
|
@ -11,8 +12,8 @@ public class FriendCommand {
|
||||||
@Getter
|
@Getter
|
||||||
private final CommandNode<CommandSender, BukkitCommandContext> rootNode;
|
private final CommandNode<CommandSender, BukkitCommandContext> rootNode;
|
||||||
|
|
||||||
public FriendCommand() {
|
public FriendCommand(FriendshipDAO friendshipDAO) {
|
||||||
this.rootNode = ScrowAPI.getCommandManager().createNode("friends", "f", "friend");
|
this.rootNode = ScrowAPI.getCommandManager().createNode("friends", "f", "friend");
|
||||||
rootNode.addLiteral(new FriendListLiteral().getNode());
|
rootNode.addLiteral(new FriendListLiteral(friendshipDAO).getNode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package de.kentoj.scrow.bukkit.friends.command;
|
||||||
import de.kentoj.kencommandapi.BukkitCommandContext;
|
import de.kentoj.kencommandapi.BukkitCommandContext;
|
||||||
import de.kentoj.kencommandapi.api.structure.node.CommandNode;
|
import de.kentoj.kencommandapi.api.structure.node.CommandNode;
|
||||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||||
|
import de.kentoj.scrow.bukkit.friends.friendship.FriendshipDAO;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
@ -12,8 +13,10 @@ public class FriendListLiteral {
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final CommandNode<CommandSender, BukkitCommandContext> node;
|
private final CommandNode<CommandSender, BukkitCommandContext> node;
|
||||||
|
private final FriendshipDAO friendshipDAO;
|
||||||
|
|
||||||
public FriendListLiteral() {
|
public FriendListLiteral(FriendshipDAO friendshipDAO) {
|
||||||
|
this.friendshipDAO = friendshipDAO;
|
||||||
this.node = ScrowAPI.getCommandManager().createNode("list");
|
this.node = ScrowAPI.getCommandManager().createNode("list");
|
||||||
node.setExecutor(this::friendList);
|
node.setExecutor(this::friendList);
|
||||||
}
|
}
|
||||||
|
|
@ -21,11 +24,11 @@ public class FriendListLiteral {
|
||||||
private void friendList(BukkitCommandContext ctx) {
|
private void friendList(BukkitCommandContext ctx) {
|
||||||
var ownUid = ctx.getPlayerSender().getUniqueId();
|
var ownUid = ctx.getPlayerSender().getUniqueId();
|
||||||
ctx.getPlayerSender().sendMessage("friends:");
|
ctx.getPlayerSender().sendMessage("friends:");
|
||||||
ScrowAPI.getFriendsService().getFriendships(ownUid)
|
friendshipDAO.getFriendships(ownUid)
|
||||||
.publishOn(ScrowAPI.getMinecraftScheduler())
|
.publishOn(ScrowAPI.getMinecraftScheduler())
|
||||||
.subscribeOn(Schedulers.boundedElastic())
|
.subscribeOn(Schedulers.boundedElastic())
|
||||||
.map(friendship -> {
|
.map(friendship -> {
|
||||||
var friendPlayerUid = friendship.getOther(ownUid);
|
var friendPlayerUid = friendship.getUuids().getOther(ownUid);
|
||||||
var friendPlayerName = Bukkit.getOfflinePlayer(friendPlayerUid).getName();
|
var friendPlayerName = Bukkit.getOfflinePlayer(friendPlayerUid).getName();
|
||||||
return "- " + friendPlayerName;
|
return "- " + friendPlayerName;
|
||||||
}).doOnNext(line -> {
|
}).doOnNext(line -> {
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,13 @@
|
||||||
package de.kentoj.scrow.bukkit.friends.friendship;
|
package de.kentoj.scrow.bukkit.friends.friendship;
|
||||||
|
|
||||||
import 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 org.jetbrains.annotations.NotNull;
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public interface FriendshipRepository {
|
public interface FriendshipDAO {
|
||||||
|
|
||||||
Flux<@NotNull Friendship> getFriendships(UUID playerId);
|
Flux<@NotNull Friendship> getFriendships(UUID playerId);
|
||||||
|
|
||||||
|
|
@ -17,23 +17,23 @@ import reactor.core.publisher.Mono;
|
||||||
import java.sql.Date;
|
import java.sql.Date;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class MongoFriendshipRepository implements FriendshipRepository {
|
public class MongoFriendshipDAO implements FriendshipDAO {
|
||||||
|
|
||||||
private static final String COLLECTION_NAME = "friendships";
|
private static final String COLLECTION_NAME = "friendships";
|
||||||
|
|
||||||
private final MongoDatabase database;
|
private final MongoDatabase database;
|
||||||
|
|
||||||
public MongoFriendshipRepository(MongoDatabase database) {
|
public MongoFriendshipDAO(MongoDatabase database) {
|
||||||
this.database = database;
|
this.database = database;
|
||||||
|
|
||||||
database.createCollection(COLLECTION_NAME);
|
Mono.from(database.createCollection(COLLECTION_NAME)).block();
|
||||||
collection().createIndex(
|
Mono.from(collection().createIndex(
|
||||||
Indexes.compoundIndex(
|
Indexes.compoundIndex(
|
||||||
Indexes.ascending("first"),
|
Indexes.ascending("first"),
|
||||||
Indexes.ascending("second")
|
Indexes.ascending("second")
|
||||||
),
|
),
|
||||||
new IndexOptions().unique(true)
|
new IndexOptions().unique(true)
|
||||||
);
|
)).block();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
Loading…
Add table
Add a link
Reference in a new issue