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" />
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="56c685a1-f609-4ffd-a951-849beb2a7f8d" name="Changes" comment="currently refactoring a lot">
|
<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/instancemanager/cache/InstanceCache.java" afterDir="false" />
|
<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$/.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$/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/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$/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-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/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/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/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/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/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/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/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/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/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/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/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/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/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/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-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/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/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>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
|
@ -114,6 +142,7 @@
|
||||||
<list>
|
<list>
|
||||||
<option value="Kotlin Class" />
|
<option value="Kotlin Class" />
|
||||||
<option value="Interface" />
|
<option value="Interface" />
|
||||||
|
<option value="package-info" />
|
||||||
<option value="Class" />
|
<option value="Class" />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
|
|
@ -144,7 +173,7 @@
|
||||||
"keyToString": {
|
"keyToString": {
|
||||||
"Gradle.Download Sources.executor": "Run",
|
"Gradle.Download Sources.executor": "Run",
|
||||||
"Gradle.core [:core-velocity-impl:shadowJar].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 [clean].executor": "Run",
|
||||||
"Gradle.core [publishAllPublicationsToScrowRepository].executor": "Run",
|
"Gradle.core [publishAllPublicationsToScrowRepository].executor": "Run",
|
||||||
"Gradle.core [publishCoreLibPublicationToScrowRepository].executor": "Run",
|
"Gradle.core [publishCoreLibPublicationToScrowRepository].executor": "Run",
|
||||||
|
|
@ -184,6 +213,8 @@
|
||||||
<recent name="de.kentoj.scrow.bukkit.region" />
|
<recent name="de.kentoj.scrow.bukkit.region" />
|
||||||
</key>
|
</key>
|
||||||
<key name="CopyClassDialog.RECENTS_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.scrowlib.messaging" />
|
||||||
<recent name="de.kentoj.scrow.bukkit.region.event" />
|
<recent name="de.kentoj.scrow.bukkit.region.event" />
|
||||||
</key>
|
</key>
|
||||||
|
|
@ -363,9 +394,9 @@
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="VcsManagerConfiguration">
|
<component name="VcsManagerConfiguration">
|
||||||
<MESSAGE value="." />
|
|
||||||
<MESSAGE value="fix: unable to leave regions when unloaded" />
|
<MESSAGE value="fix: unable to leave regions when unloaded" />
|
||||||
<MESSAGE value="currently refactoring a lot" />
|
<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>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
35
README.md
35
README.md
|
|
@ -3,36 +3,13 @@ TODO
|
||||||
- improve error handling in Task ig
|
- improve error handling in Task ig
|
||||||
- try with InMemory db and debug postgres implementation
|
- try with InMemory db and debug postgres implementation
|
||||||
- logging in general, log some exceptions to game chat
|
- logging in general, log some exceptions to game chat
|
||||||
- sleep
|
- notification: Friend is now offline/online
|
||||||
|
- messages across server
|
||||||
|
- /ignore command
|
||||||
|
|
||||||
environment
|
environment
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
```shell
|
- **core-lib**: stateless library
|
||||||
docker network create scrow 2>/dev/null || true
|
- **core-bukkit** stateful plugin/api for minecraft development, depends on core-lib
|
||||||
docker run -d --network scrow -it --rm --name mongo -p 27017:27017 mongo
|
- **core-velocity** stateful plugin/api for proxy development, depends on core-lib
|
||||||
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
|
|
||||||
|
|
@ -1,22 +1,25 @@
|
||||||
package de.kentoj.scrow.bukkit;
|
package de.kentoj.scrow.bukkit;
|
||||||
|
|
||||||
import de.kentoj.kencommandapi.CommandAPI;
|
import de.kentoj.kencommandapi.CommandAPI;
|
||||||
import de.kentoj.scrow.bukkit.friends.FriendRequestService;
|
import de.kentoj.scrowlib.friends.FriendRequestService;
|
||||||
import de.kentoj.scrow.bukkit.friends.FriendshipService;
|
import de.kentoj.scrowlib.friends.FriendshipService;
|
||||||
import de.kentoj.scrow.bukkit.misc.EconomyService;
|
import de.kentoj.scrowlib.economy.EconomyService;
|
||||||
import de.kentoj.scrow.bukkit.misc.PlayerManager;
|
import de.kentoj.scrowlib.player.NetworkPlayer;
|
||||||
|
import de.kentoj.scrowlib.player.NetworkPlayerFactory;
|
||||||
import de.kentoj.scrow.bukkit.region.RegionManager;
|
import de.kentoj.scrow.bukkit.region.RegionManager;
|
||||||
import de.kentoj.scrowlib.instancemanager.InstanceManager;
|
import de.kentoj.scrowlib.instancemanager.InstanceManager;
|
||||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||||
import io.nats.client.Connection;
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.jdbi.v3.core.Jdbi;
|
import org.jdbi.v3.core.Jdbi;
|
||||||
import org.jetbrains.annotations.ApiStatus;
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class ScrowAPI {
|
public class ScrowAPI {
|
||||||
|
|
||||||
|
|
@ -41,8 +44,15 @@ public class ScrowAPI {
|
||||||
private static RegionManager regionManager;
|
private static RegionManager regionManager;
|
||||||
@Getter
|
@Getter
|
||||||
private static CommandAPI commandApi;
|
private static CommandAPI commandApi;
|
||||||
@Getter
|
private static NetworkPlayerFactory playerFactory;
|
||||||
private static PlayerManager playerManager;
|
|
||||||
|
public static NetworkPlayer getPlayer(OfflinePlayer player) {
|
||||||
|
return getPlayer(player.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static NetworkPlayer getPlayer(UUID uuid) {
|
||||||
|
return playerFactory.create(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
@ApiStatus.Internal
|
@ApiStatus.Internal
|
||||||
public static void setEconomyService(EconomyService economyService) {
|
public static void setEconomyService(EconomyService economyService) {
|
||||||
|
|
@ -90,8 +100,8 @@ public class ScrowAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiStatus.Internal
|
@ApiStatus.Internal
|
||||||
public static void setPlayerManager(PlayerManager playerManager) {
|
public static void setPlayerFactory(NetworkPlayerFactory playerFactory) {
|
||||||
ScrowAPI.playerManager = playerManager;
|
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 static final ExecutorService EXECUTOR = Executors.newVirtualThreadPerTaskExecutor();
|
||||||
|
|
||||||
private final Supplier<TaskState<T>> compute;
|
private final Supplier<TaskState<T>> compute;
|
||||||
private TaskState<T> cachedResult = null;
|
private volatile TaskState<T> cachedResult = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<T> toFuture() {
|
public CompletableFuture<T> toFuture() {
|
||||||
|
|
@ -90,8 +90,10 @@ public class TaskImpl<T> implements Task<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private TaskState<T> state() {
|
private TaskState<T> state() {
|
||||||
|
synchronized (this) {
|
||||||
if (cachedResult == null)
|
if (cachedResult == null)
|
||||||
cachedResult = compute.get();
|
cachedResult = compute.get();
|
||||||
return cachedResult;
|
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.friends.command.FriendCommand;
|
||||||
import de.kentoj.scrow.bukkit.instancemanager.cache.InstanceCache;
|
import de.kentoj.scrow.bukkit.instancemanager.cache.InstanceCache;
|
||||||
import de.kentoj.scrow.bukkit.instancemanager.command.InstanceCommand;
|
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.LobbyCommand;
|
||||||
import de.kentoj.scrow.bukkit.instancemanager.command.PlayCommand;
|
import de.kentoj.scrow.bukkit.instancemanager.command.PlayCommand;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
@ -30,8 +28,6 @@ public class CoreImplPlugin extends JavaPlugin {
|
||||||
ScrowAPI.getCommandApi().register(new LobbyCommand().getRootNode());
|
ScrowAPI.getCommandApi().register(new LobbyCommand().getRootNode());
|
||||||
}
|
}
|
||||||
|
|
||||||
new RegionTask(new RegionPlayerTracker()).runTaskTimer(this, 10, 10);
|
|
||||||
|
|
||||||
// TODO/FIXME
|
// TODO/FIXME
|
||||||
//registerServer();
|
//registerServer();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,17 @@
|
||||||
package de.kentoj.scrow.bukkit;
|
package de.kentoj.scrow.bukkit;
|
||||||
|
|
||||||
import de.kentoj.kencommandapi.CommandAPI;
|
import de.kentoj.kencommandapi.CommandAPI;
|
||||||
import de.kentoj.scrow.bukkit.economy.InMemoryEconomyService;
|
import de.kentoj.scrowlib.economy.InMemoryEconomyService;
|
||||||
import de.kentoj.scrow.bukkit.economy.PostgresEconomyService;
|
import de.kentoj.scrowlib.economy.PostgresEconomyService;
|
||||||
import de.kentoj.scrow.bukkit.friends.friendship.InMemoryFriendshipService;
|
import de.kentoj.scrowlib.friends.friendship.InMemoryFriendshipService;
|
||||||
import de.kentoj.scrow.bukkit.friends.friendship.PostgresFriendshipService;
|
import de.kentoj.scrowlib.friends.friendship.PostgresFriendshipService;
|
||||||
import de.kentoj.scrow.bukkit.friends.request.InMemoryFriendRequestService;
|
import de.kentoj.scrowlib.friends.request.InMemoryFriendRequestService;
|
||||||
import de.kentoj.scrow.bukkit.friends.request.PostgresFriendRequestService;
|
import de.kentoj.scrowlib.friends.request.PostgresFriendRequestService;
|
||||||
import de.kentoj.scrow.bukkit.playermanager.PlayerManagerImpl;
|
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.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.instancemanager.InstanceManagerImpl;
|
||||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||||
import de.kentoj.scrowlib.utils.EnvUtils;
|
import de.kentoj.scrowlib.utils.EnvUtils;
|
||||||
|
|
@ -17,12 +20,9 @@ import io.nats.client.Options;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.jdbi.v3.core.ConnectionFactory;
|
|
||||||
import org.jdbi.v3.core.Jdbi;
|
import org.jdbi.v3.core.Jdbi;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
@NoArgsConstructor(access = AccessLevel.NONE)
|
@NoArgsConstructor(access = AccessLevel.NONE)
|
||||||
|
|
@ -53,7 +53,7 @@ public class ScrowAPISurface {
|
||||||
ScrowAPI.setJdbi(Jdbi.create(EnvUtils.envOrThrow("HOST_POSTGRES"), props));
|
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.setRegionManager(new RegionManagerImpl());
|
||||||
ScrowAPI.setCommandApi(new CommandAPI(plugin));
|
ScrowAPI.setCommandApi(new CommandAPI(plugin));
|
||||||
ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.getMessageBroker()));
|
ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.getMessageBroker()));
|
||||||
|
|
@ -63,6 +63,9 @@ public class ScrowAPISurface {
|
||||||
new PostgresFriendRequestService() : new InMemoryFriendRequestService());
|
new PostgresFriendRequestService() : new InMemoryFriendRequestService());
|
||||||
ScrowAPI.setFriendshipService(ScrowAPI.getJdbi() != null ?
|
ScrowAPI.setFriendshipService(ScrowAPI.getJdbi() != null ?
|
||||||
new PostgresFriendshipService() : new InMemoryFriendshipService());
|
new PostgresFriendshipService() : new InMemoryFriendshipService());
|
||||||
|
|
||||||
|
new RegionTask(new RegionPlayerTracker()).runTaskTimer(plugin, 10, 10);
|
||||||
|
new NetworkPlayerWatchdog().listen();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void destroyScrowAPI() {
|
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.api.node.CommandNode;
|
||||||
import de.kentoj.kencommandapi.type.OfflinePlayerArgumentType;
|
import de.kentoj.kencommandapi.type.OfflinePlayerArgumentType;
|
||||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||||
import de.kentoj.scrow.bukkit.friends.friendship.FriendshipImpl;
|
import de.kentoj.scrowlib.friends.FriendRequestService;
|
||||||
import de.kentoj.scrow.bukkit.friends.request.FriendRequestImpl;
|
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.Task;
|
||||||
import de.kentoj.scrow.bukkit.scheduler.Tasks;
|
import de.kentoj.scrow.bukkit.scheduler.Tasks;
|
||||||
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
@ -31,6 +34,8 @@ public class FriendAddLiteral implements CommandExecutor<CommandSender> {
|
||||||
private final CommandNode<CommandSender> literal;
|
private final CommandNode<CommandSender> literal;
|
||||||
private final CommandArgument<CommandSender, OfflinePlayer> playerArg;
|
private final CommandArgument<CommandSender, OfflinePlayer> playerArg;
|
||||||
private final ScrowMessageStyle style;
|
private final ScrowMessageStyle style;
|
||||||
|
private final FriendRequestService requestService = ScrowAPI.getFriendRequestService();
|
||||||
|
private final FriendshipService friendsService = ScrowAPI.getFriendshipService();
|
||||||
|
|
||||||
public FriendAddLiteral(ScrowMessageStyle style) {
|
public FriendAddLiteral(ScrowMessageStyle style) {
|
||||||
this.style = style;
|
this.style = style;
|
||||||
|
|
@ -54,30 +59,28 @@ public class FriendAddLiteral implements CommandExecutor<CommandSender> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendRequest(Player self, OfflinePlayer other) {
|
private void sendRequest(Player self, OfflinePlayer other) {
|
||||||
Tasks.runAsync(() -> ScrowAPI.getFriendRequestService()
|
Tasks.runAsync(() ->
|
||||||
.saveFriendRequest(new FriendRequestImpl(self.getUniqueId(), other.getUniqueId())))
|
requestService.saveFriendRequest(new FriendRequestImpl(self.getUniqueId(), other.getUniqueId())))
|
||||||
.runSync(() -> {
|
.runSync(() -> {
|
||||||
self.sendMessage(style.ok("Successfully sent " + other.getName() + " a friend request."));
|
self.sendMessage(style.ok("Successfully sent " + other.getName() + " a friend request."));
|
||||||
var otherPlayer = other.getPlayer();
|
var msg = Component.text(self.getName() + " sent you a friend request.")
|
||||||
if (otherPlayer != null)
|
.append(FriendCommand.friendRequestOptions(self.getName(), true));
|
||||||
otherPlayer.sendMessage(style.ok(" wants to be friends with you. Use '/f add " + self.getName() + "' to accept."));
|
ScrowAPI.getPlayer(other).sendMessage(style.ok(msg));
|
||||||
});
|
})
|
||||||
|
.await();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void acceptRequest(Player self, OfflinePlayer other) {
|
private void acceptRequest(Player self, OfflinePlayer other) {
|
||||||
Tasks.runAsync(() -> Tasks.awaitAll(
|
Tasks.runAsync(() -> Tasks.awaitAll(
|
||||||
Tasks.runAsync(() -> ScrowAPI.getFriendRequestService()
|
Tasks.runAsync(() -> requestService.deleteFriendRequest(self.getUniqueId(), other.getUniqueId())),
|
||||||
.deleteFriendRequest(self.getUniqueId(), other.getUniqueId())),
|
Tasks.runAsync(() -> requestService.deleteFriendRequest(other.getUniqueId(), self.getUniqueId())),
|
||||||
Tasks.runAsync(() -> ScrowAPI.getFriendRequestService()
|
Tasks.runAsync(() -> friendsService.saveFriendship(new FriendshipImpl(self.getUniqueId(), other.getUniqueId(), Instant.now()))
|
||||||
.deleteFriendRequest(other.getUniqueId(), self.getUniqueId())),
|
|
||||||
Tasks.runAsync(() -> ScrowAPI.getFriendshipService()
|
|
||||||
.saveFriendship(new FriendshipImpl(self.getUniqueId(), other.getUniqueId(), Instant.now()))
|
|
||||||
)))
|
)))
|
||||||
.runSync(() -> {
|
.runSync(() -> {
|
||||||
self.sendMessage(style.ok("You are now friends with " + other.getName() + "."));
|
self.sendMessage(style.ok("You are now friends with " + other.getName() + "."));
|
||||||
if (other.getPlayer() != null)
|
ScrowAPI.getPlayer(other).sendMessage(style.ok("You are now friends with " + self.getName() + "."));
|
||||||
other.getPlayer().sendMessage(style.ok("You are now friends with " + self.getName() + "."));
|
})
|
||||||
});
|
.await();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Result<AddAction, String> findAction(Player self, OfflinePlayer other) {
|
private Result<AddAction, String> findAction(Player self, OfflinePlayer other) {
|
||||||
|
|
@ -92,27 +95,24 @@ public class FriendAddLiteral implements CommandExecutor<CommandSender> {
|
||||||
if (isAlreadyFriendTask.await())
|
if (isAlreadyFriendTask.await())
|
||||||
return Results.failure("You are already friends with " + other.getName() + ".");
|
return Results.failure("You are already friends with " + other.getName() + ".");
|
||||||
if (isAlreadySent.await())
|
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())
|
if (isShouldAccept.await())
|
||||||
return Results.success(AddAction.ACCEPT_REQUEST);
|
return Results.success(AddAction.ACCEPT_REQUEST);
|
||||||
return Results.success(AddAction.SEND_REQUEST);
|
return Results.success(AddAction.SEND_REQUEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Task<Boolean> checkShouldAccept(Player self, OfflinePlayer other) {
|
private Task<Boolean> checkShouldAccept(Player self, OfflinePlayer other) {
|
||||||
return Tasks.supplyAsync(() ->
|
return Tasks.supplyAsync(() -> requestService.getFriendRequest(other.getUniqueId(), self.getUniqueId()))
|
||||||
ScrowAPI.getFriendRequestService().getFriendRequest(other.getUniqueId(), self.getUniqueId()))
|
|
||||||
.mapSync(Objects::nonNull);
|
.mapSync(Objects::nonNull);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Task<Boolean> checkAlreadyFriends(Player self, OfflinePlayer other) {
|
private Task<Boolean> checkAlreadyFriends(Player self, OfflinePlayer other) {
|
||||||
return Tasks.supplyAsync(() ->
|
return Tasks.supplyAsync(() -> friendsService.getFriendship(self.getUniqueId(), other.getUniqueId()))
|
||||||
ScrowAPI.getFriendshipService().getFriendship(self.getUniqueId(), other.getUniqueId()))
|
|
||||||
.mapSync(Objects::nonNull);
|
.mapSync(Objects::nonNull);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Task<Boolean> checkAlreadySent(UUID self, UUID other) {
|
private Task<Boolean> checkAlreadySent(UUID self, UUID other) {
|
||||||
return Tasks.supplyAsync(() ->
|
return Tasks.supplyAsync(() -> requestService.getFriendRequest(self, other))
|
||||||
ScrowAPI.getFriendRequestService().getFriendRequest(self, other))
|
|
||||||
.mapSync(Objects::nonNull);
|
.mapSync(Objects::nonNull);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,18 +5,37 @@ import de.kentoj.kencommandapi.api.node.RootCommandNode;
|
||||||
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
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 net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
@NoArgsConstructor(access = AccessLevel.NONE)
|
@NoArgsConstructor(access = AccessLevel.NONE)
|
||||||
public class FriendCommand {
|
public class FriendCommand {
|
||||||
public static RootCommandNode<CommandSender> create() {
|
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");
|
RootCommandNode<CommandSender> rootNode = CommandNode.rootNode(style, "f", "friend");
|
||||||
rootNode.addLiteral(new FriendListLiteral(style).getLiteral());
|
rootNode.addLiteral(new FriendListLiteral(style).getLiteral());
|
||||||
rootNode.addLiteral(new FriendAddLiteral(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());
|
rootNode.addLiteral(new FriendRequestsLiteral(style).getLiteral());
|
||||||
return rootNode;
|
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.List;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
import static java.util.Objects.*;
|
import static java.util.Objects.requireNonNull;
|
||||||
import static net.kyori.adventure.text.Component.text;
|
import static net.kyori.adventure.text.Component.text;
|
||||||
|
|
||||||
public class FriendListLiteral implements CommandExecutor<CommandSender> {
|
public class FriendListLiteral implements CommandExecutor<CommandSender> {
|
||||||
|
|
@ -61,14 +61,13 @@ public class FriendListLiteral implements CommandExecutor<CommandSender> {
|
||||||
private Component formatList(List<OfflinePlayer> friends) {
|
private Component formatList(List<OfflinePlayer> friends) {
|
||||||
var message = style.ok(MiniMessage.miniMessage().deserialize("Your friends:"));
|
var message = style.ok(MiniMessage.miniMessage().deserialize("Your friends:"));
|
||||||
for (var friend : friends) {
|
for (var friend : friends) {
|
||||||
var status = text("(").append(friend.isOnline()
|
var status = MiniMessage.miniMessage().deserialize(friend.isOnline()
|
||||||
? text("online").color(NamedTextColor.GRAY)
|
? " <gray>(<green>online<gray>)"
|
||||||
: text("offline").color(NamedTextColor.RED))
|
: " <gray>(<red>offline<gray>)");
|
||||||
.append(text(")"));
|
|
||||||
message = message
|
message = message
|
||||||
.appendNewline()
|
.appendNewline()
|
||||||
.append(text("≫").color(NamedTextColor.AQUA))
|
.append(text("≫ ").color(style.getPrefixColor()))
|
||||||
.append(text(requireNonNull(friend.getName())))
|
.append(text(requireNonNull(friend.getName())).color(NamedTextColor.GRAY))
|
||||||
.append(status);
|
.append(status);
|
||||||
}
|
}
|
||||||
return message;
|
return message;
|
||||||
|
|
|
||||||
|
|
@ -19,16 +19,16 @@ import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
public class FriendRemoveLiteral implements CommandExecutor<CommandSender> {
|
public class FriendRemoveLiteral implements CommandExecutor<CommandSender> {
|
||||||
@Getter
|
@Getter
|
||||||
private final CommandNode<CommandSender> rootNode;
|
private final CommandNode<CommandSender> literal;
|
||||||
private final CommandArgument<CommandSender, OfflinePlayer> playerArg;
|
private final CommandArgument<CommandSender, OfflinePlayer> playerArg;
|
||||||
private final ScrowMessageStyle style;
|
private final ScrowMessageStyle style;
|
||||||
|
|
||||||
public FriendRemoveLiteral(ScrowMessageStyle style) {
|
public FriendRemoveLiteral(ScrowMessageStyle style) {
|
||||||
this.style = style;
|
this.style = style;
|
||||||
this.playerArg = CommandArgument.arg("player", OfflinePlayerArgumentType.getInstance());
|
this.playerArg = CommandArgument.arg("player", OfflinePlayerArgumentType.getInstance());
|
||||||
this.rootNode = CommandNode.node("remove");
|
this.literal = CommandNode.node("remove");
|
||||||
this.rootNode.addArgument(playerArg);
|
this.literal.addArgument(playerArg);
|
||||||
this.rootNode.setExecutor(this);
|
this.literal.setExecutor(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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.invocation.CommandExecutor;
|
||||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
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.scrow.bukkit.scheduler.Tasks;
|
||||||
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
@ -57,8 +57,9 @@ public class FriendRequestsLiteral implements CommandExecutor<CommandSender> {
|
||||||
for (String requester : requesters) {
|
for (String requester : requesters) {
|
||||||
message = message
|
message = message
|
||||||
.appendNewline()
|
.appendNewline()
|
||||||
.append(text("≫").color(NamedTextColor.AQUA))
|
.append(text("≫ ").color(style.getPrefixColor()))
|
||||||
.append(Component.text(requester));
|
.append(Component.text(requester).color(NamedTextColor.GRAY)
|
||||||
|
.append(FriendCommand.friendRequestOptions(requester, false)));
|
||||||
}
|
}
|
||||||
return message;
|
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.failure("No instance for " + gamemode + " found.");
|
||||||
|
|
||||||
return Results.ofCallable(() -> {
|
return Results.ofCallable(() -> {
|
||||||
ScrowAPI.getPlayerManager().sendPlayer(player.getUniqueId(), instance.getHandle());
|
ScrowAPI.getPlayer(player).sendToInstance(instance.getHandle());
|
||||||
return new Object();
|
return new Object();
|
||||||
}).mapFailure(Exception::getMessage);
|
}).mapFailure(Exception::getMessage);
|
||||||
}).toFuture();
|
}).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")
|
api("de.kentoj.scrow:kencommandapi-core:0.30")
|
||||||
|
|
||||||
compileOnly("net.kyori:adventure-api:5.2.0")
|
compileOnly("net.kyori:adventure-api:5.2.0")
|
||||||
|
compileOnly("net.kyori:adventure-text-minimessage:5.2.0")
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package de.kentoj.scrow.bukkit.misc;
|
package de.kentoj.scrowlib.economy;
|
||||||
|
|
||||||
import java.util.UUID;
|
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 com.google.common.base.Preconditions;
|
||||||
import de.kentoj.scrow.bukkit.misc.EconomyService;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
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.ScrowAPI;
|
||||||
import de.kentoj.scrow.bukkit.misc.EconomyService;
|
|
||||||
import org.jdbi.v3.core.Jdbi;
|
import org.jdbi.v3.core.Jdbi;
|
||||||
|
|
||||||
import java.util.UUID;
|
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.time.Instant;
|
||||||
import java.util.UUID;
|
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.List;
|
||||||
import java.util.UUID;
|
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.time.Instant;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public interface Friendship {
|
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.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package de.kentoj.scrow.bukkit.friends;
|
package de.kentoj.scrowlib.friends;
|
||||||
|
|
||||||
import lombok.Getter;
|
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.scrowlib.friends.Friendship;
|
||||||
import de.kentoj.scrow.bukkit.friends.OrderedUUIDPair;
|
import de.kentoj.scrowlib.friends.OrderedUUIDPair;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.Value;
|
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.scrowlib.friends.Friendship;
|
||||||
import de.kentoj.scrow.bukkit.friends.FriendshipService;
|
import de.kentoj.scrowlib.friends.FriendshipService;
|
||||||
import de.kentoj.scrow.bukkit.friends.OrderedUUIDPair;
|
import de.kentoj.scrowlib.friends.OrderedUUIDPair;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
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.ScrowAPI;
|
||||||
import de.kentoj.scrow.bukkit.friends.FriendRequest;
|
import de.kentoj.scrowlib.friends.Friendship;
|
||||||
import de.kentoj.scrow.bukkit.friends.Friendship;
|
import de.kentoj.scrowlib.friends.FriendshipService;
|
||||||
import de.kentoj.scrow.bukkit.friends.FriendshipService;
|
import de.kentoj.scrowlib.friends.OrderedUUIDPair;
|
||||||
import de.kentoj.scrow.bukkit.friends.OrderedUUIDPair;
|
|
||||||
import de.kentoj.scrow.bukkit.friends.request.FriendRequestImpl;
|
|
||||||
import org.jdbi.v3.core.Jdbi;
|
import org.jdbi.v3.core.Jdbi;
|
||||||
import org.jdbi.v3.core.statement.StatementContext;
|
import org.jdbi.v3.core.statement.StatementContext;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.time.Instant;
|
import java.time.OffsetDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
@ -90,10 +88,13 @@ public class PostgresFriendshipService implements FriendshipService {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Friendship parseFriendship(ResultSet rs, StatementContext __) throws SQLException {
|
private Friendship parseFriendship(ResultSet rs, StatementContext __) throws SQLException {
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
System.out.println("parsing friendship");
|
||||||
|
}
|
||||||
return new FriendshipImpl(
|
return new FriendshipImpl(
|
||||||
rs.getObject("first_uuid", UUID.class),
|
rs.getObject("first_uuid", UUID.class),
|
||||||
rs.getObject("second_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.AllArgsConstructor;
|
||||||
import lombok.Value;
|
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.scrowlib.friends.FriendRequest;
|
||||||
import de.kentoj.scrow.bukkit.friends.FriendRequestService;
|
import de.kentoj.scrowlib.friends.FriendRequestService;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
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.ScrowAPI;
|
||||||
import de.kentoj.scrow.bukkit.friends.FriendRequest;
|
import de.kentoj.scrowlib.friends.FriendRequest;
|
||||||
import de.kentoj.scrow.bukkit.friends.FriendRequestService;
|
import de.kentoj.scrowlib.friends.FriendRequestService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jdbi.v3.core.Jdbi;
|
import org.jdbi.v3.core.Jdbi;
|
||||||
import org.jdbi.v3.core.statement.StatementContext;
|
import org.jdbi.v3.core.statement.StatementContext;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import javax.swing.tree.RowMapper;
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.time.Instant;
|
import java.time.OffsetDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class PostgresFriendRequestService implements FriendRequestService {
|
public class PostgresFriendRequestService implements FriendRequestService {
|
||||||
|
|
||||||
private final Jdbi jdbi;
|
private final Jdbi jdbi;
|
||||||
|
|
@ -102,7 +103,7 @@ public class PostgresFriendRequestService implements FriendRequestService {
|
||||||
return new FriendRequestImpl(
|
return new FriendRequestImpl(
|
||||||
rs.getObject("from_uuid", UUID.class),
|
rs.getObject("from_uuid", UUID.class),
|
||||||
rs.getObject("to_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) {
|
public MessageBroker(Connection nats) {
|
||||||
this.nats = nats;
|
this.nats = nats;
|
||||||
this.dispatcher = nats.createDispatcher();
|
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) {
|
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
|
* subscribes to a subject, handler may run asynchronously
|
||||||
*/
|
*/
|
||||||
public void subscribe(String subject, Consumer<Document> handler) {
|
public void subscribe(String subject, Consumer<Document> handler) {
|
||||||
dispatcher.subscribe(subject, msg -> {
|
dispatcher.subscribe(subject, msg ->
|
||||||
executor.submit(() -> handler.accept(DocumentRepository.fromMessage(msg)));
|
executor.submit(() -> handler.accept(DocumentRepository.fromMessage(msg))));
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* handler may run asynchronously
|
||||||
|
*/
|
||||||
public void handle(String subject, RequestHandler handler) {
|
public void handle(String subject, RequestHandler handler) {
|
||||||
dispatcher.subscribe(subject, msg -> {
|
dispatcher.subscribe(subject, msg -> {
|
||||||
if (msg.getReplyTo() == null) {
|
if (msg.getReplyTo() == null) {
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,10 @@ import org.bson.Document;
|
||||||
@NoArgsConstructor(access = AccessLevel.NONE)
|
@NoArgsConstructor(access = AccessLevel.NONE)
|
||||||
public class ResultRepository {
|
public class ResultRepository {
|
||||||
|
|
||||||
public static byte[] toBytes(Result<Document, String> result) {
|
public static Document toDocument(Result<Document, String> result) {
|
||||||
var doc = result.hasSuccess()
|
return result.hasSuccess()
|
||||||
? new Document("data", result.getSuccess().orElseThrow())
|
? new Document("data", result.getSuccess().orElseThrow())
|
||||||
: new Document("error", result.getFailure().orElseThrow());
|
: new Document("error", result.getFailure().orElseThrow());
|
||||||
return DocumentRepository.toBytes(doc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Result<Document, String> fromDocument(Document 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;
|
package de.kentoj.scrow.velocity;
|
||||||
|
|
||||||
|
import com.velocitypowered.api.proxy.Player;
|
||||||
import de.kentoj.kencommandapi.CommandAPI;
|
import de.kentoj.kencommandapi.CommandAPI;
|
||||||
import de.kentoj.scrowlib.instancemanager.InstanceManager;
|
import de.kentoj.scrowlib.instancemanager.InstanceManager;
|
||||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||||
|
import de.kentoj.scrowlib.player.NetworkPlayer;
|
||||||
|
import de.kentoj.scrowlib.player.NetworkPlayerFactory;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.jdbi.v3.core.Jdbi;
|
import org.jdbi.v3.core.Jdbi;
|
||||||
import org.jetbrains.annotations.ApiStatus;
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class ScrowAPI {
|
public class ScrowAPI {
|
||||||
|
|
||||||
|
|
@ -20,6 +25,16 @@ public class ScrowAPI {
|
||||||
private static MessageBroker messageBroker;
|
private static MessageBroker messageBroker;
|
||||||
@Getter
|
@Getter
|
||||||
private static InstanceManager instanceManager;
|
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
|
@ApiStatus.Internal
|
||||||
public static void setCommandApi(CommandAPI commandApi) {
|
public static void setCommandApi(CommandAPI commandApi) {
|
||||||
|
|
@ -40,5 +55,10 @@ public class ScrowAPI {
|
||||||
public static void setJdbi(Jdbi jdbi) {
|
public static void setJdbi(Jdbi jdbi) {
|
||||||
ScrowAPI.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/
|
// https://docs.papermc.io/velocity/dev/creating-your-first-plugin/
|
||||||
annotationProcessor("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT")
|
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
|
// https://mvnrepository.com/artifact/org.postgresql/postgresql
|
||||||
implementation("org.postgresql:postgresql:42.7.12")
|
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.plugin.Plugin;
|
||||||
import com.velocitypowered.api.proxy.ProxyServer;
|
import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
import de.kentoj.scrow.corevelocity.command.OnlineCommand;
|
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.LastTargetCache;
|
||||||
import de.kentoj.scrow.corevelocity.privmsg.MsgCommand;
|
import de.kentoj.scrow.corevelocity.privmsg.MsgCommand;
|
||||||
import de.kentoj.scrow.corevelocity.privmsg.PrivMsgHandler;
|
import de.kentoj.scrow.corevelocity.privmsg.PrivMsgHandler;
|
||||||
import de.kentoj.scrow.corevelocity.privmsg.ReplyCommand;
|
import de.kentoj.scrow.corevelocity.privmsg.ReplyCommand;
|
||||||
import de.kentoj.scrow.corevelocity.server.SendPlayerWatchdog;
|
import de.kentoj.scrow.corevelocity.network.SendPlayerWatchdog;
|
||||||
import de.kentoj.scrow.corevelocity.server.ServerRegisterWatchdog;
|
import de.kentoj.scrow.corevelocity.network.ServerRegisterWatchdog;
|
||||||
import de.kentoj.scrow.generated.BuildInfo;
|
import de.kentoj.scrow.generated.BuildInfo;
|
||||||
import de.kentoj.scrow.velocity.ScrowAPI;
|
import de.kentoj.scrow.velocity.ScrowAPI;
|
||||||
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
import de.kentoj.scrowlib.convention.ScrowMessageStyle;
|
||||||
|
|
@ -37,9 +38,10 @@ public class CoreVelocityPlugin {
|
||||||
cmds.register(new OnlineCommand(server).getRootNode());
|
cmds.register(new OnlineCommand(server).getRootNode());
|
||||||
}
|
}
|
||||||
|
|
||||||
var registerWatchdog = new ServerRegisterWatchdog(ScrowAPI.getMessageBroker(), server);
|
var registerWatchdog = new ServerRegisterWatchdog(server);
|
||||||
var sendPlayerWatchdog = new SendPlayerWatchdog(ScrowAPI.getMessageBroker(), server);
|
var sendPlayerWatchdog = new SendPlayerWatchdog(server);
|
||||||
registerWatchdog.listen();
|
registerWatchdog.listen();
|
||||||
sendPlayerWatchdog.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.scrow.velocity.ScrowAPI;
|
||||||
import de.kentoj.scrowlib.instancemanager.InstanceManagerImpl;
|
import de.kentoj.scrowlib.instancemanager.InstanceManagerImpl;
|
||||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||||
|
import de.kentoj.scrowlib.player.NetworkPlayerImpl;
|
||||||
import de.kentoj.scrowlib.utils.EnvUtils;
|
import de.kentoj.scrowlib.utils.EnvUtils;
|
||||||
import io.nats.client.Nats;
|
import io.nats.client.Nats;
|
||||||
import io.nats.client.Options;
|
import io.nats.client.Options;
|
||||||
|
|
@ -42,8 +43,8 @@ public class ScrowAPISurface {
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.getMessageBroker()));
|
ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.getMessageBroker()));
|
||||||
|
|
||||||
ScrowAPI.setCommandApi(new CommandAPI(server));
|
ScrowAPI.setCommandApi(new CommandAPI(server));
|
||||||
|
ScrowAPI.setPlayerFactory(playerId -> new NetworkPlayerImpl(ScrowAPI.getMessageBroker(), playerId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void destroyScrowAPI() {
|
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.api.Result;
|
||||||
import com.leakyabstractions.result.core.Results;
|
import com.leakyabstractions.result.core.Results;
|
||||||
import com.velocitypowered.api.proxy.ProxyServer;
|
import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
|
import de.kentoj.scrow.velocity.ScrowAPI;
|
||||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||||
import io.nats.client.Connection;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
|
|
@ -18,11 +18,11 @@ import java.util.concurrent.ExecutionException;
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class SendPlayerWatchdog {
|
public class SendPlayerWatchdog {
|
||||||
|
|
||||||
private final MessageBroker natsRepo;
|
private final MessageBroker messageBroker = ScrowAPI.getMessageBroker();
|
||||||
private final ProxyServer server;
|
private final ProxyServer server;
|
||||||
|
|
||||||
public void listen() {
|
public void listen() {
|
||||||
natsRepo.handle("players.send", doc -> sendPlayer(
|
messageBroker.handle("player.send", doc -> sendPlayer(
|
||||||
doc.get("playerId", UUID.class),
|
doc.get("playerId", UUID.class),
|
||||||
doc.getString("handle")
|
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.ProxyServer;
|
||||||
import com.velocitypowered.api.proxy.server.ServerInfo;
|
import com.velocitypowered.api.proxy.server.ServerInfo;
|
||||||
|
import de.kentoj.scrow.velocity.ScrowAPI;
|
||||||
import de.kentoj.scrowlib.messaging.MessageBroker;
|
import de.kentoj.scrowlib.messaging.MessageBroker;
|
||||||
import io.nats.client.Connection;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.java.Log;
|
import lombok.extern.java.Log;
|
||||||
|
|
||||||
|
|
@ -13,18 +13,18 @@ import java.net.InetSocketAddress;
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class ServerRegisterWatchdog {
|
public class ServerRegisterWatchdog {
|
||||||
|
|
||||||
private final MessageBroker natsRepo;
|
private final MessageBroker messageBroker = ScrowAPI.getMessageBroker();
|
||||||
private final ProxyServer server;
|
private final ProxyServer server;
|
||||||
|
|
||||||
public void listen() {
|
public void listen() {
|
||||||
natsRepo.subscribe("event.instance.up", doc -> {
|
messageBroker.subscribe("event.instance.up", doc -> {
|
||||||
var handle = doc.getString("handle");
|
var handle = doc.getString("handle");
|
||||||
var port = doc.getInteger("port");
|
var port = doc.getInteger("port");
|
||||||
server.unregisterServer(new ServerInfo(handle, new InetSocketAddress(port)));
|
server.unregisterServer(new ServerInfo(handle, new InetSocketAddress(port)));
|
||||||
log.info("registered server " + handle);
|
log.info("registered server " + handle);
|
||||||
});
|
});
|
||||||
|
|
||||||
natsRepo.subscribe("event.instance.down", doc -> {
|
messageBroker.subscribe("event.instance.down", doc -> {
|
||||||
var handle = doc.getString("handle");
|
var handle = doc.getString("handle");
|
||||||
var port = doc.getInteger("port");
|
var port = doc.getInteger("port");
|
||||||
server.unregisterServer(new ServerInfo(handle, new InetSocketAddress(port)));
|
server.unregisterServer(new ServerInfo(handle, new InetSocketAddress(port)));
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package de.kentoj.scrow.corevelocity.privmsg;
|
package de.kentoj.scrow.corevelocity.privmsg;
|
||||||
|
|
||||||
import com.github.benmanes.caffeine.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
import com.google.common.cache.CacheBuilder;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
|
@ -10,8 +10,8 @@ import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class LastTargetCache {
|
public class LastTargetCache {
|
||||||
|
|
||||||
private final Cache<@NotNull UUID, UUID> cache = Caffeine.newBuilder()
|
private final Cache<@NotNull UUID, @NotNull UUID> cache = CacheBuilder.newBuilder()
|
||||||
.expireAfterWrite(20, TimeUnit.MINUTES)
|
.expireAfterAccess(20, TimeUnit.MINUTES)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public @Nullable UUID getLastTarget(UUID uuid) {
|
public @Nullable UUID getLastTarget(UUID uuid) {
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,6 @@ public class ReplyCommand implements SyncCommandExecutor<CommandSource> {
|
||||||
|
|
||||||
if (target == null)
|
if (target == null)
|
||||||
return Results.failure("The player you last messaged is no longer online.");
|
return Results.failure("The player you last messaged is no longer online.");
|
||||||
cache.setLastTarget(sender.getUniqueId(), target.getUniqueId());
|
|
||||||
privMsgHandler.handle(sender, target, msg);
|
privMsgHandler.handle(sender, target, msg);
|
||||||
return Results.success(new Object());
|
return Results.success(new Object());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue