gradle time
This commit is contained in:
parent
7040a6ce1e
commit
9421ef511e
47 changed files with 482 additions and 226 deletions
61
.idea/workspace.xml
generated
61
.idea/workspace.xml
generated
|
|
@ -4,26 +4,54 @@
|
|||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="56c685a1-f609-4ffd-a951-849beb2a7f8d" name="Changes" comment="currently refactoring a lot">
|
||||
<change afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/cache/InstanceCache.java" afterDir="false" />
|
||||
<list default="true" id="56c685a1-f609-4ffd-a951-849beb2a7f8d" name="Changes" comment=".">
|
||||
<change afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendRequestDeclineLiteral.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/notification/NotificationListener.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/network/NetworkPlayerWatchdog.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/player/NetworkPlayer.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/player/NetworkPlayerFactory.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/player/NetworkPlayerImpl.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/network/FriendNotifications.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-api/build.gradle.kts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/friends/OrderedUUIDPair.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/friends/OrderedUUIDPair.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/friends/FriendRequest.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/friends/FriendRequest.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/friends/FriendRequestService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/friends/FriendRequestService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/friends/Friendship.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/friends/Friendship.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/friends/FriendshipService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/friends/FriendshipService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/friends/OrderedUUIDPair.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/friends/OrderedUUIDPair.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/MinigameInfo.java" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/misc/EconomyService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/economy/EconomyService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/misc/PlayerManager.java" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/TaskImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/TaskImpl.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/build.gradle.kts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/InMemoryEconomyService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/economy/InMemoryEconomyService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/economy/PostgresEconomyService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/economy/PostgresEconomyService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendAddLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendAddLiteral.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/PostgresFriendshipService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/PostgresFriendshipService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/request/PostgresFriendRequestService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/request/PostgresFriendRequestService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/command/InstanceCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/command/InstanceCommand.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/command/InstanceDestroyLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/command/InstanceDestroyLiteral.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/server/LobbyCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/command/LobbyCommand.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/server/PlayCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/command/PlayCommand.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendCommand.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendListLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendListLiteral.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendRemoveLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendRemoveLiteral.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendRequestsLiteral.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/command/FriendRequestsLiteral.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/FriendshipImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/FriendshipImpl.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/InMemoryFriendshipService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/InMemoryFriendshipService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/friendship/PostgresFriendshipService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/PostgresFriendshipService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/request/FriendRequestImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/FriendRequestImpl.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/request/InMemoryFriendRequestService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/InMemoryFriendRequestService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/friends/request/PostgresFriendRequestService.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/PostgresFriendRequestService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/command/PlayCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/instancemanager/command/PlayCommand.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/playermanager/PlayerManagerImpl.java" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-lib/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/build.gradle.kts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-velocity-api/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-api/build.gradle.kts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/messaging/MessageBroker.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/messaging/MessageBroker.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/messaging/ResultRepository.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-lib/src/main/java/de/kentoj/scrowlib/messaging/ResultRepository.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-velocity-api/src/main/java/de/kentoj/scrow/velocity/ScrowAPI.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-api/src/main/java/de/kentoj/scrow/velocity/ScrowAPI.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-velocity-impl/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/build.gradle.kts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/CoreVelocityPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/CoreVelocityPlugin.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/ScrowAPISurface.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/ScrowAPISurface.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/LastTargetCache.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/LastTargetCache.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/ReplyCommand.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/ReplyCommand.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/server/SendPlayerWatchdog.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/network/SendPlayerWatchdog.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/server/ServerRegisterWatchdog.java" beforeDir="false" afterPath="$PROJECT_DIR$/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/network/ServerRegisterWatchdog.java" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
|
@ -114,6 +142,7 @@
|
|||
<list>
|
||||
<option value="Kotlin Class" />
|
||||
<option value="Interface" />
|
||||
<option value="package-info" />
|
||||
<option value="Class" />
|
||||
</list>
|
||||
</option>
|
||||
|
|
@ -144,7 +173,7 @@
|
|||
"keyToString": {
|
||||
"Gradle.Download Sources.executor": "Run",
|
||||
"Gradle.core [:core-velocity-impl:shadowJar].executor": "Run",
|
||||
"Gradle.core [build].executor": "Run",
|
||||
"Gradle.core [build].executor": "Debug",
|
||||
"Gradle.core [clean].executor": "Run",
|
||||
"Gradle.core [publishAllPublicationsToScrowRepository].executor": "Run",
|
||||
"Gradle.core [publishCoreLibPublicationToScrowRepository].executor": "Run",
|
||||
|
|
@ -184,6 +213,8 @@
|
|||
<recent name="de.kentoj.scrow.bukkit.region" />
|
||||
</key>
|
||||
<key name="CopyClassDialog.RECENTS_KEY">
|
||||
<recent name="de.kentoj.scrow.bukkit.player" />
|
||||
<recent name="de.kentoj.scrow.bukkit.friends.command" />
|
||||
<recent name="de.kentoj.scrowlib.messaging" />
|
||||
<recent name="de.kentoj.scrow.bukkit.region.event" />
|
||||
</key>
|
||||
|
|
@ -363,9 +394,9 @@
|
|||
<servers />
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<MESSAGE value="." />
|
||||
<MESSAGE value="fix: unable to leave regions when unloaded" />
|
||||
<MESSAGE value="currently refactoring a lot" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="currently refactoring a lot" />
|
||||
<MESSAGE value="." />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="." />
|
||||
</component>
|
||||
</project>
|
||||
35
README.md
35
README.md
|
|
@ -3,36 +3,13 @@ TODO
|
|||
- improve error handling in Task ig
|
||||
- try with InMemory db and debug postgres implementation
|
||||
- logging in general, log some exceptions to game chat
|
||||
- sleep
|
||||
- notification: Friend is now offline/online
|
||||
- messages across server
|
||||
- /ignore command
|
||||
|
||||
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='' -e ME_CONFIG_BASICAUTH_USERNAME='a' -e ME_CONFIG_BASICAUTH_PASSWORD=1234 --name mongo-express -p 8081:8081 mongo-express
|
||||
docker run -d --network scrow -p 4222:4222 --name nats nats
|
||||
```
|
||||
|
||||
access the mongo-db web interface at http://localhost:8081; username `a`, password `1234`**
|
||||
|
||||
## ENV
|
||||
|
||||
- HOST_NATS e.g `nats://127.17.0.1:4222`
|
||||
- HOST_MONGO e.g `mongodb://localhost:27017/scrow`
|
||||
|
||||
## modules
|
||||
|
||||
### core-lib
|
||||
|
||||
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
|
||||
|
||||
core-bukkit-impl is a spigot plugin. It shades and implements core-bukkit-api
|
||||
- **core-lib**: stateless library
|
||||
- **core-bukkit** stateful plugin/api for minecraft development, depends on core-lib
|
||||
- **core-velocity** stateful plugin/api for proxy development, depends on core-lib
|
||||
|
|
@ -1,22 +1,25 @@
|
|||
package de.kentoj.scrow.bukkit;
|
||||
|
||||
import de.kentoj.kencommandapi.CommandAPI;
|
||||
import de.kentoj.scrow.bukkit.friends.FriendRequestService;
|
||||
import de.kentoj.scrow.bukkit.friends.FriendshipService;
|
||||
import de.kentoj.scrow.bukkit.misc.EconomyService;
|
||||
import de.kentoj.scrow.bukkit.misc.PlayerManager;
|
||||
import de.kentoj.scrowlib.friends.FriendRequestService;
|
||||
import de.kentoj.scrowlib.friends.FriendshipService;
|
||||
import de.kentoj.scrowlib.economy.EconomyService;
|
||||
import de.kentoj.scrowlib.player.NetworkPlayer;
|
||||
import de.kentoj.scrowlib.player.NetworkPlayerFactory;
|
||||
import de.kentoj.scrow.bukkit.region.RegionManager;
|
||||
import de.kentoj.scrowlib.instancemanager.InstanceManager;
|
||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||
import io.nats.client.Connection;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class ScrowAPI {
|
||||
|
||||
|
|
@ -41,8 +44,15 @@ public class ScrowAPI {
|
|||
private static RegionManager regionManager;
|
||||
@Getter
|
||||
private static CommandAPI commandApi;
|
||||
@Getter
|
||||
private static PlayerManager playerManager;
|
||||
private static NetworkPlayerFactory playerFactory;
|
||||
|
||||
public static NetworkPlayer getPlayer(OfflinePlayer player) {
|
||||
return getPlayer(player.getUniqueId());
|
||||
}
|
||||
|
||||
public static NetworkPlayer getPlayer(UUID uuid) {
|
||||
return playerFactory.create(uuid);
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
public static void setEconomyService(EconomyService economyService) {
|
||||
|
|
@ -90,8 +100,8 @@ public class ScrowAPI {
|
|||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
public static void setPlayerManager(PlayerManager playerManager) {
|
||||
ScrowAPI.playerManager = playerManager;
|
||||
public static void setPlayerFactory(NetworkPlayerFactory playerFactory) {
|
||||
ScrowAPI.playerFactory = playerFactory;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
package de.kentoj.scrow.bukkit.minigame;
|
||||
|
||||
import de.kentoj.scrowlib.instancemanager.ServerInstance;
|
||||
|
||||
public interface MinigameInfo {
|
||||
|
||||
String getName();
|
||||
|
||||
int getPlayerCount();
|
||||
|
||||
ServerInstance getServerInstance();
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
package de.kentoj.scrow.bukkit.misc;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public interface PlayerManager {
|
||||
|
||||
void sendPlayer(UUID uuid, String instanceHandle);
|
||||
}
|
||||
|
|
@ -24,7 +24,7 @@ public class TaskImpl<T> implements Task<T> {
|
|||
private static final ExecutorService EXECUTOR = Executors.newVirtualThreadPerTaskExecutor();
|
||||
|
||||
private final Supplier<TaskState<T>> compute;
|
||||
private TaskState<T> cachedResult = null;
|
||||
private volatile TaskState<T> cachedResult = null;
|
||||
|
||||
@Override
|
||||
public CompletableFuture<T> toFuture() {
|
||||
|
|
@ -90,8 +90,10 @@ public class TaskImpl<T> implements Task<T> {
|
|||
}
|
||||
|
||||
private TaskState<T> state() {
|
||||
synchronized (this) {
|
||||
if (cachedResult == null)
|
||||
cachedResult = compute.get();
|
||||
return cachedResult;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@ import de.kentoj.scrow.bukkit.economy.command.CoinsCommand;
|
|||
import de.kentoj.scrow.bukkit.friends.command.FriendCommand;
|
||||
import de.kentoj.scrow.bukkit.instancemanager.cache.InstanceCache;
|
||||
import de.kentoj.scrow.bukkit.instancemanager.command.InstanceCommand;
|
||||
import de.kentoj.scrow.bukkit.region.RegionPlayerTracker;
|
||||
import de.kentoj.scrow.bukkit.region.RegionTask;
|
||||
import de.kentoj.scrow.bukkit.instancemanager.command.LobbyCommand;
|
||||
import de.kentoj.scrow.bukkit.instancemanager.command.PlayCommand;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
|
@ -30,8 +28,6 @@ public class CoreImplPlugin extends JavaPlugin {
|
|||
ScrowAPI.getCommandApi().register(new LobbyCommand().getRootNode());
|
||||
}
|
||||
|
||||
new RegionTask(new RegionPlayerTracker()).runTaskTimer(this, 10, 10);
|
||||
|
||||
// TODO/FIXME
|
||||
//registerServer();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,17 @@
|
|||
package de.kentoj.scrow.bukkit;
|
||||
|
||||
import de.kentoj.kencommandapi.CommandAPI;
|
||||
import de.kentoj.scrow.bukkit.economy.InMemoryEconomyService;
|
||||
import de.kentoj.scrow.bukkit.economy.PostgresEconomyService;
|
||||
import de.kentoj.scrow.bukkit.friends.friendship.InMemoryFriendshipService;
|
||||
import de.kentoj.scrow.bukkit.friends.friendship.PostgresFriendshipService;
|
||||
import de.kentoj.scrow.bukkit.friends.request.InMemoryFriendRequestService;
|
||||
import de.kentoj.scrow.bukkit.friends.request.PostgresFriendRequestService;
|
||||
import de.kentoj.scrow.bukkit.playermanager.PlayerManagerImpl;
|
||||
import de.kentoj.scrowlib.economy.InMemoryEconomyService;
|
||||
import de.kentoj.scrowlib.economy.PostgresEconomyService;
|
||||
import de.kentoj.scrowlib.friends.friendship.InMemoryFriendshipService;
|
||||
import de.kentoj.scrowlib.friends.friendship.PostgresFriendshipService;
|
||||
import de.kentoj.scrowlib.friends.request.InMemoryFriendRequestService;
|
||||
import de.kentoj.scrowlib.friends.request.PostgresFriendRequestService;
|
||||
import de.kentoj.scrow.bukkit.network.NetworkPlayerWatchdog;
|
||||
import de.kentoj.scrowlib.player.NetworkPlayerImpl;
|
||||
import de.kentoj.scrow.bukkit.region.RegionManagerImpl;
|
||||
import de.kentoj.scrow.bukkit.region.RegionPlayerTracker;
|
||||
import de.kentoj.scrow.bukkit.region.RegionTask;
|
||||
import de.kentoj.scrowlib.instancemanager.InstanceManagerImpl;
|
||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||
import de.kentoj.scrowlib.utils.EnvUtils;
|
||||
|
|
@ -17,12 +20,9 @@ import io.nats.client.Options;
|
|||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jdbi.v3.core.ConnectionFactory;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Properties;
|
||||
|
||||
@NoArgsConstructor(access = AccessLevel.NONE)
|
||||
|
|
@ -53,7 +53,7 @@ public class ScrowAPISurface {
|
|||
ScrowAPI.setJdbi(Jdbi.create(EnvUtils.envOrThrow("HOST_POSTGRES"), props));
|
||||
}
|
||||
|
||||
ScrowAPI.setPlayerManager(new PlayerManagerImpl());
|
||||
ScrowAPI.setPlayerFactory(playerId -> new NetworkPlayerImpl(ScrowAPI.getMessageBroker(), playerId));
|
||||
ScrowAPI.setRegionManager(new RegionManagerImpl());
|
||||
ScrowAPI.setCommandApi(new CommandAPI(plugin));
|
||||
ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.getMessageBroker()));
|
||||
|
|
@ -63,6 +63,9 @@ public class ScrowAPISurface {
|
|||
new PostgresFriendRequestService() : new InMemoryFriendRequestService());
|
||||
ScrowAPI.setFriendshipService(ScrowAPI.getJdbi() != null ?
|
||||
new PostgresFriendshipService() : new InMemoryFriendshipService());
|
||||
|
||||
new RegionTask(new RegionPlayerTracker()).runTaskTimer(plugin, 10, 10);
|
||||
new NetworkPlayerWatchdog().listen();
|
||||
}
|
||||
|
||||
public static void destroyScrowAPI() {
|
||||
|
|
|
|||
|
|
@ -8,13 +8,16 @@ import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
|||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||
import de.kentoj.kencommandapi.type.OfflinePlayerArgumentType;
|
||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||
import de.kentoj.scrow.bukkit.friends.friendship.FriendshipImpl;
|
||||
import de.kentoj.scrow.bukkit.friends.request.FriendRequestImpl;
|
||||
import de.kentoj.scrowlib.friends.FriendRequestService;
|
||||
import de.kentoj.scrowlib.friends.FriendshipService;
|
||||
import de.kentoj.scrowlib.friends.friendship.FriendshipImpl;
|
||||
import de.kentoj.scrowlib.friends.request.FriendRequestImpl;
|
||||
import de.kentoj.scrow.bukkit.scheduler.Task;
|
||||
import de.kentoj.scrow.bukkit.scheduler.Tasks;
|
||||
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
|
@ -31,6 +34,8 @@ public class FriendAddLiteral implements CommandExecutor<CommandSender> {
|
|||
private final CommandNode<CommandSender> literal;
|
||||
private final CommandArgument<CommandSender, OfflinePlayer> playerArg;
|
||||
private final ScrowMessageStyle style;
|
||||
private final FriendRequestService requestService = ScrowAPI.getFriendRequestService();
|
||||
private final FriendshipService friendsService = ScrowAPI.getFriendshipService();
|
||||
|
||||
public FriendAddLiteral(ScrowMessageStyle style) {
|
||||
this.style = style;
|
||||
|
|
@ -54,30 +59,28 @@ public class FriendAddLiteral implements CommandExecutor<CommandSender> {
|
|||
}
|
||||
|
||||
private void sendRequest(Player self, OfflinePlayer other) {
|
||||
Tasks.runAsync(() -> ScrowAPI.getFriendRequestService()
|
||||
.saveFriendRequest(new FriendRequestImpl(self.getUniqueId(), other.getUniqueId())))
|
||||
Tasks.runAsync(() ->
|
||||
requestService.saveFriendRequest(new FriendRequestImpl(self.getUniqueId(), other.getUniqueId())))
|
||||
.runSync(() -> {
|
||||
self.sendMessage(style.ok("Successfully sent " + other.getName() + " a friend request."));
|
||||
var otherPlayer = other.getPlayer();
|
||||
if (otherPlayer != null)
|
||||
otherPlayer.sendMessage(style.ok(" wants to be friends with you. Use '/f add " + self.getName() + "' to accept."));
|
||||
});
|
||||
var msg = Component.text(self.getName() + " sent you a friend request.")
|
||||
.append(FriendCommand.friendRequestOptions(self.getName(), true));
|
||||
ScrowAPI.getPlayer(other).sendMessage(style.ok(msg));
|
||||
})
|
||||
.await();
|
||||
}
|
||||
|
||||
private void acceptRequest(Player self, OfflinePlayer other) {
|
||||
Tasks.runAsync(() -> Tasks.awaitAll(
|
||||
Tasks.runAsync(() -> ScrowAPI.getFriendRequestService()
|
||||
.deleteFriendRequest(self.getUniqueId(), other.getUniqueId())),
|
||||
Tasks.runAsync(() -> ScrowAPI.getFriendRequestService()
|
||||
.deleteFriendRequest(other.getUniqueId(), self.getUniqueId())),
|
||||
Tasks.runAsync(() -> ScrowAPI.getFriendshipService()
|
||||
.saveFriendship(new FriendshipImpl(self.getUniqueId(), other.getUniqueId(), Instant.now()))
|
||||
Tasks.runAsync(() -> requestService.deleteFriendRequest(self.getUniqueId(), other.getUniqueId())),
|
||||
Tasks.runAsync(() -> requestService.deleteFriendRequest(other.getUniqueId(), self.getUniqueId())),
|
||||
Tasks.runAsync(() -> friendsService.saveFriendship(new FriendshipImpl(self.getUniqueId(), other.getUniqueId(), Instant.now()))
|
||||
)))
|
||||
.runSync(() -> {
|
||||
self.sendMessage(style.ok("You are now friends with " + other.getName() + "."));
|
||||
if (other.getPlayer() != null)
|
||||
other.getPlayer().sendMessage(style.ok("You are now friends with " + self.getName() + "."));
|
||||
});
|
||||
ScrowAPI.getPlayer(other).sendMessage(style.ok("You are now friends with " + self.getName() + "."));
|
||||
})
|
||||
.await();
|
||||
}
|
||||
|
||||
private Result<AddAction, String> findAction(Player self, OfflinePlayer other) {
|
||||
|
|
@ -92,27 +95,24 @@ public class FriendAddLiteral implements CommandExecutor<CommandSender> {
|
|||
if (isAlreadyFriendTask.await())
|
||||
return Results.failure("You are already friends with " + other.getName() + ".");
|
||||
if (isAlreadySent.await())
|
||||
return Results.failure("You've already sent " + other + " a friend request.");
|
||||
return Results.failure("You've already sent " + other.getName() + " a friend request.");
|
||||
if (isShouldAccept.await())
|
||||
return Results.success(AddAction.ACCEPT_REQUEST);
|
||||
return Results.success(AddAction.SEND_REQUEST);
|
||||
}
|
||||
|
||||
private static Task<Boolean> checkShouldAccept(Player self, OfflinePlayer other) {
|
||||
return Tasks.supplyAsync(() ->
|
||||
ScrowAPI.getFriendRequestService().getFriendRequest(other.getUniqueId(), self.getUniqueId()))
|
||||
private Task<Boolean> checkShouldAccept(Player self, OfflinePlayer other) {
|
||||
return Tasks.supplyAsync(() -> requestService.getFriendRequest(other.getUniqueId(), self.getUniqueId()))
|
||||
.mapSync(Objects::nonNull);
|
||||
}
|
||||
|
||||
private static Task<Boolean> checkAlreadyFriends(Player self, OfflinePlayer other) {
|
||||
return Tasks.supplyAsync(() ->
|
||||
ScrowAPI.getFriendshipService().getFriendship(self.getUniqueId(), other.getUniqueId()))
|
||||
private Task<Boolean> checkAlreadyFriends(Player self, OfflinePlayer other) {
|
||||
return Tasks.supplyAsync(() -> friendsService.getFriendship(self.getUniqueId(), other.getUniqueId()))
|
||||
.mapSync(Objects::nonNull);
|
||||
}
|
||||
|
||||
private static Task<Boolean> checkAlreadySent(UUID self, UUID other) {
|
||||
return Tasks.supplyAsync(() ->
|
||||
ScrowAPI.getFriendRequestService().getFriendRequest(self, other))
|
||||
private Task<Boolean> checkAlreadySent(UUID self, UUID other) {
|
||||
return Tasks.supplyAsync(() -> requestService.getFriendRequest(self, other))
|
||||
.mapSync(Objects::nonNull);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,18 +5,37 @@ import de.kentoj.kencommandapi.api.node.RootCommandNode;
|
|||
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.event.ClickEvent;
|
||||
import net.kyori.adventure.text.event.HoverEvent;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
@NoArgsConstructor(access = AccessLevel.NONE)
|
||||
public class FriendCommand {
|
||||
public static RootCommandNode<CommandSender> create() {
|
||||
var style = new ScrowMessageStyle("Friends", NamedTextColor.GREEN);
|
||||
var style = new ScrowMessageStyle("Friends", NamedTextColor.AQUA);
|
||||
RootCommandNode<CommandSender> rootNode = CommandNode.rootNode(style, "f", "friend");
|
||||
rootNode.addLiteral(new FriendListLiteral(style).getLiteral());
|
||||
rootNode.addLiteral(new FriendAddLiteral(style).getLiteral());
|
||||
rootNode.addLiteral(new FriendRemoveLiteral(style).getRootNode());
|
||||
rootNode.addLiteral(new FriendRemoveLiteral(style).getLiteral());
|
||||
rootNode.addLiteral(new FriendRequestDeclineLiteral(style).getLiteral());
|
||||
rootNode.addLiteral(new FriendRequestsLiteral(style).getLiteral());
|
||||
return rootNode;
|
||||
}
|
||||
|
||||
public static Component friendRequestOptions(String requestSenderName, boolean runInstantly) {
|
||||
return Component.text(" ")
|
||||
.append(Component.text("[accept]")
|
||||
.hoverEvent(HoverEvent.showText(Component.text("click to accept")))
|
||||
.clickEvent(ClickEvent.runCommand("/f add " + requestSenderName))
|
||||
.color(NamedTextColor.GREEN))
|
||||
.append(Component.text(" "))
|
||||
.append(Component.text("[decline]")
|
||||
.hoverEvent(HoverEvent.showText(Component.text("click to decline")))
|
||||
.clickEvent(runInstantly
|
||||
? ClickEvent.runCommand("/f decline " + requestSenderName)
|
||||
: ClickEvent.suggestCommand("/f decline " + requestSenderName))
|
||||
.color(NamedTextColor.RED));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import org.bukkit.entity.Player;
|
|||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import static java.util.Objects.*;
|
||||
import static java.util.Objects.requireNonNull;
|
||||
import static net.kyori.adventure.text.Component.text;
|
||||
|
||||
public class FriendListLiteral implements CommandExecutor<CommandSender> {
|
||||
|
|
@ -61,14 +61,13 @@ public class FriendListLiteral implements CommandExecutor<CommandSender> {
|
|||
private Component formatList(List<OfflinePlayer> friends) {
|
||||
var message = style.ok(MiniMessage.miniMessage().deserialize("Your friends:"));
|
||||
for (var friend : friends) {
|
||||
var status = text("(").append(friend.isOnline()
|
||||
? text("online").color(NamedTextColor.GRAY)
|
||||
: text("offline").color(NamedTextColor.RED))
|
||||
.append(text(")"));
|
||||
var status = MiniMessage.miniMessage().deserialize(friend.isOnline()
|
||||
? " <gray>(<green>online<gray>)"
|
||||
: " <gray>(<red>offline<gray>)");
|
||||
message = message
|
||||
.appendNewline()
|
||||
.append(text("≫").color(NamedTextColor.AQUA))
|
||||
.append(text(requireNonNull(friend.getName())))
|
||||
.append(text("≫ ").color(style.getPrefixColor()))
|
||||
.append(text(requireNonNull(friend.getName())).color(NamedTextColor.GRAY))
|
||||
.append(status);
|
||||
}
|
||||
return message;
|
||||
|
|
|
|||
|
|
@ -19,16 +19,16 @@ import java.util.concurrent.CompletableFuture;
|
|||
|
||||
public class FriendRemoveLiteral implements CommandExecutor<CommandSender> {
|
||||
@Getter
|
||||
private final CommandNode<CommandSender> rootNode;
|
||||
private final CommandNode<CommandSender> literal;
|
||||
private final CommandArgument<CommandSender, OfflinePlayer> playerArg;
|
||||
private final ScrowMessageStyle style;
|
||||
|
||||
public FriendRemoveLiteral(ScrowMessageStyle style) {
|
||||
this.style = style;
|
||||
this.playerArg = CommandArgument.arg("player", OfflinePlayerArgumentType.getInstance());
|
||||
this.rootNode = CommandNode.node("remove");
|
||||
this.rootNode.addArgument(playerArg);
|
||||
this.rootNode.setExecutor(this);
|
||||
this.literal = CommandNode.node("remove");
|
||||
this.literal.addArgument(playerArg);
|
||||
this.literal.setExecutor(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
package de.kentoj.scrow.bukkit.friends.command;
|
||||
|
||||
import com.leakyabstractions.result.api.Result;
|
||||
import com.leakyabstractions.result.core.Results;
|
||||
import de.kentoj.kencommandapi.api.argument.CommandArgument;
|
||||
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
||||
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||
import de.kentoj.kencommandapi.type.OfflinePlayerArgumentType;
|
||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||
import de.kentoj.scrowlib.friends.FriendRequestService;
|
||||
import de.kentoj.scrow.bukkit.scheduler.Tasks;
|
||||
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class FriendRequestDeclineLiteral implements CommandExecutor<CommandSender> {
|
||||
|
||||
@Getter
|
||||
private final CommandNode<CommandSender> literal;
|
||||
private final CommandArgument<CommandSender, OfflinePlayer> playerArg;
|
||||
private final ScrowMessageStyle style;
|
||||
private final FriendRequestService requestService = ScrowAPI.getFriendRequestService();
|
||||
|
||||
public FriendRequestDeclineLiteral(ScrowMessageStyle style) {
|
||||
this.style = style;
|
||||
playerArg = CommandArgument.arg("player", OfflinePlayerArgumentType.getInstance());
|
||||
literal = CommandNode.node("reject", "decline");
|
||||
literal.addArgument(playerArg);
|
||||
literal.setExecutor(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Result<Object, String>> execute(CommandContext<CommandSender> ctx) {
|
||||
var self = (Player) ctx.getSender();
|
||||
var other = ctx.getArg(playerArg);
|
||||
return Tasks.supplyAsync(() ->
|
||||
requestService.deleteFriendRequest(other.getUniqueId(), self.getUniqueId()))
|
||||
.<Result<Object, String>>mapSync(deleted -> {
|
||||
if (!deleted)
|
||||
return Results.failure("There's no incoming friend request from " + other.getName() + ".");
|
||||
self.sendMessage(style.ok("Friend request declined."));
|
||||
ScrowAPI.getPlayer(other).sendMessage(style.ok(self.getName() + " has declined your friend request."));
|
||||
return Results.success(new Object());
|
||||
}).toFuture();
|
||||
}
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@ import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
|||
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||
import de.kentoj.scrow.bukkit.friends.FriendRequest;
|
||||
import de.kentoj.scrowlib.friends.FriendRequest;
|
||||
import de.kentoj.scrow.bukkit.scheduler.Tasks;
|
||||
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||
import lombok.Getter;
|
||||
|
|
@ -57,8 +57,9 @@ public class FriendRequestsLiteral implements CommandExecutor<CommandSender> {
|
|||
for (String requester : requesters) {
|
||||
message = message
|
||||
.appendNewline()
|
||||
.append(text("≫").color(NamedTextColor.AQUA))
|
||||
.append(Component.text(requester));
|
||||
.append(text("≫ ").color(style.getPrefixColor()))
|
||||
.append(Component.text(requester).color(NamedTextColor.GRAY)
|
||||
.append(FriendCommand.friendRequestOptions(requester, false)));
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
package de.kentoj.scrow.bukkit.friends.notification;
|
||||
|
||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class NotificationListener {
|
||||
|
||||
private final MessageBroker messageBroker = ScrowAPI.getMessageBroker();
|
||||
|
||||
public NotificationListener() {
|
||||
messageBroker.subscribe("event.player.connect", doc -> {
|
||||
var player= Bukkit.getPlayer(doc.get("playerId", UUID.class));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -47,7 +47,7 @@ public class PlayCommand implements CommandExecutor<CommandSender> {
|
|||
return Results.failure("No instance for " + gamemode + " found.");
|
||||
|
||||
return Results.ofCallable(() -> {
|
||||
ScrowAPI.getPlayerManager().sendPlayer(player.getUniqueId(), instance.getHandle());
|
||||
ScrowAPI.getPlayer(player).sendToInstance(instance.getHandle());
|
||||
return new Object();
|
||||
}).mapFailure(Exception::getMessage);
|
||||
}).toFuture();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
package de.kentoj.scrow.bukkit.network;
|
||||
|
||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.kyori.adventure.key.Key;
|
||||
import net.kyori.adventure.sound.Sound;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bson.Document;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class NetworkPlayerWatchdog {
|
||||
private static final MiniMessage MM = MiniMessage.miniMessage();
|
||||
|
||||
public void listen() {
|
||||
handle("player.sendMessage", (player, doc) -> {
|
||||
var msg = MM.deserialize(doc.getString("message"));
|
||||
player.sendMessage(msg);
|
||||
});
|
||||
|
||||
// TODO test methods below
|
||||
|
||||
handle("player.sendActionBar", (player, doc) -> {
|
||||
var msg = MM.deserialize(doc.getString("message"));
|
||||
player.sendActionBar(msg);
|
||||
});
|
||||
|
||||
handle("player.playSound", (player, doc) ->
|
||||
player.playSound(toSound(doc)));
|
||||
|
||||
handle("player.playSound1", (player, doc) ->
|
||||
player.playSound(toSound(doc), doc.getDouble("x"), doc.getDouble("y"), doc.getDouble("z")));
|
||||
|
||||
handle("player.stopSound", (player, doc) ->
|
||||
player.stopSound(toSound(doc)));
|
||||
}
|
||||
|
||||
private @NotNull Sound toSound(Document doc) {
|
||||
@SuppressWarnings("PatternValidation")
|
||||
var name = Key.key("namespace", doc.getString("name"));
|
||||
var source = Sound.Source.valueOf(doc.getString("source"));
|
||||
return Sound.sound(
|
||||
name,
|
||||
source,
|
||||
doc.getDouble("volume").floatValue(),
|
||||
doc.getDouble("pitch").floatValue());
|
||||
}
|
||||
|
||||
private void handle(String subject, BiConsumer<Player, Document> handler) {
|
||||
ScrowAPI.getMessageBroker().subscribe(subject, doc -> {
|
||||
var player = Bukkit.getPlayer(doc.get("playerId", UUID.class));
|
||||
if (player != null)
|
||||
handler.accept(player, doc);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
package de.kentoj.scrow.bukkit.playermanager;
|
||||
|
||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||
import de.kentoj.scrow.bukkit.misc.PlayerManager;
|
||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||
import de.kentoj.scrowlib.utils.ResultUtils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.bson.Document;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class PlayerManagerImpl implements PlayerManager {
|
||||
|
||||
private final MessageBroker messageBroker = ScrowAPI.getMessageBroker();
|
||||
|
||||
@Override
|
||||
public void sendPlayer(UUID playerId, String instanceHandle) {
|
||||
var result = messageBroker.request("players.send", new Document()
|
||||
.append("playerId", playerId)
|
||||
.append("handle", instanceHandle));
|
||||
ResultUtils.unwrap(result, "failed to send player to " + instanceHandle);
|
||||
}
|
||||
}
|
||||
|
|
@ -24,6 +24,7 @@ dependencies {
|
|||
api("de.kentoj.scrow:kencommandapi-core:0.30")
|
||||
|
||||
compileOnly("net.kyori:adventure-api:5.2.0")
|
||||
compileOnly("net.kyori:adventure-text-minimessage:5.2.0")
|
||||
}
|
||||
|
||||
publishing {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package de.kentoj.scrow.bukkit.misc;
|
||||
package de.kentoj.scrowlib.economy;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
package de.kentoj.scrow.bukkit.economy;
|
||||
package de.kentoj.scrowlib.economy;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import de.kentoj.scrow.bukkit.misc.EconomyService;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
package de.kentoj.scrow.bukkit.economy;
|
||||
package de.kentoj.scrowlib.economy;
|
||||
|
||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||
import de.kentoj.scrow.bukkit.misc.EconomyService;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.kentoj.scrow.bukkit.friends;
|
||||
package de.kentoj.scrowlib.friends;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.UUID;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.kentoj.scrow.bukkit.friends;
|
||||
package de.kentoj.scrowlib.friends;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
package de.kentoj.scrow.bukkit.friends;
|
||||
package de.kentoj.scrowlib.friends;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface Friendship {
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.kentoj.scrow.bukkit.friends;
|
||||
package de.kentoj.scrowlib.friends;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.kentoj.scrow.bukkit.friends;
|
||||
package de.kentoj.scrowlib.friends;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package de.kentoj.scrow.bukkit.friends.friendship;
|
||||
package de.kentoj.scrowlib.friends.friendship;
|
||||
|
||||
import de.kentoj.scrow.bukkit.friends.Friendship;
|
||||
import de.kentoj.scrow.bukkit.friends.OrderedUUIDPair;
|
||||
import de.kentoj.scrowlib.friends.Friendship;
|
||||
import de.kentoj.scrowlib.friends.OrderedUUIDPair;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.Value;
|
||||
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package de.kentoj.scrow.bukkit.friends.friendship;
|
||||
package de.kentoj.scrowlib.friends.friendship;
|
||||
|
||||
import de.kentoj.scrow.bukkit.friends.Friendship;
|
||||
import de.kentoj.scrow.bukkit.friends.FriendshipService;
|
||||
import de.kentoj.scrow.bukkit.friends.OrderedUUIDPair;
|
||||
import de.kentoj.scrowlib.friends.Friendship;
|
||||
import de.kentoj.scrowlib.friends.FriendshipService;
|
||||
import de.kentoj.scrowlib.friends.OrderedUUIDPair;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
|
@ -1,18 +1,16 @@
|
|||
package de.kentoj.scrow.bukkit.friends.friendship;
|
||||
package de.kentoj.scrowlib.friends.friendship;
|
||||
|
||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||
import de.kentoj.scrow.bukkit.friends.FriendRequest;
|
||||
import de.kentoj.scrow.bukkit.friends.Friendship;
|
||||
import de.kentoj.scrow.bukkit.friends.FriendshipService;
|
||||
import de.kentoj.scrow.bukkit.friends.OrderedUUIDPair;
|
||||
import de.kentoj.scrow.bukkit.friends.request.FriendRequestImpl;
|
||||
import de.kentoj.scrowlib.friends.Friendship;
|
||||
import de.kentoj.scrowlib.friends.FriendshipService;
|
||||
import de.kentoj.scrowlib.friends.OrderedUUIDPair;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
import org.jdbi.v3.core.statement.StatementContext;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.time.Instant;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -90,10 +88,13 @@ public class PostgresFriendshipService implements FriendshipService {
|
|||
}
|
||||
|
||||
private Friendship parseFriendship(ResultSet rs, StatementContext __) throws SQLException {
|
||||
for (int i = 0; i < 5; i++) {
|
||||
System.out.println("parsing friendship");
|
||||
}
|
||||
return new FriendshipImpl(
|
||||
rs.getObject("first_uuid", UUID.class),
|
||||
rs.getObject("second_uuid", UUID.class),
|
||||
rs.getObject("created_at", Instant.class)
|
||||
rs.getObject("created_at", OffsetDateTime.class).toInstant()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package de.kentoj.scrow.bukkit.friends.request;
|
||||
package de.kentoj.scrowlib.friends.request;
|
||||
|
||||
import de.kentoj.scrow.bukkit.friends.FriendRequest;
|
||||
import de.kentoj.scrowlib.friends.FriendRequest;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Value;
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package de.kentoj.scrow.bukkit.friends.request;
|
||||
package de.kentoj.scrowlib.friends.request;
|
||||
|
||||
import de.kentoj.scrow.bukkit.friends.FriendRequest;
|
||||
import de.kentoj.scrow.bukkit.friends.FriendRequestService;
|
||||
import de.kentoj.scrowlib.friends.FriendRequest;
|
||||
import de.kentoj.scrowlib.friends.FriendRequestService;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
|
@ -1,21 +1,22 @@
|
|||
package de.kentoj.scrow.bukkit.friends.request;
|
||||
package de.kentoj.scrowlib.friends.request;
|
||||
|
||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||
import de.kentoj.scrow.bukkit.friends.FriendRequest;
|
||||
import de.kentoj.scrow.bukkit.friends.FriendRequestService;
|
||||
import de.kentoj.scrowlib.friends.FriendRequest;
|
||||
import de.kentoj.scrowlib.friends.FriendRequestService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
import org.jdbi.v3.core.statement.StatementContext;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.tree.RowMapper;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.time.Instant;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
@Slf4j
|
||||
public class PostgresFriendRequestService implements FriendRequestService {
|
||||
|
||||
private final Jdbi jdbi;
|
||||
|
|
@ -102,7 +103,7 @@ public class PostgresFriendRequestService implements FriendRequestService {
|
|||
return new FriendRequestImpl(
|
||||
rs.getObject("from_uuid", UUID.class),
|
||||
rs.getObject("to_uuid", UUID.class),
|
||||
rs.getObject("created_at", Instant.class)
|
||||
rs.getObject("created_at", OffsetDateTime.class).toInstant()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -20,22 +20,27 @@ public class MessageBroker {
|
|||
public MessageBroker(Connection nats) {
|
||||
this.nats = nats;
|
||||
this.dispatcher = nats.createDispatcher();
|
||||
}
|
||||
|
||||
public void publish(String subject, Document document) {
|
||||
nats.publish(subject, DocumentRepository.toBytes(document));
|
||||
}
|
||||
|
||||
public void publish(String subject, Result<Document, String> result) {
|
||||
nats.publish(subject, ResultRepository.toBytes(result));
|
||||
this.publish(subject, ResultRepository.toDocument(result));
|
||||
}
|
||||
|
||||
/**
|
||||
* subscribes to a subject, handler may run asynchronously
|
||||
*/
|
||||
public void subscribe(String subject, Consumer<Document> handler) {
|
||||
dispatcher.subscribe(subject, msg -> {
|
||||
executor.submit(() -> handler.accept(DocumentRepository.fromMessage(msg)));
|
||||
});
|
||||
dispatcher.subscribe(subject, msg ->
|
||||
executor.submit(() -> handler.accept(DocumentRepository.fromMessage(msg))));
|
||||
}
|
||||
|
||||
/**
|
||||
* handler may run asynchronously
|
||||
*/
|
||||
public void handle(String subject, RequestHandler handler) {
|
||||
dispatcher.subscribe(subject, msg -> {
|
||||
if (msg.getReplyTo() == null) {
|
||||
|
|
|
|||
|
|
@ -10,11 +10,10 @@ import org.bson.Document;
|
|||
@NoArgsConstructor(access = AccessLevel.NONE)
|
||||
public class ResultRepository {
|
||||
|
||||
public static byte[] toBytes(Result<Document, String> result) {
|
||||
var doc = result.hasSuccess()
|
||||
public static Document toDocument(Result<Document, String> result) {
|
||||
return result.hasSuccess()
|
||||
? new Document("data", result.getSuccess().orElseThrow())
|
||||
: new Document("error", result.getFailure().orElseThrow());
|
||||
return DocumentRepository.toBytes(doc);
|
||||
}
|
||||
|
||||
public static Result<Document, String> fromDocument(Document doc) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
package de.kentoj.scrowlib.player;
|
||||
|
||||
import net.kyori.adventure.audience.Audience;
|
||||
|
||||
public interface NetworkPlayer extends Audience {
|
||||
|
||||
void sendToInstance(String handle);
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
package de.kentoj.scrowlib.player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface NetworkPlayerFactory {
|
||||
|
||||
NetworkPlayer create(UUID uuid);
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
package de.kentoj.scrowlib.player;
|
||||
|
||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.kyori.adventure.sound.Sound;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bson.Document;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class NetworkPlayerImpl implements NetworkPlayer {
|
||||
private static final MiniMessage MM = MiniMessage.miniMessage();
|
||||
private static final ExecutorService EXECUTOR = Executors.newVirtualThreadPerTaskExecutor();
|
||||
private final MessageBroker messageBroker;
|
||||
private final UUID playerId;
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Component message) {
|
||||
requestAsync("player.sendMessage", new Document("message", MM.serialize(message)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendActionBar(@NotNull Component message) {
|
||||
requestAsync("player.sendActionBar", new Document("message", MM.serialize(message)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playSound(@NotNull Sound sound) {
|
||||
requestAsync("player.playSound", new Document("message", toDocument(sound)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playSound(@NotNull Sound sound, double x, double y, double z) {
|
||||
requestAsync("player.playSound1", new Document("message", toDocument(sound)
|
||||
.append("x", x)
|
||||
.append("y", y)
|
||||
.append("z", z)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopSound(@NotNull Sound sound) {
|
||||
requestAsync("player.stopSound", toDocument(sound));
|
||||
}
|
||||
|
||||
private Document toDocument(Sound sound) {
|
||||
return new Document("name", sound.name().value())
|
||||
.append("pitch", sound.pitch())
|
||||
.append("volume", sound.volume())
|
||||
.append("source", sound.source().name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendToInstance(String handle) {
|
||||
requestAsync("player.send", new Document("handle", handle));
|
||||
}
|
||||
|
||||
private void requestAsync(String topic, Document document) {
|
||||
EXECUTOR.submit(() -> messageBroker.publish(topic, document
|
||||
.append("playerId", playerId)));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,14 +1,19 @@
|
|||
package de.kentoj.scrow.velocity;
|
||||
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import de.kentoj.kencommandapi.CommandAPI;
|
||||
import de.kentoj.scrowlib.instancemanager.InstanceManager;
|
||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||
import de.kentoj.scrowlib.player.NetworkPlayer;
|
||||
import de.kentoj.scrowlib.player.NetworkPlayerFactory;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class ScrowAPI {
|
||||
|
||||
|
|
@ -20,6 +25,16 @@ public class ScrowAPI {
|
|||
private static MessageBroker messageBroker;
|
||||
@Getter
|
||||
private static InstanceManager instanceManager;
|
||||
private static NetworkPlayerFactory playerFactory;
|
||||
|
||||
public static NetworkPlayer getPlayer(Player player) {
|
||||
return getPlayer(player.getUniqueId());
|
||||
}
|
||||
|
||||
public static NetworkPlayer getPlayer(UUID uuid) {
|
||||
return playerFactory.create(uuid);
|
||||
}
|
||||
|
||||
|
||||
@ApiStatus.Internal
|
||||
public static void setCommandApi(CommandAPI commandApi) {
|
||||
|
|
@ -40,5 +55,10 @@ public class ScrowAPI {
|
|||
public static void setJdbi(Jdbi jdbi) {
|
||||
ScrowAPI.jdbi = jdbi;
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
public static void setPlayerFactory(NetworkPlayerFactory playerFactory) {
|
||||
ScrowAPI.playerFactory = playerFactory;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,9 +23,6 @@ dependencies {
|
|||
// https://docs.papermc.io/velocity/dev/creating-your-first-plugin/
|
||||
annotationProcessor("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT")
|
||||
|
||||
// https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine
|
||||
implementation("com.github.ben-manes.caffeine:caffeine:3.2.4")
|
||||
|
||||
// https://mvnrepository.com/artifact/org.postgresql/postgresql
|
||||
implementation("org.postgresql:postgresql:42.7.12")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,12 +4,13 @@ import com.google.inject.Inject;
|
|||
import com.velocitypowered.api.plugin.Plugin;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import de.kentoj.scrow.corevelocity.command.OnlineCommand;
|
||||
import de.kentoj.scrow.corevelocity.network.FriendNotifications;
|
||||
import de.kentoj.scrow.corevelocity.privmsg.LastTargetCache;
|
||||
import de.kentoj.scrow.corevelocity.privmsg.MsgCommand;
|
||||
import de.kentoj.scrow.corevelocity.privmsg.PrivMsgHandler;
|
||||
import de.kentoj.scrow.corevelocity.privmsg.ReplyCommand;
|
||||
import de.kentoj.scrow.corevelocity.server.SendPlayerWatchdog;
|
||||
import de.kentoj.scrow.corevelocity.server.ServerRegisterWatchdog;
|
||||
import de.kentoj.scrow.corevelocity.network.SendPlayerWatchdog;
|
||||
import de.kentoj.scrow.corevelocity.network.ServerRegisterWatchdog;
|
||||
import de.kentoj.scrow.generated.BuildInfo;
|
||||
import de.kentoj.scrow.velocity.ScrowAPI;
|
||||
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||
|
|
@ -37,9 +38,10 @@ public class CoreVelocityPlugin {
|
|||
cmds.register(new OnlineCommand(server).getRootNode());
|
||||
}
|
||||
|
||||
var registerWatchdog = new ServerRegisterWatchdog(ScrowAPI.getMessageBroker(), server);
|
||||
var sendPlayerWatchdog = new SendPlayerWatchdog(ScrowAPI.getMessageBroker(), server);
|
||||
var registerWatchdog = new ServerRegisterWatchdog(server);
|
||||
var sendPlayerWatchdog = new SendPlayerWatchdog(server);
|
||||
registerWatchdog.listen();
|
||||
sendPlayerWatchdog.listen();
|
||||
server.getEventManager().register(this, new FriendNotifications());
|
||||
}
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@ import de.kentoj.kencommandapi.CommandAPI;
|
|||
import de.kentoj.scrow.velocity.ScrowAPI;
|
||||
import de.kentoj.scrowlib.instancemanager.InstanceManagerImpl;
|
||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||
import de.kentoj.scrowlib.player.NetworkPlayerImpl;
|
||||
import de.kentoj.scrowlib.utils.EnvUtils;
|
||||
import io.nats.client.Nats;
|
||||
import io.nats.client.Options;
|
||||
|
|
@ -42,8 +43,8 @@ public class ScrowAPISurface {
|
|||
}
|
||||
|
||||
ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.getMessageBroker()));
|
||||
|
||||
ScrowAPI.setCommandApi(new CommandAPI(server));
|
||||
ScrowAPI.setPlayerFactory(playerId -> new NetworkPlayerImpl(ScrowAPI.getMessageBroker(), playerId));
|
||||
}
|
||||
|
||||
public static void destroyScrowAPI() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
package de.kentoj.scrow.corevelocity.network;
|
||||
|
||||
import com.velocitypowered.api.event.Subscribe;
|
||||
import com.velocitypowered.api.event.connection.DisconnectEvent;
|
||||
import com.velocitypowered.api.event.connection.PostLoginEvent;
|
||||
import de.kentoj.scrow.velocity.ScrowAPI;
|
||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||
import org.bson.Document;
|
||||
|
||||
public class FriendNotifications {
|
||||
|
||||
private final MessageBroker messageBroker = ScrowAPI.getMessageBroker();
|
||||
|
||||
@Subscribe
|
||||
private void onConnect(PostLoginEvent ev) {
|
||||
messageBroker.publish("event.player.connect", new Document("playerId", ev.getPlayer().getUniqueId()));
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
private void onDisconnect(DisconnectEvent ev) {
|
||||
messageBroker.publish("event.player.disconnect", new Document("playerId", ev.getPlayer().getUniqueId()));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
package de.kentoj.scrow.corevelocity.server;
|
||||
package de.kentoj.scrow.corevelocity.network;
|
||||
|
||||
import com.leakyabstractions.result.api.Result;
|
||||
import com.leakyabstractions.result.core.Results;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import de.kentoj.scrow.velocity.ScrowAPI;
|
||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||
import io.nats.client.Connection;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.bson.Document;
|
||||
|
|
@ -18,11 +18,11 @@ import java.util.concurrent.ExecutionException;
|
|||
@RequiredArgsConstructor
|
||||
public class SendPlayerWatchdog {
|
||||
|
||||
private final MessageBroker natsRepo;
|
||||
private final MessageBroker messageBroker = ScrowAPI.getMessageBroker();
|
||||
private final ProxyServer server;
|
||||
|
||||
public void listen() {
|
||||
natsRepo.handle("players.send", doc -> sendPlayer(
|
||||
messageBroker.handle("player.send", doc -> sendPlayer(
|
||||
doc.get("playerId", UUID.class),
|
||||
doc.getString("handle")
|
||||
));
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
package de.kentoj.scrow.corevelocity.server;
|
||||
package de.kentoj.scrow.corevelocity.network;
|
||||
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import com.velocitypowered.api.proxy.server.ServerInfo;
|
||||
import de.kentoj.scrow.velocity.ScrowAPI;
|
||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||
import io.nats.client.Connection;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.java.Log;
|
||||
|
||||
|
|
@ -13,18 +13,18 @@ import java.net.InetSocketAddress;
|
|||
@RequiredArgsConstructor
|
||||
public class ServerRegisterWatchdog {
|
||||
|
||||
private final MessageBroker natsRepo;
|
||||
private final MessageBroker messageBroker = ScrowAPI.getMessageBroker();
|
||||
private final ProxyServer server;
|
||||
|
||||
public void listen() {
|
||||
natsRepo.subscribe("event.instance.up", doc -> {
|
||||
messageBroker.subscribe("event.instance.up", doc -> {
|
||||
var handle = doc.getString("handle");
|
||||
var port = doc.getInteger("port");
|
||||
server.unregisterServer(new ServerInfo(handle, new InetSocketAddress(port)));
|
||||
log.info("registered server " + handle);
|
||||
});
|
||||
|
||||
natsRepo.subscribe("event.instance.down", doc -> {
|
||||
messageBroker.subscribe("event.instance.down", doc -> {
|
||||
var handle = doc.getString("handle");
|
||||
var port = doc.getInteger("port");
|
||||
server.unregisterServer(new ServerInfo(handle, new InetSocketAddress(port)));
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package de.kentoj.scrow.corevelocity.privmsg;
|
||||
|
||||
import com.github.benmanes.caffeine.cache.Cache;
|
||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
|
|
@ -10,8 +10,8 @@ import java.util.concurrent.TimeUnit;
|
|||
|
||||
public class LastTargetCache {
|
||||
|
||||
private final Cache<@NotNull UUID, UUID> cache = Caffeine.newBuilder()
|
||||
.expireAfterWrite(20, TimeUnit.MINUTES)
|
||||
private final Cache<@NotNull UUID, @NotNull UUID> cache = CacheBuilder.newBuilder()
|
||||
.expireAfterAccess(20, TimeUnit.MINUTES)
|
||||
.build();
|
||||
|
||||
public @Nullable UUID getLastTarget(UUID uuid) {
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@ public class ReplyCommand implements SyncCommandExecutor<CommandSource> {
|
|||
|
||||
if (target == null)
|
||||
return Results.failure("The player you last messaged is no longer online.");
|
||||
cache.setLastTarget(sender.getUniqueId(), target.getUniqueId());
|
||||
privMsgHandler.handle(sender, target, msg);
|
||||
return Results.success(new Object());
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue