From 2ea2eb5d1ef8955819597fa4bcc8aec82a0208f6 Mon Sep 17 00:00:00 2001 From: kento2 Date: Wed, 5 Aug 2026 21:40:52 +0200 Subject: [PATCH] . --- .bazelrc | 4 +- .gitignore | 5 +- .rundevserver/run dev server.run.xml | 17 +++++ BUILD | 15 +++++ MODULE.bazel | 1 + README.md | 9 --- core-bukkit-api/BUILD | 20 ------ .../bukkit/minigame/lobby/LobbyMinigame.java | 46 ------------- .../de/kentoj/scrow/bukkit/region/Range.java | 27 -------- .../de/kentoj/scrow/bukkit/region/Region.java | 18 ----- .../bukkit/region/event/RegionEvent.java | 14 ---- core-bukkit-impl/BUILD | 17 ----- core-bukkit/BUILD | 43 ++++++++++++ .../java/de/kentoj/scrow/bukkit/ScrowAPI.java | 67 +++++++++++++++---- .../scrow/bukkit/gameserver/GameServer.java | 0 .../bukkit/gameserver/GameServerPool.java | 0 .../scrow/bukkit/minigame/Minigame.java | 8 +-- .../bukkit/minigame/MinigameManager.java | 0 .../scrow/bukkit/minigame/PlayerManager.java | 8 ++- .../bukkit/minigame/lobby/LobbyPhase.java | 10 ++- .../lobby/WaitForMaximumPlayersPhase.java | 5 +- .../lobby/WaitForMinimumPlayersPhase.java | 2 +- .../bukkit/minigame/phase/CompositePhase.java | 4 +- .../scrow/bukkit/minigame/phase/IPhase.java | 0 .../scrow/bukkit/minigame/phase/Phase.java | 6 +- .../bukkit/minigame/phase/PhaseFlow.java | 2 +- .../minigame/phase/event/EventHandler.java | 0 .../minigame/phase/event/PhaseListeners.java | 0 .../phase/event/PhaseListenersImpl.java | 0 .../minigame/phaseflow/LinearPhaseFlow.java | 23 ++++--- .../minigame/phaseflow/PhaseContext.java | 10 ++- .../scrow/bukkit/region/AbstractRegion.java | 7 +- .../kentoj/scrow/bukkit/region/ChunkPos.java | 7 +- .../scrow/bukkit/region/CompositeRegion.java | 12 ++-- .../scrow/bukkit/region/CuboidRegion.java | 16 ++--- .../scrow/bukkit/region/CylinderRegion.java | 10 ++- .../de/kentoj/scrow/bukkit/region/Range.java | 18 +++++ .../de/kentoj/scrow/bukkit/region/Region.java | 25 +++++++ .../scrow/bukkit/region/RegionManager.java | 0 .../bukkit/region/event/RegionEvent.java | 18 +++++ .../bukkit/region/event/RegionJoinEvent.java | 14 ++-- .../bukkit/region/event/RegionLeaveEvent.java | 14 ++-- .../kentoj/scrow/bukkit/scheduler/Task.java | 6 +- .../scrow/bukkit/scheduler/TaskImpl.java | 26 +++---- .../scrow/bukkit/scheduler/TaskState.java | 9 +-- .../kentoj/scrow/bukkit/scheduler/Tasks.java | 5 +- .../kentoj/scrow/bukkit/CoreImplPlugin.java | 20 ++---- .../kentoj/scrow/bukkit/ScrowAPISurface.java | 23 ++++--- .../bukkit/command/economy/CoinsCommand.java | 12 ++-- .../command/economy/CoinsGetLiteral.java | 7 +- .../command/economy/CoinsSetLiteral.java | 13 ++-- .../command/friends/FriendAddLiteral.java | 14 ++-- .../bukkit/command/friends/FriendCommand.java | 23 ++++--- .../command/friends/FriendListLiteral.java | 25 ++++--- .../command/friends/FriendRemoveLiteral.java | 9 ++- .../friends/FriendRequestDeclineLiteral.java | 10 +-- .../friends/FriendRequestsLiteral.java | 35 +++++----- .../command/instance/InstanceCache.java | 12 ++-- .../command/instance/InstanceCommand.java | 20 ++++-- .../instance/InstanceDeployLiteral.java | 12 ++-- .../instance/InstanceDestroyLiteral.java | 12 ++-- .../command/instance/InstanceListLiteral.java | 12 ++-- .../bukkit/command/instance/LobbyCommand.java | 17 +++-- .../bukkit/command/instance/PlayCommand.java | 16 ++--- .../player/NetworkPlayerWatchdog.java | 3 +- .../player/prefix/CachedPrefixProvider.java | 0 .../player/prefix/LuckPermsPrefixSetter.java | 11 +-- .../internal/region/RegionManagerImpl.java | 18 ++--- .../internal/region/RegionPlayerTracker.java | 8 +-- .../bukkit/internal/region/RegionTask.java | 7 +- .../scrow/bukkit/style/ChatStyleListener.java | 8 ++- .../scrow/bukkit/style/StyleHelper.java | 4 +- .../scrow/bukkit/style/TabStyleListener.java | 2 +- .../plugin}/main/resources/plugin.yml | 0 core-lib/BUILD | 1 - .../convention/ScrowMessageStyle.java | 19 ++---- .../scrowlib/friends/FriendRequest.java | 6 +- .../kentoj/scrowlib/friends/Friendship.java | 4 +- .../scrowlib/friends/OrderedUUIDPair.java | 27 ++++---- .../friends/friendship/FriendshipImpl.java | 13 ++-- .../friendship/InMemoryFriendshipService.java | 8 +-- .../friendship/PostgresFriendshipService.java | 18 ++--- .../friends/request/FriendRequestImpl.java | 14 ++-- .../request/InMemoryFriendRequestService.java | 8 +-- .../request/PostgresFriendRequestService.java | 7 +- .../instancemanager/InstanceManager.java | 2 +- .../instancemanager/InstanceManagerImpl.java | 7 +- .../instancemanager/ServerInstance.java | 22 +++--- .../messaging/InMemoyMessageBroker.java | 8 ++- .../scrowlib/messaging/MessageBroker.java | 1 + .../scrowlib/messaging/NatsMessageBroker.java | 6 +- .../scrowlib/messaging/ResultRepository.java | 6 +- .../scrowlib/player/NetworkPlayerFactory.java | 1 - .../scrowlib/player/NetworkPlayerImpl.java | 6 +- .../kentoj/scrowlib/utils/ComponentUtils.java | 7 +- .../scrowlib/utils/DocumentRepository.java | 6 +- .../de/kentoj/scrowlib/utils/EnvUtils.java | 8 +-- core-velocity-api/build.gradle.kts | 29 -------- core-velocity-impl/BUILD | 15 ----- core-velocity-impl/build.gradle.kts | 43 ------------ {core-velocity-api => core-velocity}/BUILD | 20 +++++- .../de/kentoj/scrow/velocity/ScrowAPI.java | 0 .../corevelocity/CoreVelocityPlugin.java | 0 .../scrow/corevelocity/ScrowAPISurface.java | 0 .../corevelocity/misc/OnlineCommand.java | 0 .../network/FriendNotifications.java | 0 .../network/SendPlayerWatchdog.java | 0 .../network/ServerRegisterWatchdog.java | 0 .../corevelocity/privmsg/LastTargetCache.java | 0 .../corevelocity/privmsg/MsgCommand.java | 0 .../corevelocity/privmsg/PrivMsgHandler.java | 0 .../corevelocity/privmsg/ReplyCommand.java | 0 runDevServer.sh | 42 ++++++++++++ third_party/BUILD | 5 +- 114 files changed, 671 insertions(+), 609 deletions(-) create mode 100644 .rundevserver/run dev server.run.xml create mode 100644 BUILD delete mode 100644 core-bukkit-api/BUILD delete mode 100644 core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/LobbyMinigame.java delete mode 100644 core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/Range.java delete mode 100644 core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/Region.java delete mode 100644 core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionEvent.java delete mode 100644 core-bukkit-impl/BUILD create mode 100644 core-bukkit/BUILD rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java (76%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/gameserver/GameServer.java (100%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/gameserver/GameServerPool.java (100%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/Minigame.java (70%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/MinigameManager.java (100%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/PlayerManager.java (90%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/lobby/LobbyPhase.java (91%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMaximumPlayersPhase.java (91%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMinimumPlayersPhase.java (94%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/phase/CompositePhase.java (78%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/phase/IPhase.java (100%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/phase/Phase.java (95%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/phase/PhaseFlow.java (95%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/EventHandler.java (100%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/PhaseListeners.java (100%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/PhaseListenersImpl.java (100%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/LinearPhaseFlow.java (87%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/PhaseContext.java (83%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/region/AbstractRegion.java (76%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/region/ChunkPos.java (70%) rename core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/MergedRegion.java => core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/CompositeRegion.java (77%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/region/CuboidRegion.java (65%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/region/CylinderRegion.java (83%) create mode 100644 core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/Range.java create mode 100644 core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/Region.java rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/region/RegionManager.java (100%) create mode 100644 core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/event/RegionEvent.java rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/region/event/RegionJoinEvent.java (77%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/region/event/RegionLeaveEvent.java (77%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/scheduler/Task.java (92%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/scheduler/TaskImpl.java (80%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/scheduler/TaskState.java (62%) rename {core-bukkit-api/src => core-bukkit/api}/main/java/de/kentoj/scrow/bukkit/scheduler/Tasks.java (97%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java (69%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java (82%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsCommand.java (82%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsGetLiteral.java (92%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsSetLiteral.java (88%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/friends/FriendAddLiteral.java (95%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/friends/FriendCommand.java (74%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/friends/FriendListLiteral.java (81%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRemoveLiteral.java (88%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestDeclineLiteral.java (93%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestsLiteral.java (69%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCache.java (72%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCommand.java (53%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDeployLiteral.java (86%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDestroyLiteral.java (87%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceListLiteral.java (86%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/instance/LobbyCommand.java (64%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/command/instance/PlayCommand.java (83%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/internal/player/NetworkPlayerWatchdog.java (95%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/internal/player/prefix/CachedPrefixProvider.java (100%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/internal/player/prefix/LuckPermsPrefixSetter.java (89%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/internal/region/RegionManagerImpl.java (72%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/internal/region/RegionPlayerTracker.java (79%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/internal/region/RegionTask.java (87%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/style/ChatStyleListener.java (78%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/style/StyleHelper.java (96%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/java/de/kentoj/scrow/bukkit/style/TabStyleListener.java (95%) rename {core-bukkit-impl/src => core-bukkit/plugin}/main/resources/plugin.yml (100%) delete mode 100644 core-velocity-api/build.gradle.kts delete mode 100644 core-velocity-impl/BUILD delete mode 100644 core-velocity-impl/build.gradle.kts rename {core-velocity-api => core-velocity}/BUILD (54%) rename {core-velocity-api/src => core-velocity/api}/main/java/de/kentoj/scrow/velocity/ScrowAPI.java (100%) rename {core-velocity-impl/src => core-velocity/plugin}/main/java/de/kentoj/scrow/corevelocity/CoreVelocityPlugin.java (100%) rename {core-velocity-impl/src => core-velocity/plugin}/main/java/de/kentoj/scrow/corevelocity/ScrowAPISurface.java (100%) rename {core-velocity-impl/src => core-velocity/plugin}/main/java/de/kentoj/scrow/corevelocity/misc/OnlineCommand.java (100%) rename {core-velocity-impl/src => core-velocity/plugin}/main/java/de/kentoj/scrow/corevelocity/network/FriendNotifications.java (100%) rename {core-velocity-impl/src => core-velocity/plugin}/main/java/de/kentoj/scrow/corevelocity/network/SendPlayerWatchdog.java (100%) rename {core-velocity-impl/src => core-velocity/plugin}/main/java/de/kentoj/scrow/corevelocity/network/ServerRegisterWatchdog.java (100%) rename {core-velocity-impl/src => core-velocity/plugin}/main/java/de/kentoj/scrow/corevelocity/privmsg/LastTargetCache.java (100%) rename {core-velocity-impl/src => core-velocity/plugin}/main/java/de/kentoj/scrow/corevelocity/privmsg/MsgCommand.java (100%) rename {core-velocity-impl/src => core-velocity/plugin}/main/java/de/kentoj/scrow/corevelocity/privmsg/PrivMsgHandler.java (100%) rename {core-velocity-impl/src => core-velocity/plugin}/main/java/de/kentoj/scrow/corevelocity/privmsg/ReplyCommand.java (100%) create mode 100755 runDevServer.sh diff --git a/.bazelrc b/.bazelrc index e5211ad..d3eb78f 100644 --- a/.bazelrc +++ b/.bazelrc @@ -2,4 +2,6 @@ build --java_language_version=25 build --java_runtime_version=25 build --tool_java_language_version=25 build --tool_java_runtime_version=25 -build --define=maven_repo=https://repo.lab0x13.site/snapshots \ No newline at end of file +build --define=maven_repo=https://git.lab0x13.site/api/packages/scrow/maven +build --remote_cache=https://cache.lab0x13.site +build --remote_upload_local_results=false \ No newline at end of file diff --git a/.gitignore b/.gitignore index d47fcbf..87f4f43 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,6 @@ build/ !**/src/test/**/build/ .kotlin -run/ - ### IntelliJ IDEA ### .idea/modules.xml .idea/jarRepositories.xml @@ -50,4 +48,5 @@ bin/ /bazel-core /bazel-out /bazel-testlogs -/MODULE.bazel.lock \ No newline at end of file +/MODULE.bazel.lock +/run diff --git a/.rundevserver/run dev server.run.xml b/.rundevserver/run dev server.run.xml new file mode 100644 index 0000000..ca7931b --- /dev/null +++ b/.rundevserver/run dev server.run.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/BUILD b/BUILD new file mode 100644 index 0000000..f0375ce --- /dev/null +++ b/BUILD @@ -0,0 +1,15 @@ +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") +sh_binary( + name = "dev-server", + data = ["//core-bukkit:plugin"], + env = { + "MC_VERSION": "26.2", + "BUILT_PLUGIN": "bazel-bin/core-bukkit/plugin.jar", + }, + args = [ + "LuckPerms.jar=https://download.luckperms.net/1652/bukkit/loader/LuckPerms-Bukkit-5.5.65.jar", + "ViaVersion.jar=https://hangarcdn.papermc.io/plugins/ViaVersion/ViaVersion/versions/5.11.0/PAPER/ViaVersion-5.11.0.jar", + "ViaBackwards.jar=https://hangarcdn.papermc.io/plugins/ViaVersion/ViaBackwards/versions/5.11.0/PAPER/ViaBackwards-5.11.0.jar", + ], + srcs = ["runDevServer.sh"], +) diff --git a/MODULE.bazel b/MODULE.bazel index 49ac758..b8256e4 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,6 +1,7 @@ bazel_dep(name = "rules_java", version = "9.7.0") bazel_dep(name = "rules_jvm_external", version = "7.1") bazel_dep(name = "bazel_jar_jar", version = "0.1.15") +bazel_dep(name = "rules_shell", version = "0.8.0") git_override( module_name = "rules_jvm_external", diff --git a/README.md b/README.md index fed2ff1..c729b98 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,6 @@ # TODO ## BUILD -- turn structure into -```text -//core-bukkit:api -//core-bukkit:plugin -//core-velocity:api -//core-velocity:plugin -//core-lib -``` -- MAKE THIS A MONOREPO - make sure it doesn't break when using postgres/nats (i only tested with dummies) - lwk make sure velocity plugin works at runtime - runServer target: diff --git a/core-bukkit-api/BUILD b/core-bukkit-api/BUILD deleted file mode 100644 index 83af843..0000000 --- a/core-bukkit-api/BUILD +++ /dev/null @@ -1,20 +0,0 @@ -load("@rules_jvm_external//:defs.bzl", "artifact") -load("@rules_java//java:java_library.bzl", "java_library") - -java_library( - name = "core-bukkit-api", - srcs = glob(["src/main/**/*.java"]), - visibility = ["//visibility:public"], - deps = [ - "//core-lib:core", - artifact("io.papermc.paper:paper-api"), - artifact("org.projectlombok:lombok"), - artifact("de.kentoj.scrow:kencommandapi-bukkit"), - ], - exports = [ - "//core-lib:core", - artifact("de.kentoj.scrow:kencommandapi-bukkit"), - artifact("org.mongodb:bson"), - ], - plugins = [ "//third_party:lombok_plugin" ], -) \ No newline at end of file diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/LobbyMinigame.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/LobbyMinigame.java deleted file mode 100644 index a08b2b0..0000000 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/LobbyMinigame.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.kentoj.scrow.bukkit.minigame.lobby; - -import de.kentoj.scrow.bukkit.gameserver.GameServer; -import de.kentoj.scrow.bukkit.minigame.Minigame; -import de.kentoj.scrow.bukkit.minigame.PlayerManager; -import de.kentoj.scrowlib.convention.ScrowMessageStyle; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; - -import java.util.concurrent.CompletableFuture; - -@RequiredArgsConstructor -public class LobbyMinigame implements Minigame { - - @Getter - private final String gameName; - @Getter - private final ScrowMessageStyle messageStyle; - @Getter - @Setter - private GameServer gameServer = null; - @Getter - @Setter - private CompletableFuture destroyGameServer; - - @Override - public int getMinParticipants() { - return 0; - } - - @Override - public int getMaxParticipants() { - return 0; - } - - @Override - public PlayerManager getPlayerManager() { - return null; - } - - @Override - public CompletableFuture start() { - return null; - } -} diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/Range.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/Range.java deleted file mode 100644 index 0b10d22..0000000 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/Range.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.kentoj.scrow.bukkit.region; - -import lombok.Getter; - -@Getter -public final class Range { - private final double min; - private final double max; - - public boolean contains(double num) { - return min <= num && num <= max; - } - - public double getLength() { - return max - min; - } - - public Range(double a, double b) { - if (a < b) { - min = a; - max = b; - } else { - min = b; - max = a; - } - } -} diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/Region.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/Region.java deleted file mode 100644 index e40664d..0000000 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/Region.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.kentoj.scrow.bukkit.region; - -import org.bukkit.Location; - -import java.util.List; -import java.util.UUID; - -public interface Region { - - /** - * A random uuid assigned to the Region at creation - */ - UUID getUuid(); - - boolean isInRegion(Location location); - - List getChunks(); -} diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionEvent.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionEvent.java deleted file mode 100644 index 8c38c54..0000000 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionEvent.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.kentoj.scrow.bukkit.region.event; - -import de.kentoj.scrow.bukkit.region.Region; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; - -@RequiredArgsConstructor -@Getter -public abstract class RegionEvent extends Event { - private final Region region; - private final Player player; -} diff --git a/core-bukkit-impl/BUILD b/core-bukkit-impl/BUILD deleted file mode 100644 index 19b8396..0000000 --- a/core-bukkit-impl/BUILD +++ /dev/null @@ -1,17 +0,0 @@ -load("@rules_java//java:java_binary.bzl", "java_binary") -load("@rules_jvm_external//:defs.bzl", "artifact") - -java_binary( - name = "core-bukkit-plugin", - srcs = glob(["src/main/**/*.java"]), - main_class = "none", - resources = glob(["src/main/resources/**"], allow_empty = True), - deps = [ - "//core-bukkit-api:core-bukkit-api", - artifact("net.luckperms:api"), - artifact("io.papermc.paper:paper-api"), - artifact("io.nats:jnats"), - artifact("net.kyori:adventure-key:5.2.0"), - ], - plugins = [ "//third_party:lombok_plugin" ], -) \ No newline at end of file diff --git a/core-bukkit/BUILD b/core-bukkit/BUILD new file mode 100644 index 0000000..e83ec17 --- /dev/null +++ b/core-bukkit/BUILD @@ -0,0 +1,43 @@ +load("@rules_jvm_external//:defs.bzl", "artifact") +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_binary.bzl", "java_binary") + +java_library( + name = "api", + srcs = glob(["api/main/**/*.java"]), + visibility = ["//visibility:public"], + deps = [ + "//core-lib:core", + artifact("io.papermc.paper:paper-api"), + artifact("org.projectlombok:lombok"), + artifact("de.kentoj.scrow:kencommandapi-bukkit"), + ], + exports = [ + "//core-lib:core", + artifact("de.kentoj.scrow:kencommandapi-bukkit"), + artifact("org.mongodb:bson"), + ], +) + +java_binary( + name = "plugin_bin", + srcs = glob(["plugin/main/**/*.java"]), + create_executable = False, + resources = glob(["plugin/main/resources/**"]), + resource_strip_prefix = "core-bukkit/plugin/main/resources", + deps = [ + ":api", + artifact("net.luckperms:api"), + artifact("io.papermc.paper:paper-api"), + artifact("io.nats:jnats"), + artifact("net.kyori:adventure-key:5.2.0"), + ], +) + +genrule( + name = "plugin", + srcs = [":plugin_bin_deploy.jar"], + outs = ["plugin.jar"], + cmd = "cp $< $@", + visibility = ["//visibility:public"], +) \ No newline at end of file diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java similarity index 76% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java index 005f9fc..48cf2b4 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java @@ -24,35 +24,26 @@ import org.jetbrains.annotations.Nullable; import java.util.UUID; -@NoArgsConstructor(access = AccessLevel.PRIVATE) public class ScrowAPI { + public ScrowAPI() { + } + /** * Might be null in testing environments */ - @Getter private static @Nullable Jdbi jdbi; @ApiStatus.Internal public static Plugin plugin; - @Getter private static EconomyService economyService; - @Getter private static FriendshipService friendshipService; - @Getter private static FriendRequestService friendRequestService; - @Getter private static MessageBroker messageBroker; - @Getter private static InstanceManager instanceManager; - @Getter private static RegionManager regionManager; - @Getter private static CommandAPI playerCommands; - @Getter private static CommandAPI commands; - @Getter private static PlayerPrefixProvider playerPrefixProvider; - @Getter private static final MinigameManager minigameManager = new MinigameManager(); private static NetworkPlayerFactory playerFactory; @@ -123,5 +114,57 @@ public class ScrowAPI { public static void setCommands(CommandAPI commands) { ScrowAPI.commands = commands; } + + public static @Nullable Jdbi jdbi() { + return jdbi; + } + + public static Plugin plugin() { + return plugin; + } + + public static EconomyService economyService() { + return economyService; + } + + public static FriendshipService friendshipService() { + return friendshipService; + } + + public static FriendRequestService friendRequestService() { + return friendRequestService; + } + + public static MessageBroker messageBroker() { + return messageBroker; + } + + public static InstanceManager instanceManager() { + return instanceManager; + } + + public static RegionManager regionManager() { + return regionManager; + } + + public static CommandAPI playerCommands() { + return playerCommands; + } + + public static CommandAPI commands() { + return commands; + } + + public static PlayerPrefixProvider playerPrefixProvider() { + return playerPrefixProvider; + } + + public static NetworkPlayerFactory playerFactory() { + return playerFactory; + } + + public static MinigameManager minigameManager() { + return minigameManager; + } } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/gameserver/GameServer.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/gameserver/GameServer.java similarity index 100% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/gameserver/GameServer.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/gameserver/GameServer.java diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/gameserver/GameServerPool.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/gameserver/GameServerPool.java similarity index 100% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/gameserver/GameServerPool.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/gameserver/GameServerPool.java diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/Minigame.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/Minigame.java similarity index 70% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/Minigame.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/Minigame.java index 817f650..3a05104 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/Minigame.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/Minigame.java @@ -6,19 +6,19 @@ import java.util.concurrent.CompletableFuture; public interface Minigame { - ScrowMessageStyle getMessageStyle(); + ScrowMessageStyle messageStyle(); /** * Required participant count */ - int getMinParticipants(); + int minParticipants(); /** * Maximally allowed participant count */ - int getMaxParticipants(); + int maxParticipants(); - PlayerManager getPlayerManager(); + PlayerManager playerManager(); CompletableFuture start(); } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/MinigameManager.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/MinigameManager.java similarity index 100% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/MinigameManager.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/MinigameManager.java diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/PlayerManager.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/PlayerManager.java similarity index 90% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/PlayerManager.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/PlayerManager.java index ed039f9..01b5e05 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/PlayerManager.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/PlayerManager.java @@ -1,7 +1,6 @@ package de.kentoj.scrow.bukkit.minigame; import de.kentoj.scrow.bukkit.ScrowAPI; -import lombok.RequiredArgsConstructor; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -10,15 +9,18 @@ import java.util.Set; import java.util.UUID; import java.util.stream.Stream; -@RequiredArgsConstructor public final class PlayerManager { private final Set participants = new HashSet<>(); private final Set spectators = new HashSet<>(); - private final MinigameManager minigameManager = ScrowAPI.getMinigameManager(); + private final MinigameManager minigameManager = ScrowAPI.minigameManager(); private final Minigame minigame; + public PlayerManager(Minigame minigame) { + this.minigame = minigame; + } + public Stream getParticipants() { return participants.stream().map(Bukkit::getPlayer); } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/LobbyPhase.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/lobby/LobbyPhase.java similarity index 91% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/LobbyPhase.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/lobby/LobbyPhase.java index 000b86b..7685ae6 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/LobbyPhase.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/lobby/LobbyPhase.java @@ -18,14 +18,13 @@ import org.bukkit.event.player.*; public class LobbyPhase extends CompositePhase { - @Getter private final LinearPhaseFlow subPhaseFlow = new LinearPhaseFlow("lobby"); public LobbyPhase(PhaseContext ctx) { super(ctx); PhaseContext subCtx = new PhaseContext<>(ctx.game(), subPhaseFlow); - subPhaseFlow.add(new WaitForMinimumPlayersPhase(subCtx)); - subPhaseFlow.add(new WaitForMaximumPlayersPhase(subCtx)); + subPhaseFlow.add(new WaitForMinimumPlayersPhase<>(subCtx)); + subPhaseFlow.add(new WaitForMaximumPlayersPhase<>(subCtx)); } @Override @@ -62,4 +61,9 @@ public class LobbyPhase extends CompositePhase { ctx.players().getAllPlayers().forEach(p -> p.sendMessage("§8[§c-§8] §7" + ev.getPlayer().getName())); } + + @Override + public LinearPhaseFlow subPhaseFlow() { + return subPhaseFlow; + } } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMaximumPlayersPhase.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMaximumPlayersPhase.java similarity index 91% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMaximumPlayersPhase.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMaximumPlayersPhase.java index 6c05432..6caddaf 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMaximumPlayersPhase.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMaximumPlayersPhase.java @@ -5,9 +5,6 @@ import de.kentoj.scrow.bukkit.minigame.phase.Phase; import de.kentoj.scrow.bukkit.minigame.phaseflow.PhaseContext; import org.bukkit.event.player.PlayerQuitEvent; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; - class WaitForMaximumPlayersPhase extends Phase { private int secsLeft; @@ -23,7 +20,7 @@ class WaitForMaximumPlayersPhase extends Phase { } private void onQuit(PlayerQuitEvent ev) { - var isEnough = ctx.players().getParticipantCount() >= ctx.game().getMinParticipants(); + var isEnough = ctx.players().getParticipantCount() >= ctx.game().minParticipants(); if (!isEnough) { //deployedServer ctx.phases().rewindPhase(); diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMinimumPlayersPhase.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMinimumPlayersPhase.java similarity index 94% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMinimumPlayersPhase.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMinimumPlayersPhase.java index 2f3588f..16bcbdc 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMinimumPlayersPhase.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/lobby/WaitForMinimumPlayersPhase.java @@ -17,7 +17,7 @@ class WaitForMinimumPlayersPhase extends Phase { } private void onJoin(PlayerJoinEvent ev) { - boolean isEnoughParticipants = ctx.players().getParticipantCount() >= ctx.game().getMinParticipants(); + boolean isEnoughParticipants = ctx.players().getParticipantCount() >= ctx.game().minParticipants(); if (isEnoughParticipants) ctx.advancePhase(); } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/CompositePhase.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/CompositePhase.java similarity index 78% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/CompositePhase.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/CompositePhase.java index 3c73204..2995c91 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/CompositePhase.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/CompositePhase.java @@ -9,11 +9,11 @@ public abstract class CompositePhase extends Phase { super(ctx); } - public abstract PhaseFlow getSubPhaseFlow(); + public abstract PhaseFlow subPhaseFlow(); @Override protected void onStart() { - getSubPhaseFlow().start().thenRun(super::advancePhase); + subPhaseFlow().start().thenRun(super::advancePhase); } @Override diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/IPhase.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/IPhase.java similarity index 100% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/IPhase.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/IPhase.java diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/Phase.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/Phase.java similarity index 95% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/Phase.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/Phase.java index 62f0741..ddc608c 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/Phase.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/Phase.java @@ -3,16 +3,18 @@ package de.kentoj.scrow.bukkit.minigame.phase; import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.minigame.Minigame; import de.kentoj.scrow.bukkit.minigame.phaseflow.PhaseContext; -import lombok.RequiredArgsConstructor; import org.bukkit.scheduler.BukkitRunnable; -@RequiredArgsConstructor public abstract class Phase implements IPhase { protected final PhaseContext ctx; private boolean isActive = false; + protected Phase(PhaseContext ctx) { + this.ctx = ctx; + } + /** * Shall call {@link PhaseFlow#advancePhase()} */ diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/PhaseFlow.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/PhaseFlow.java similarity index 95% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/PhaseFlow.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/PhaseFlow.java index 15706f1..33f0216 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/PhaseFlow.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/PhaseFlow.java @@ -4,7 +4,7 @@ import java.util.concurrent.CompletableFuture; public interface PhaseFlow { - String getName(); + String name(); /** * end the current phase, go to the next phase and start it diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/EventHandler.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/EventHandler.java similarity index 100% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/EventHandler.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/EventHandler.java diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/PhaseListeners.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/PhaseListeners.java similarity index 100% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/PhaseListeners.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/PhaseListeners.java diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/PhaseListenersImpl.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/PhaseListenersImpl.java similarity index 100% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/PhaseListenersImpl.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phase/event/PhaseListenersImpl.java diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/LinearPhaseFlow.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/LinearPhaseFlow.java similarity index 87% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/LinearPhaseFlow.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/LinearPhaseFlow.java index 2a380ed..2bd1026 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/LinearPhaseFlow.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/LinearPhaseFlow.java @@ -3,26 +3,28 @@ package de.kentoj.scrow.bukkit.minigame.phaseflow; import com.google.common.base.Preconditions; import de.kentoj.scrow.bukkit.minigame.phase.IPhase; import de.kentoj.scrow.bukkit.minigame.phase.PhaseFlow; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; -@Slf4j -@RequiredArgsConstructor public class LinearPhaseFlow implements PhaseFlow { - @Getter + private final Logger log = LoggerFactory.getLogger(LinearPhaseFlow.class); + private final String name; private final List phases = new ArrayList<>(); private CompletableFuture onEnd = null; private int curInd = -1; + public LinearPhaseFlow(String name) { + this.name = name; + } + public void add(IPhase phase) { this.phases.add(phase); } @@ -39,7 +41,7 @@ public class LinearPhaseFlow implements PhaseFlow { cur = current(); if (cur == null) { onEnd.complete(null); - log.info("phase flow {} ended", getName()); + log.info("phase flow {} ended", name()); return; } startPhase(cur); @@ -78,7 +80,7 @@ public class LinearPhaseFlow implements PhaseFlow { Preconditions.checkState(onEnd == null, "attempting to start game that is already active"); onEnd = new CompletableFuture<>(); onEnd.thenRun(() -> onEnd = null); - log.info("starting phase flow {}", getName()); + log.info("starting phase flow {}", name()); advancePhase(); return onEnd; } @@ -106,4 +108,9 @@ public class LinearPhaseFlow implements PhaseFlow { if (curInd < 0 || curInd >= phases.size()) return null; return phases.get(curInd); } + + @Override + public String name() { + return name; + } } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/PhaseContext.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/PhaseContext.java similarity index 83% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/PhaseContext.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/PhaseContext.java index 31817f1..afc140e 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/PhaseContext.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/minigame/phaseflow/PhaseContext.java @@ -8,12 +8,16 @@ import de.kentoj.scrow.bukkit.minigame.phase.event.PhaseListeners; import de.kentoj.scrow.bukkit.minigame.phase.event.PhaseListenersImpl; import lombok.RequiredArgsConstructor; -@RequiredArgsConstructor public class PhaseContext { private final T game; private final PhaseFlow phaseFlow; private final PhaseListeners listeners = new PhaseListenersImpl(); + public PhaseContext(T game, PhaseFlow phaseFlow) { + this.game = game; + this.phaseFlow = phaseFlow; + } + public T game() { return game; } @@ -23,11 +27,11 @@ public class PhaseContext { } public PlayerManager players() { - return game.getPlayerManager(); + return game.playerManager(); } public MessageStyle style() { - return game.getMessageStyle(); + return game.messageStyle(); } public PhaseListeners listeners() { diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/AbstractRegion.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/AbstractRegion.java similarity index 76% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/AbstractRegion.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/AbstractRegion.java index bc7d182..8f8d5fb 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/AbstractRegion.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/AbstractRegion.java @@ -1,11 +1,12 @@ package de.kentoj.scrow.bukkit.region; -import lombok.Getter; - import java.util.UUID; public abstract class AbstractRegion implements Region { - @Getter private final UUID uuid = UUID.randomUUID(); + + public UUID uuid() { + return uuid; + } } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/ChunkPos.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/ChunkPos.java similarity index 70% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/ChunkPos.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/ChunkPos.java index d621849..c43cae2 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/ChunkPos.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/ChunkPos.java @@ -1,13 +1,8 @@ package de.kentoj.scrow.bukkit.region; -import lombok.Value; import org.bukkit.Chunk; -@Value -public class ChunkPos { - int x; - int z; - +public record ChunkPos(int x, int z) { public static ChunkPos fromChunk(Chunk chunk) { return new ChunkPos(chunk.getX(), chunk.getZ()); } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/MergedRegion.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/CompositeRegion.java similarity index 77% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/MergedRegion.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/CompositeRegion.java index f3da13e..e005f42 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/MergedRegion.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/CompositeRegion.java @@ -1,6 +1,5 @@ package de.kentoj.scrow.bukkit.region; -import lombok.RequiredArgsConstructor; import org.bukkit.Location; import java.util.ArrayList; @@ -10,11 +9,14 @@ import java.util.List; /** * region consisting of multiple regions */ -@RequiredArgsConstructor -public class MergedRegion extends AbstractRegion { +public class CompositeRegion extends AbstractRegion { private final Region[] regions; + public CompositeRegion(Region[] regions) { + this.regions = regions; + } + @Override public boolean isInRegion(Location location) { for (Region region : regions) { @@ -24,9 +26,9 @@ public class MergedRegion extends AbstractRegion { } @Override - public List getChunks() { + public List chunks() { return Arrays.stream(regions) - .map(Region::getChunks) + .map(Region::chunks) .reduce(new ArrayList<>(), (list, chunks) -> { list.addAll(chunks); return list; diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/CuboidRegion.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/CuboidRegion.java similarity index 65% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/CuboidRegion.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/CuboidRegion.java index 6ca0ede..f08d8ac 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/CuboidRegion.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/CuboidRegion.java @@ -12,9 +12,9 @@ public class CuboidRegion extends AbstractRegion { private final Range zRange; public CuboidRegion(Location loc1, Location loc2) { - xRange = new Range(loc1.getX(), loc2.getX()); - yRange = new Range(loc1.getY(), loc2.getY()); - zRange = new Range(loc1.getY(), loc2.getY()); + xRange = Range.of(loc1.getX(), loc2.getX()); + yRange = Range.of(loc1.getY(), loc2.getY()); + zRange = Range.of(loc1.getY(), loc2.getY()); } @Override @@ -25,14 +25,14 @@ public class CuboidRegion extends AbstractRegion { } @Override - public List getChunks() { + public List chunks() { List res = new ArrayList<>(); - int minChunkX = (int) Math.floor(xRange.getMin()) << 4; - int maxChunkX = (int) Math.ceil(xRange.getMax()) << 4; + int minChunkX = (int) Math.floor(xRange.min()) << 4; + int maxChunkX = (int) Math.ceil(xRange.max()) << 4; for (int chunkX = minChunkX; chunkX < maxChunkX; chunkX++) { - int minChunkZ = (int) Math.floor(zRange.getMin()) << 4; - int maxChunkZ = (int) Math.ceil(zRange.getMax()) << 4; + int minChunkZ = (int) Math.floor(zRange.min()) << 4; + int maxChunkZ = (int) Math.ceil(zRange.max()) << 4; for (int chunkZ = minChunkZ; chunkZ < maxChunkZ; chunkZ++) { res.add(new ChunkPos(chunkX, chunkZ)); } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/CylinderRegion.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/CylinderRegion.java similarity index 83% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/CylinderRegion.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/CylinderRegion.java index ba3dbdf..155f352 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/CylinderRegion.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/CylinderRegion.java @@ -1,18 +1,22 @@ package de.kentoj.scrow.bukkit.region; -import lombok.RequiredArgsConstructor; import org.bukkit.Location; import java.util.ArrayList; import java.util.List; -@RequiredArgsConstructor public class CylinderRegion extends AbstractRegion { private final Location center; private final double height; private final double radius; + public CylinderRegion(Location center, double height, double radius) { + this.center = center; + this.height = height; + this.radius = radius; + } + @Override public boolean isInRegion(Location location) { if (location.getY() < center.getY()) return false; @@ -23,7 +27,7 @@ public class CylinderRegion extends AbstractRegion { } @Override - public List getChunks() { + public List chunks() { List res = new ArrayList<>(); int a = (int) Math.ceil(radius / 16); diff --git a/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/Range.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/Range.java new file mode 100644 index 0000000..cf82374 --- /dev/null +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/Range.java @@ -0,0 +1,18 @@ +package de.kentoj.scrow.bukkit.region; + +public record Range( + double min, + double max +) { + public boolean contains(double num) { + return min <= num && num <= max; + } + + public double getLength() { + return max - min; + } + + public static Range of(double a, double b) { + return new Range(Math.min(a, b), Math.max(a, b)); + } +} diff --git a/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/Region.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/Region.java new file mode 100644 index 0000000..1d81ce8 --- /dev/null +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/Region.java @@ -0,0 +1,25 @@ +package de.kentoj.scrow.bukkit.region; + +import org.bukkit.Location; + +import java.util.List; +import java.util.UUID; + +public interface Region { + + /** + * A random uuid assigned to the Region at creation + */ + UUID uuid(); + + /** + * only called if location is in {@link Region#chunks()} + */ + boolean isInRegion(Location location); + + /** + * Used for optimization: isInRegion is only called if the location is in one of these chunks + * @return Chunks that the region touches + */ + List chunks(); +} diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/RegionManager.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/RegionManager.java similarity index 100% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/RegionManager.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/RegionManager.java diff --git a/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/event/RegionEvent.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/event/RegionEvent.java new file mode 100644 index 0000000..f2802c1 --- /dev/null +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/event/RegionEvent.java @@ -0,0 +1,18 @@ +package de.kentoj.scrow.bukkit.region.event; + +import de.kentoj.scrow.bukkit.region.Region; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerEvent; + +public abstract class RegionEvent extends PlayerEvent { + private final Region region; + + protected RegionEvent(Region region, Player player) { + super(player); + this.region = region; + } + + public Region getRegion() { + return region; + } +} diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionJoinEvent.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/event/RegionJoinEvent.java similarity index 77% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionJoinEvent.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/event/RegionJoinEvent.java index 72f8d38..d60a041 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionJoinEvent.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/event/RegionJoinEvent.java @@ -1,8 +1,6 @@ package de.kentoj.scrow.bukkit.region.event; import de.kentoj.scrow.bukkit.region.Region; -import lombok.Getter; -import lombok.Setter; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.HandlerList; @@ -12,8 +10,6 @@ public class RegionJoinEvent extends RegionEvent implements Cancellable { private static final HandlerList handlers = new HandlerList(); - @Setter - @Getter private boolean isCancelled; public RegionJoinEvent(Region region, Player player) { @@ -28,4 +24,14 @@ public class RegionJoinEvent extends RegionEvent implements Cancellable { public static HandlerList getHandlerList() { return handlers; } + + @Override + public boolean isCancelled() { + return this.isCancelled; + } + + @Override + public void setCancelled(boolean isCancelled) { + this.isCancelled = isCancelled; + } } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionLeaveEvent.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/event/RegionLeaveEvent.java similarity index 77% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionLeaveEvent.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/event/RegionLeaveEvent.java index 880f695..b8fe734 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionLeaveEvent.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/region/event/RegionLeaveEvent.java @@ -1,8 +1,6 @@ package de.kentoj.scrow.bukkit.region.event; import de.kentoj.scrow.bukkit.region.Region; -import lombok.Getter; -import lombok.Setter; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.HandlerList; @@ -12,8 +10,6 @@ public class RegionLeaveEvent extends RegionEvent implements Cancellable { private static final HandlerList handlers = new HandlerList(); - @Setter - @Getter private boolean isCancelled; public RegionLeaveEvent(Region region, Player player) { @@ -28,4 +24,14 @@ public class RegionLeaveEvent extends RegionEvent implements Cancellable { public static HandlerList getHandlerList() { return handlers; } + + @Override + public boolean isCancelled() { + return this.isCancelled; + } + + @Override + public void setCancelled(boolean isCancelled) { + this.isCancelled = isCancelled; + } } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/Task.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/scheduler/Task.java similarity index 92% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/Task.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/scheduler/Task.java index 8b6ab79..875219a 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/Task.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/scheduler/Task.java @@ -19,7 +19,7 @@ public interface Task { } default Task supplySync(Supplier supplier) { - return mapSync(__ -> supplier.get()); + return mapSync(_ -> supplier.get()); } default Task thenSync(Consumer consumer) { @@ -32,14 +32,14 @@ public interface Task { Task mapSync(Function mapper); default Task runAsync(Runnable task) { - return mapAsync(__ -> { + return mapAsync(_ -> { task.run(); return null; }); } default Task supplyAsync(Supplier supplier) { - return mapAsync(__ -> supplier.get()); + return mapAsync(_ -> supplier.get()); } default Task thenAsync(Consumer consumer) { diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/TaskImpl.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/scheduler/TaskImpl.java similarity index 80% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/TaskImpl.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/scheduler/TaskImpl.java index b6f2d01..73cfaf8 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/TaskImpl.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/scheduler/TaskImpl.java @@ -1,10 +1,9 @@ package de.kentoj.scrow.bukkit.scheduler; import de.kentoj.scrow.bukkit.ScrowAPI; -import lombok.AccessLevel; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.bukkit.Bukkit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.concurrent.*; import java.util.function.Function; @@ -17,20 +16,23 @@ import java.util.function.Supplier; * * @param type of computed result */ -@Slf4j -@RequiredArgsConstructor(access = AccessLevel.PACKAGE) public class TaskImpl implements Task { + private static final Logger log = LoggerFactory.getLogger(TaskImpl.class); private static final ExecutorService EXECUTOR = Executors.newVirtualThreadPerTaskExecutor(); private final Supplier> compute; private volatile TaskState cachedResult = null; + TaskImpl(Supplier> compute) { + this.compute = compute; + } + @Override public CompletableFuture toFuture() { return CompletableFuture.supplyAsync(() -> { try { - return state().getValue(); + return state().value(); } catch (Exception ex) { log.error("failed completing future", ex); throw new CompletionException(ex); @@ -44,11 +46,11 @@ public class TaskImpl implements Task { public Task mapSync(Function mapper) { return new TaskImpl<>(() -> { var s = state(); - if (s.isYielded()) return yielded(s); + if (s.yielded()) return yielded(s); try { return TaskState.completed(Bukkit.getScheduler() - .callSyncMethod(ScrowAPI.plugin, () -> mapper.apply(s.getValue())) + .callSyncMethod(ScrowAPI.plugin, () -> mapper.apply(s.value())) .get()); } catch (InterruptedException e) { Thread.currentThread().interrupt(); @@ -65,16 +67,16 @@ public class TaskImpl implements Task { public Task mapAsync(Function mapper) { return new TaskImpl<>(() -> { var s = state(); - if (s.isYielded()) return yielded(s); - return TaskState.completed(mapper.apply(state().getValue())); + if (s.yielded()) return yielded(s); + return TaskState.completed(mapper.apply(state().value())); }); } @Override public Task yieldIf(Predicate precondition) { var s = state(); - if (!s.isYielded() && precondition.test(s.getValue())) { - return new TaskImpl<>(() -> TaskState.yielded(s.getValue())); + if (!s.yielded() && precondition.test(s.value())) { + return new TaskImpl<>(() -> TaskState.yielded(s.value())); } return this; } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/TaskState.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/scheduler/TaskState.java similarity index 62% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/TaskState.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/scheduler/TaskState.java index ef369c5..b35af3c 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/TaskState.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/scheduler/TaskState.java @@ -1,15 +1,8 @@ package de.kentoj.scrow.bukkit.scheduler; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.Nullable; -@Getter -@RequiredArgsConstructor -public class TaskState { - private final @Nullable T value; - private final boolean yielded; - +public record TaskState(@Nullable T value, boolean yielded) { public static TaskState yielded(@Nullable T value) { return new TaskState<>(value, true); } diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/Tasks.java b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/scheduler/Tasks.java similarity index 97% rename from core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/Tasks.java rename to core-bukkit/api/main/java/de/kentoj/scrow/bukkit/scheduler/Tasks.java index 61208f8..8f29979 100644 --- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/scheduler/Tasks.java +++ b/core-bukkit/api/main/java/de/kentoj/scrow/bukkit/scheduler/Tasks.java @@ -10,8 +10,11 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.function.Supplier; -@NoArgsConstructor(access = AccessLevel.NONE) public class Tasks { + + private Tasks() { + } + public static Task supplyAsync(Supplier supplier) { return new TaskImpl<>(() -> TaskState.completed(supplier.get())); } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java similarity index 69% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java index c588009..93e23b7 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/CoreImplPlugin.java @@ -26,31 +26,21 @@ public final class CoreImplPlugin extends JavaPlugin { var cachedPrefixProvider = new CachedPrefixProvider(); ScrowAPISurface.initScrowAPI(this, cachedPrefixProvider); - ScrowAPI.getPlayerCommands().register(new CoinsCommand().getRootLiteral()); - ScrowAPI.getPlayerCommands().register(FriendCommand.create()); + ScrowAPI.playerCommands().register(new CoinsCommand().rootLiteral()); + ScrowAPI.playerCommands().register(new FriendCommand().rootLiteral()); var instanceCache = new InstanceCache(); - ScrowAPI.getCommands().register(InstanceCommand.create(instanceCache)); - ScrowAPI.getPlayerCommands().register(new PlayCommand().getRootLiteral()); - ScrowAPI.getPlayerCommands().register(new LobbyCommand().getRootLiteral()); + ScrowAPI.commands().register(new InstanceCommand(instanceCache).rootLiteral()); + ScrowAPI.playerCommands().register(new PlayCommand().rootLiteral()); + ScrowAPI.playerCommands().register(new LobbyCommand().rootLiteral()); var luckperms = LuckPermsProvider.get(); new LuckPermsPrefixSetter(luckperms, cachedPrefixProvider).init(this); getServer().getPluginManager().registerEvents(new ChatStyleListener(cachedPrefixProvider), this); getServer().getPluginManager().registerEvents(new TabStyleListener(cachedPrefixProvider), this); - // TODO/FIXME //registerServer(); } - private void registerServer() { - try (var file = FileChannel.open(Path.of("/proc/self/fd/4"), StandardOpenOption.WRITE)) { - //noinspection ResultOfMethodCallIgnored - file.write(ByteBuffer.wrap(new byte[]{'\n'})); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - @Override public void onDisable() { ScrowAPISurface.destroyScrowAPI(); diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java similarity index 82% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java index 923b7bb..daab4cf 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java @@ -2,7 +2,6 @@ package de.kentoj.scrow.bukkit; import de.kentoj.kencommandapi.CommandAPI; import de.kentoj.scrow.bukkit.internal.player.NetworkPlayerWatchdog; -import de.kentoj.scrow.bukkit.internal.player.prefix.CachedPrefixProvider; import de.kentoj.scrow.bukkit.internal.region.RegionManagerImpl; import de.kentoj.scrow.bukkit.internal.region.RegionPlayerTracker; import de.kentoj.scrow.bukkit.internal.region.RegionTask; @@ -21,19 +20,21 @@ import io.nats.client.Nats; import io.nats.client.Options; import lombok.AccessLevel; import lombok.NoArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.jdbi.v3.core.Jdbi; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.Properties; -@Slf4j @NoArgsConstructor(access = AccessLevel.NONE) public class ScrowAPISurface { + private static final Logger log = LoggerFactory.getLogger(ScrowAPISurface.class); + public static void initScrowAPI(Plugin plugin, PlayerPrefixProvider prefixProvider) { ScrowAPI.setCorePlugin(plugin); @@ -67,17 +68,17 @@ public class ScrowAPISurface { log.error("HOST_POSTGRES not set -> Using in-memory database"); } - ScrowAPI.setPlayerFactory(playerId -> new NetworkPlayerImpl(ScrowAPI.getMessageBroker(), playerId)); + ScrowAPI.setPlayerFactory(playerId -> new NetworkPlayerImpl(ScrowAPI.messageBroker(), playerId)); ScrowAPI.setRegionManager(new RegionManagerImpl()); ScrowAPI.setCommands(new CommandAPI<>(plugin, CommandSender.class)); ScrowAPI.setPlayerCommands(new CommandAPI<>(plugin, Player.class)); - ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.getMessageBroker())); - ScrowAPI.setEconomyService(ScrowAPI.getJdbi() != null ? - new PostgresEconomyService(ScrowAPI.getJdbi()) : new InMemoryEconomyService()); - ScrowAPI.setFriendRequestService(ScrowAPI.getJdbi() != null ? - new PostgresFriendRequestService(ScrowAPI.getJdbi()) : new InMemoryFriendRequestService()); - ScrowAPI.setFriendshipService(ScrowAPI.getJdbi() != null ? - new PostgresFriendshipService(ScrowAPI.getJdbi()) : new InMemoryFriendshipService()); + ScrowAPI.setInstanceManager(new InstanceManagerImpl(ScrowAPI.messageBroker())); + ScrowAPI.setEconomyService(ScrowAPI.jdbi() != null ? + new PostgresEconomyService(ScrowAPI.jdbi()) : new InMemoryEconomyService()); + ScrowAPI.setFriendRequestService(ScrowAPI.jdbi() != null ? + new PostgresFriendRequestService(ScrowAPI.jdbi()) : new InMemoryFriendRequestService()); + ScrowAPI.setFriendshipService(ScrowAPI.jdbi() != null ? + new PostgresFriendshipService(ScrowAPI.jdbi()) : new InMemoryFriendshipService()); ScrowAPI.setPlayerPrefixProvider(prefixProvider); new RegionTask(new RegionPlayerTracker()).runTaskTimer(plugin, 10, 10); diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsCommand.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsCommand.java similarity index 82% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsCommand.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsCommand.java index f8fb4b3..7d9f62a 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsCommand.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsCommand.java @@ -15,7 +15,7 @@ import org.bukkit.entity.Player; import java.util.concurrent.CompletableFuture; public final class CoinsCommand { - @Getter + private final RootLiteral rootLiteral; private final MessageStyle style; @@ -24,18 +24,22 @@ public final class CoinsCommand { rootLiteral = Literal.builder("coins", "bal", "balance") .withPermission("command.coins.get.self") .withExecutor(this::execute) - .withLiteral(new CoinsSetLiteral(style).getLiteral()) - .withLiteral(new CoinsGetLiteral(style).getLiteral()) + .withLiteral(new CoinsSetLiteral(style).literal()) + .withLiteral(new CoinsGetLiteral(style).literal()) .asRootLiteral(style); } public CompletableFuture> execute(CommandContext ctx) { var player = ctx.getSender(); return Tasks.supplyAsync(() -> - ScrowAPI.getEconomyService().getCoins(player.getUniqueId())) + ScrowAPI.economyService().getCoins(player.getUniqueId())) .>mapSync(amount -> { player.sendMessage(style.ok("You have " + amount + "$")); return Results.success(new Object()); }).toFuture(); } + + public RootLiteral rootLiteral() { + return rootLiteral; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsGetLiteral.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsGetLiteral.java similarity index 92% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsGetLiteral.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsGetLiteral.java index ee54749..9d4e3e3 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsGetLiteral.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsGetLiteral.java @@ -18,7 +18,6 @@ import java.util.concurrent.CompletableFuture; public final class CoinsGetLiteral { - @Getter private final Literal literal; private final MessageStyle style; private final CommandArgumentSpec playerArg; @@ -39,10 +38,14 @@ public final class CoinsGetLiteral { private CompletableFuture> execute(CommandContext ctx) { var player = ctx.getArg(playerArg); return Tasks.supplyAsync(() -> - ScrowAPI.getEconomyService().getCoins(player.getUniqueId())) + ScrowAPI.economyService().getCoins(player.getUniqueId())) .>mapSync(amount -> { ctx.getSender().sendMessage(style.ok(player.getName() + " has " + amount + "$")); return Results.success(new Object()); }).toFuture(); } + + public Literal literal() { + return literal; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsSetLiteral.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsSetLiteral.java similarity index 88% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsSetLiteral.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsSetLiteral.java index c6ad3dd..5554938 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsSetLiteral.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/economy/CoinsSetLiteral.java @@ -6,28 +6,23 @@ import de.kentoj.kencommandapi.api.argument.CommandArgumentSpec; import de.kentoj.kencommandapi.api.argument.types.IntegerArgumentType; import de.kentoj.kencommandapi.api.invocation.CommandContext; import de.kentoj.kencommandapi.api.literal.Literal; -import de.kentoj.kencommandapi.api.literal.LiteralBuilder; import de.kentoj.kencommandapi.api.platform.MessageStyle; import de.kentoj.kencommandapi.type.OfflinePlayerArgumentType; import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.scheduler.Tasks; -import lombok.Getter; import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.concurrent.CompletableFuture; public final class CoinsSetLiteral { - @Getter private final Literal literal; - private final MessageStyle style; private final CommandArgumentSpec playerArg; private final CommandArgumentSpec amountArg; - public CoinsSetLiteral(MessageStyle style) { + CoinsSetLiteral(MessageStyle style) { this.style = style; playerArg = CommandArgumentSpec.builder("player", new OfflinePlayerArgumentType()) .withDefaultValue(CommandContext::getSender) @@ -46,10 +41,14 @@ public final class CoinsSetLiteral { var player = ctx.getArg(playerArg); var amount = ctx.getArg(amountArg); return Tasks.runAsync(() -> - ScrowAPI.getEconomyService().setCoins(player.getUniqueId(), amount)) + ScrowAPI.economyService().setCoins(player.getUniqueId(), amount)) .>supplySync(() -> { ctx.getSender().sendMessage(style.ok(player.getName() + " now has " + amount + "$")); return Results.success(new Object()); }).toFuture(); } + + public Literal literal() { + return literal; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendAddLiteral.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendAddLiteral.java similarity index 95% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendAddLiteral.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendAddLiteral.java index 7d64056..a8fa8d0 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendAddLiteral.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendAddLiteral.java @@ -24,17 +24,15 @@ import java.util.Objects; import java.util.UUID; import java.util.concurrent.CompletableFuture; -public class FriendAddLiteral { +public final class FriendAddLiteral { - @Getter private final Literal literal; private final CommandArgumentSpec playerArg; private final ScrowMessageStyle style; + private final FriendRequestService requestService = ScrowAPI.friendRequestService(); + private final FriendshipService friendsService = ScrowAPI.friendshipService(); - private final FriendRequestService requestService = ScrowAPI.getFriendRequestService(); - private final FriendshipService friendsService = ScrowAPI.getFriendshipService(); - - public FriendAddLiteral(ScrowMessageStyle style) { + FriendAddLiteral(ScrowMessageStyle style) { this.style = style; playerArg = CommandArgumentSpec.builder("player", new OfflinePlayerArgumentType()) .build(); @@ -114,6 +112,10 @@ public class FriendAddLiteral { .mapSync(Objects::nonNull); } + public Literal literal() { + return literal; + } + private enum AddAction { SEND_REQUEST, ACCEPT_REQUEST diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendCommand.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendCommand.java similarity index 74% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendCommand.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendCommand.java index 5c1b13a..a7ab760 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendCommand.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendCommand.java @@ -11,17 +11,18 @@ import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; -@NoArgsConstructor(access = AccessLevel.NONE) -public class FriendCommand { +public final class FriendCommand { - public static RootLiteral create() { + private final RootLiteral rootLiteral; + + public FriendCommand() { var style = new ScrowMessageStyle("Friends", NamedTextColor.AQUA); - return Literal.builder("f", "friend") - .withLiteral(new FriendListLiteral(style).getLiteral()) - .withLiteral(new FriendAddLiteral(style).getLiteral()) - .withLiteral(new FriendRemoveLiteral(style).getLiteral()) - .withLiteral(new FriendRequestDeclineLiteral(style).getLiteral()) - .withLiteral(new FriendRequestsLiteral(style).getLiteral()) + rootLiteral = Literal.builder("f", "friend") + .withLiteral(new FriendListLiteral(style).literal()) + .withLiteral(new FriendAddLiteral(style).literal()) + .withLiteral(new FriendRemoveLiteral(style).literal()) + .withLiteral(new FriendRequestDeclineLiteral(style).literal()) + .withLiteral(new FriendRequestsLiteral(style).literal()) .asRootLiteral(style); } @@ -39,4 +40,8 @@ public class FriendCommand { : ClickEvent.suggestCommand("/f decline " + requestSenderName)) .color(NamedTextColor.RED)); } + + public RootLiteral rootLiteral() { + return rootLiteral; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendListLiteral.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendListLiteral.java similarity index 81% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendListLiteral.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendListLiteral.java index 1e2b241..2ed1f1b 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendListLiteral.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendListLiteral.java @@ -7,7 +7,6 @@ import de.kentoj.kencommandapi.api.literal.Literal; import de.kentoj.scrow.bukkit.ScrowAPI; 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 net.kyori.adventure.text.format.NamedTextColor; @@ -22,22 +21,24 @@ import java.util.concurrent.CompletableFuture; import static java.util.Objects.requireNonNull; import static net.kyori.adventure.text.Component.text; -@RequiredArgsConstructor public final class FriendListLiteral { - - @Getter - private final Literal literal = Literal.builder("list") - .withExecutor(this::displayFriendList) - .build(); + private final Literal literal; private final ScrowMessageStyle style; + FriendListLiteral(ScrowMessageStyle style) { + this.style = style; + literal = Literal.builder("list") + .withExecutor(this::displayFriendList) + .build(); + } + private CompletableFuture> displayFriendList(CommandContext ctx) { var sender = ctx.getSender(); return Tasks.supplyAsync(() -> - ScrowAPI.getFriendshipService().getFriendships(sender.getUniqueId())) + ScrowAPI.friendshipService().getFriendships(sender.getUniqueId())) .>mapSync(friendships -> { var friends = friendships.stream() - .map(friendship -> Bukkit.getOfflinePlayer(friendship.getUuids().getOther(sender.getUniqueId()))) + .map(friendship -> Bukkit.getOfflinePlayer(friendship.uuids().getOther(sender.getUniqueId()))) .sorted(this::compareByOnlineStatus) .toList(); if (friends.isEmpty()) return Results.failure("You have no friends. Use /friend add "); @@ -61,10 +62,14 @@ public final class FriendListLiteral { : " (offline)"); message = message .appendNewline() - .append(text("≫ ").color(style.getPrefixColor())) + .append(text("≫ ").color(style.prefixColor())) .append(text(requireNonNull(friend.getName())).color(NamedTextColor.GRAY)) .append(status); } return message; } + + public Literal literal() { + return literal; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRemoveLiteral.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRemoveLiteral.java similarity index 88% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRemoveLiteral.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRemoveLiteral.java index 9da6d6b..d918209 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRemoveLiteral.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRemoveLiteral.java @@ -15,9 +15,8 @@ import org.bukkit.entity.Player; import java.util.concurrent.CompletableFuture; -public class FriendRemoveLiteral { +public final class FriendRemoveLiteral { - @Getter private final Literal literal; private final CommandArgumentSpec playerArg; private final ScrowMessageStyle style; @@ -35,7 +34,7 @@ public class FriendRemoveLiteral { private CompletableFuture> removeFriend(CommandContext ctx) { var friend = ctx.getArg(playerArg); return Tasks.supplyAsync(() -> - ScrowAPI.getFriendshipService().deleteFriendship(friend.getUniqueId(), ctx.getSender().getUniqueId())) + ScrowAPI.friendshipService().deleteFriendship(friend.getUniqueId(), ctx.getSender().getUniqueId())) .>mapSync(deleted -> { if (!deleted) return Results.failure("You are not friends with " + friend.getName() + "."); @@ -43,4 +42,8 @@ public class FriendRemoveLiteral { return Results.success(new Object()); }).toFuture(); } + + public Literal literal() { + return literal; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestDeclineLiteral.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestDeclineLiteral.java similarity index 93% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestDeclineLiteral.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestDeclineLiteral.java index 3c22a95..ec7728b 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestDeclineLiteral.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestDeclineLiteral.java @@ -17,14 +17,12 @@ import org.bukkit.entity.Player; import java.util.concurrent.CompletableFuture; -@RequiredArgsConstructor -public class FriendRequestDeclineLiteral { +public final class FriendRequestDeclineLiteral { - @Getter private final Literal literal; private final CommandArgumentSpec playerArg; private final ScrowMessageStyle style; - private final FriendRequestService requestService = ScrowAPI.getFriendRequestService(); + private final FriendRequestService requestService = ScrowAPI.friendRequestService(); FriendRequestDeclineLiteral(ScrowMessageStyle style) { this.style = style; @@ -49,4 +47,8 @@ public class FriendRequestDeclineLiteral { return Results.success(new Object()); }).toFuture(); } + + public Literal literal() { + return literal; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestsLiteral.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestsLiteral.java similarity index 69% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestsLiteral.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestsLiteral.java index 18a6053..64e64ec 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestsLiteral.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/friends/FriendRequestsLiteral.java @@ -5,12 +5,9 @@ import com.leakyabstractions.result.core.Results; import de.kentoj.kencommandapi.api.invocation.CommandContext; import de.kentoj.kencommandapi.api.literal.Literal; import de.kentoj.scrow.bukkit.ScrowAPI; -import de.kentoj.scrowlib.friends.FriendRequest; import de.kentoj.scrow.bukkit.scheduler.Tasks; import de.kentoj.scrowlib.convention.ScrowMessageStyle; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.RequiredArgsConstructor; +import de.kentoj.scrowlib.friends.FriendRequest; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -22,29 +19,33 @@ import java.util.concurrent.CompletableFuture; import static net.kyori.adventure.text.Component.text; -@RequiredArgsConstructor(access = AccessLevel.PACKAGE) -public class FriendRequestsLiteral { +public final class FriendRequestsLiteral { - @Getter - private final Literal literal = Literal.builder("requests") - .withExecutor(this::displayFriendRequests) - .build(); + private final Literal literal; private final ScrowMessageStyle style; + FriendRequestsLiteral(ScrowMessageStyle style) { + this.style = style; + literal = Literal.builder("requests") + .withExecutor(this::displayFriendRequests) + .build(); + } + private CompletableFuture> displayFriendRequests(CommandContext ctx) { return Tasks.supplyAsync(() -> - ScrowAPI.getFriendRequestService().getFriendRequestsTo(ctx.getSender().getUniqueId())) + ScrowAPI.friendRequestService().getFriendRequestsTo(ctx.getSender().getUniqueId())) .>mapAsync(list -> { if (list.isEmpty()) return Results.failure("You have no friend requests."); - var requesters = list.stream().sorted(this::compareByAge).map(fr -> Bukkit.getOfflinePlayer(fr.getFrom()).getName()); - + var requesters = list.stream() + .sorted(this::compareByAge) + .map(fr -> Bukkit.getOfflinePlayer(fr.from()).getName()); ctx.getSender().sendMessage(formatList(requesters.toList())); return Results.success(new Object()); }).toFuture(); } private int compareByAge(FriendRequest a, FriendRequest b) { - return a.getCreatedAt().isAfter(b.getCreatedAt()) ? 1 : -1; + return a.createdAt().isAfter(b.createdAt()) ? 1 : -1; } private Component formatList(List requesters) { @@ -52,10 +53,14 @@ public class FriendRequestsLiteral { for (String requester : requesters) { message = message .appendNewline() - .append(text("≫ ").color(style.getPrefixColor())) + .append(text("≫ ").color(style.prefixColor())) .append(Component.text(requester).color(NamedTextColor.GRAY) .append(FriendCommand.friendRequestOptions(requester, false))); } return message; } + + public Literal literal() { + return literal; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCache.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCache.java similarity index 72% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCache.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCache.java index 69ef396..9b16a88 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCache.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCache.java @@ -2,7 +2,6 @@ package de.kentoj.scrow.bukkit.command.instance; import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrowlib.instancemanager.ServerInstance; -import de.kentoj.scrowlib.messaging.MessageBroker; import org.bson.Document; import org.jetbrains.annotations.Nullable; @@ -12,18 +11,15 @@ import java.util.concurrent.ConcurrentMap; public class InstanceCache { - private final MessageBroker messageBroker = ScrowAPI.getMessageBroker(); - private final ConcurrentMap cache = new ConcurrentHashMap<>(); public InstanceCache() { - messageBroker.subscribe("event.instance.up", doc -> { + ScrowAPI.messageBroker().subscribe("event.instance.up", doc -> { var inst = toInstance(doc); - cache.put(inst.getHandle(), inst); - }); - messageBroker.subscribe("event.instance.down", doc -> { - cache.remove(doc.getString("handle")); + cache.put(inst.handle(), inst); }); + ScrowAPI.messageBroker().subscribe("event.instance.down", doc -> + cache.remove(doc.getString("handle"))); } public Collection getInstances() { diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCommand.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCommand.java similarity index 53% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCommand.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCommand.java index 5226f95..156f93a 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCommand.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceCommand.java @@ -8,14 +8,20 @@ import lombok.NoArgsConstructor; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.command.CommandSender; -@NoArgsConstructor(access = AccessLevel.NONE) -public class InstanceCommand { - public static RootLiteral create(InstanceCache instanceCache) { +public final class InstanceCommand { + + private RootLiteral rootLiteral; + + public InstanceCommand(InstanceCache instanceCache) { var style = new ScrowMessageStyle("server-manager", NamedTextColor.RED); - return Literal.builder("instance", "server-manager") - .withLiteral(new InstanceListLiteral(style).getLiteral()) - .withLiteral(new InstanceDeployLiteral(style).getLiteral()) - .withLiteral(new InstanceDestroyLiteral(instanceCache, style).getLiteral()) + rootLiteral = Literal.builder("instance", "server-manager") + .withLiteral(new InstanceListLiteral(style).literal()) + .withLiteral(new InstanceDeployLiteral(style).literal()) + .withLiteral(new InstanceDestroyLiteral(instanceCache, style).literal()) .asRootLiteral(style); } + + public RootLiteral rootLiteral() { + return rootLiteral; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDeployLiteral.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDeployLiteral.java similarity index 86% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDeployLiteral.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDeployLiteral.java index bc9c8a6..cd85a58 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDeployLiteral.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDeployLiteral.java @@ -9,14 +9,12 @@ import de.kentoj.kencommandapi.api.literal.Literal; import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.scheduler.Tasks; import de.kentoj.scrowlib.convention.ScrowMessageStyle; -import lombok.Getter; import org.bukkit.command.CommandSender; import java.util.concurrent.CompletableFuture; -public class InstanceDeployLiteral { +public final class InstanceDeployLiteral { - @Getter private final Literal literal; private final CommandArgumentSpec templateArg; private final ScrowMessageStyle style; @@ -36,11 +34,15 @@ public class InstanceDeployLiteral { var template = ctx.getArg(templateArg); ctx.getSender().sendMessage(style.ok("Deploying instance... this may take a while.")); return Tasks.supplyAsync(() -> - ScrowAPI.getInstanceManager().deployInstance(template)) + ScrowAPI.instanceManager().deployInstance(template)) .>mapSync(instance -> { - ctx.getSender().sendMessage(style.ok("Deployed instance of " + template + " with handle " + instance.getHandle() + ".")); + ctx.getSender().sendMessage(style.ok("Deployed instance of " + template + " with handle " + instance.handle() + ".")); // FIXME handle unknown server return Results.success(new Object()); }).toFuture(); } + + public Literal literal() { + return literal; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDestroyLiteral.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDestroyLiteral.java similarity index 87% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDestroyLiteral.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDestroyLiteral.java index 224403e..e90c430 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDestroyLiteral.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceDestroyLiteral.java @@ -10,14 +10,12 @@ import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.scheduler.Tasks; import de.kentoj.scrowlib.convention.ScrowMessageStyle; import de.kentoj.scrowlib.instancemanager.ServerInstance; -import lombok.Getter; import org.bukkit.command.CommandSender; import java.util.concurrent.CompletableFuture; -public class InstanceDestroyLiteral { +public final class InstanceDestroyLiteral { - @Getter private final Literal literal; private final CommandArgumentSpec handleArg; private final ScrowMessageStyle style; @@ -28,7 +26,7 @@ public class InstanceDestroyLiteral { handleArg = CommandArgumentSpec.builder("handle", new StringArgumentType()) .withSuggestionProvider(_ -> cache.getInstances().stream() - .map(ServerInstance::getHandle) + .map(ServerInstance::handle) .toList()) .build(); literal = Literal.builder("destroy") @@ -39,7 +37,7 @@ public class InstanceDestroyLiteral { private CompletableFuture> destroyInstance(CommandContext ctx) { var handle = ctx.getArg(handleArg); - return Tasks.supplyAsync(() -> ScrowAPI.getInstanceManager().destroyInstance(handle)) + return Tasks.supplyAsync(() -> ScrowAPI.instanceManager().destroyInstance(handle)) .>mapSync(found -> { if (!found) return Results.failure("No instance with that handle found."); @@ -47,4 +45,8 @@ public class InstanceDestroyLiteral { return Results.success(new Object()); }).toFuture(); } + + public Literal literal() { + return literal; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceListLiteral.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceListLiteral.java similarity index 86% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceListLiteral.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceListLiteral.java index b8beef4..44891f9 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceListLiteral.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/InstanceListLiteral.java @@ -7,15 +7,13 @@ import de.kentoj.kencommandapi.api.literal.Literal; import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.scheduler.Tasks; import de.kentoj.scrowlib.convention.ScrowMessageStyle; -import lombok.Getter; import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; import java.util.concurrent.CompletableFuture; -public class InstanceListLiteral { +public final class InstanceListLiteral { - @Getter private final Literal literal; private final ScrowMessageStyle style; @@ -28,15 +26,19 @@ public class InstanceListLiteral { private CompletableFuture> displayInstanceList(CommandContext ctx) { return Tasks.supplyAsync(() -> - ScrowAPI.getInstanceManager().getInstances()) + ScrowAPI.instanceManager().instances()) .>mapSync(instances -> { var msg = Component.text("Running instances:"); for (var inst : instances) { msg = msg.appendNewline() - .append(Component.text(" - " + inst.getHandle() + " on port " + inst.getPort())); + .append(Component.text(" - " + inst.handle() + " on port " + inst.port())); } ctx.getSender().sendMessage(style.ok(msg)); return Results.success(new Object()); }).toFuture(); } + + public Literal literal() { + return literal; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/LobbyCommand.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/LobbyCommand.java similarity index 64% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/LobbyCommand.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/LobbyCommand.java index eacc4f7..e05763c 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/LobbyCommand.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/LobbyCommand.java @@ -11,15 +11,22 @@ import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -public class LobbyCommand { +public final class LobbyCommand { - @Getter - private final RootLiteral rootLiteral = Literal.builder("lobby", "l", "hub") - .withSyncExecutor(this::sendToLobby) - .asRootLiteral(ScrowMessageStyle.GENERIC); + private final RootLiteral rootLiteral; + + public LobbyCommand() { + rootLiteral = Literal.builder("lobby", "l", "hub") + .withSyncExecutor(this::sendToLobby) + .asRootLiteral(ScrowMessageStyle.GENERIC); + } private Result sendToLobby(CommandContext ctx) { Bukkit.dispatchCommand(ctx.getSender(), "play lobby"); return Results.success(new Object()); } + + public RootLiteral rootLiteral() { + return rootLiteral; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/PlayCommand.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/PlayCommand.java similarity index 83% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/PlayCommand.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/PlayCommand.java index 73384f3..8cc02e8 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/command/instance/PlayCommand.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/command/instance/PlayCommand.java @@ -5,21 +5,17 @@ import com.leakyabstractions.result.core.Results; import de.kentoj.kencommandapi.api.argument.CommandArgumentSpec; import de.kentoj.kencommandapi.api.argument.types.StringArgumentType; import de.kentoj.kencommandapi.api.invocation.CommandContext; -import de.kentoj.kencommandapi.api.invocation.CommandExecutor; import de.kentoj.kencommandapi.api.literal.Literal; import de.kentoj.kencommandapi.api.literal.RootLiteral; import de.kentoj.scrow.bukkit.ScrowAPI; import de.kentoj.scrow.bukkit.scheduler.Tasks; import de.kentoj.scrowlib.convention.ScrowMessageStyle; -import lombok.Getter; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.concurrent.CompletableFuture; -public class PlayCommand { +public final class PlayCommand { - @Getter private final RootLiteral rootLiteral; private final CommandArgumentSpec gamemodeArg; @@ -34,19 +30,23 @@ public class PlayCommand { private CompletableFuture> execute(CommandContext ctx) { var gamemode = ctx.getArg(gamemodeArg); - return Tasks.supplyAsync(() -> ScrowAPI.getInstanceManager().getInstances()) + return Tasks.supplyAsync(() -> ScrowAPI.instanceManager().instances()) .mapAsync(instances -> { var instance = instances.stream() - .filter(inst -> inst.getTemplate().equals(gamemode)) + .filter(inst -> inst.template().equals(gamemode)) .findFirst() .orElse(null); if (instance == null) return Results.failure("No instance for " + gamemode + " found."); return Results.ofCallable(() -> { - ScrowAPI.getPlayer(ctx.getSender()).sendToInstance(instance.getHandle()); + ScrowAPI.getPlayer(ctx.getSender()).sendToInstance(instance.handle()); return new Object(); }).mapFailure(Exception::getMessage); }).toFuture(); } + + public RootLiteral rootLiteral() { + return rootLiteral; + } } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/player/NetworkPlayerWatchdog.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/player/NetworkPlayerWatchdog.java similarity index 95% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/player/NetworkPlayerWatchdog.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/player/NetworkPlayerWatchdog.java index d17dd03..c927add 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/player/NetworkPlayerWatchdog.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/player/NetworkPlayerWatchdog.java @@ -13,7 +13,6 @@ 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(); @@ -52,7 +51,7 @@ public class NetworkPlayerWatchdog { } private void handle(String subject, BiConsumer handler) { - ScrowAPI.getMessageBroker().subscribe(subject, doc -> { + ScrowAPI.messageBroker().subscribe(subject, doc -> { var player = Bukkit.getPlayer(doc.get("playerId", UUID.class)); if (player != null) handler.accept(player, doc); diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/player/prefix/CachedPrefixProvider.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/player/prefix/CachedPrefixProvider.java similarity index 100% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/player/prefix/CachedPrefixProvider.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/player/prefix/CachedPrefixProvider.java diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/player/prefix/LuckPermsPrefixSetter.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/player/prefix/LuckPermsPrefixSetter.java similarity index 89% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/player/prefix/LuckPermsPrefixSetter.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/player/prefix/LuckPermsPrefixSetter.java index cf6ccb7..e3efb15 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/player/prefix/LuckPermsPrefixSetter.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/player/prefix/LuckPermsPrefixSetter.java @@ -1,6 +1,5 @@ package de.kentoj.scrow.bukkit.internal.player.prefix; -import lombok.RequiredArgsConstructor; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.luckperms.api.LuckPerms; @@ -16,7 +15,6 @@ import org.jetbrains.annotations.Nullable; import java.util.UUID; -@RequiredArgsConstructor public class LuckPermsPrefixSetter implements Listener { private static final MiniMessage MM = MiniMessage.miniMessage(); @@ -24,6 +22,11 @@ public class LuckPermsPrefixSetter implements Listener { private final LuckPerms luckPerms; private final CachedPrefixProvider cache; + public LuckPermsPrefixSetter(LuckPerms luckPerms, CachedPrefixProvider cache) { + this.luckPerms = luckPerms; + this.cache = cache; + } + @SuppressWarnings("resource") public void init(Plugin plugin) { luckPerms.getEventBus().subscribe(UserDataRecalculateEvent.class, this::onDataChange); @@ -51,12 +54,12 @@ public class LuckPermsPrefixSetter implements Listener { @EventHandler public void onPlayerQuit(PlayerQuitEvent ev) { var playerId = ev.getPlayer().getUniqueId(); - cache.setPrefix(playerId, (Component) null); + cache.setPrefix(playerId, null); } private void updatePrefix(UUID playerId, @Nullable String rawPrefix) { if (rawPrefix == null) { - cache.setPrefix(playerId, (Component) null); + cache.setPrefix(playerId, null); return; } var prefixComponent = MM.deserialize(rawPrefix); diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/region/RegionManagerImpl.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/region/RegionManagerImpl.java similarity index 72% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/region/RegionManagerImpl.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/region/RegionManagerImpl.java index 718df66..eb60a67 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/region/RegionManagerImpl.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/region/RegionManagerImpl.java @@ -14,7 +14,7 @@ public class RegionManagerImpl implements RegionManager { @Override public List getRegions(ChunkPos chunkPos) { - long key = toKey(chunkPos.getX(), chunkPos.getZ()); + long key = toKey(chunkPos.x(), chunkPos.z()); var uuids = chunkIndex.get(key); if (uuids == null) return Collections.emptyList(); return uuids.stream().map(regions::get).toList(); @@ -27,23 +27,23 @@ public class RegionManagerImpl implements RegionManager { @Override public void registerRegion(Region region) { - for (ChunkPos chunkPos : region.getChunks()) { - var key = toKey(chunkPos.getX(), chunkPos.getZ()); + for (ChunkPos chunkPos : region.chunks()) { + var key = toKey(chunkPos.x(), chunkPos.z()); chunkIndex.computeIfAbsent(key, __ -> new ArrayList<>()) - .add(region.getUuid()); + .add(region.uuid()); } - regions.put(region.getUuid(), region); + regions.put(region.uuid(), region); } @Override public void unregisterRegion(Region region) { - for (ChunkPos chunkPos : region.getChunks()) { - var key = toKey(chunkPos.getX(), chunkPos.getZ()); + for (ChunkPos chunkPos : region.chunks()) { + var key = toKey(chunkPos.x(), chunkPos.z()); var list = chunkIndex.get(key); if (list == null) return; - list.remove(region.getUuid()); + list.remove(region.uuid()); } - regions.remove(region.getUuid()); + regions.remove(region.uuid()); } public long toKey(int x, int z) { diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/region/RegionPlayerTracker.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/region/RegionPlayerTracker.java similarity index 79% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/region/RegionPlayerTracker.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/region/RegionPlayerTracker.java index be0d8fb..a6f3165 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/region/RegionPlayerTracker.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/region/RegionPlayerTracker.java @@ -14,25 +14,25 @@ public class RegionPlayerTracker { private final Map> playersInRegion = new HashMap<>(); public void registerInRegion(Region region, Player player) { - playersInRegion.computeIfAbsent(region.getUuid(), __ -> new ArrayList<>()) + playersInRegion.computeIfAbsent(region.uuid(), __ -> new ArrayList<>()) .add(player.getUniqueId()); } public void unregisterInRegion(Region region, Player player) { - var uuids = playersInRegion.get(region.getUuid()); + var uuids = playersInRegion.get(region.uuid()); if (uuids == null) return; uuids.remove(player.getUniqueId()); } public Map> getRegionsWithPlayers() { return playersInRegion.entrySet().stream().collect(Collectors.toMap( - ent -> ScrowAPI.getRegionManager().getRegion(ent.getKey()), + ent -> ScrowAPI.regionManager().getRegion(ent.getKey()), ent -> ent.getValue().stream().map(Bukkit::getPlayer) )); } public boolean isInRegion(Region region, Player player) { - var uuids = playersInRegion.get(region.getUuid()); + var uuids = playersInRegion.get(region.uuid()); if (uuids == null) return false; return uuids.contains(player.getUniqueId()); } diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/region/RegionTask.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/region/RegionTask.java similarity index 87% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/region/RegionTask.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/region/RegionTask.java index 0c3e7b3..81a9e5f 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/internal/region/RegionTask.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/internal/region/RegionTask.java @@ -9,11 +9,14 @@ import lombok.RequiredArgsConstructor; import org.bukkit.Bukkit; import org.bukkit.scheduler.BukkitRunnable; -@RequiredArgsConstructor public class RegionTask extends BukkitRunnable { private final RegionPlayerTracker playerTracker; + public RegionTask(RegionPlayerTracker playerTracker) { + this.playerTracker = playerTracker; + } + @Override public void run() { playerTracker.getRegionsWithPlayers().forEach((region, players) -> @@ -28,7 +31,7 @@ public class RegionTask extends BukkitRunnable { ); for (var player : Bukkit.getOnlinePlayers()) { - var regions = ScrowAPI.getRegionManager().getRegions(ChunkPos.fromChunk(player.getLocation().getChunk())); + var regions = ScrowAPI.regionManager().getRegions(ChunkPos.fromChunk(player.getLocation().getChunk())); for (Region region : regions) { var tracked = playerTracker.isInRegion(region, player); var inside = region.isInRegion(player.getLocation()); diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/style/ChatStyleListener.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/style/ChatStyleListener.java similarity index 78% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/style/ChatStyleListener.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/style/ChatStyleListener.java index df03fff..3487a2f 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/style/ChatStyleListener.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/style/ChatStyleListener.java @@ -2,17 +2,19 @@ package de.kentoj.scrow.bukkit.style; import de.kentoj.scrowlib.player.PlayerPrefixProvider; import io.papermc.paper.event.player.AsyncChatEvent; -import lombok.RequiredArgsConstructor; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -@RequiredArgsConstructor -public class ChatStyleListener implements Listener { +public final class ChatStyleListener implements Listener { private final PlayerPrefixProvider prefixProvider; + public ChatStyleListener(PlayerPrefixProvider prefixProvider) { + this.prefixProvider = prefixProvider; + } + @EventHandler public void onChat(AsyncChatEvent ev) { var prefix = prefixProvider.getPrefix(ev.getPlayer().getUniqueId()); diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/style/StyleHelper.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/style/StyleHelper.java similarity index 96% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/style/StyleHelper.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/style/StyleHelper.java index 712c326..031ae9d 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/style/StyleHelper.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/style/StyleHelper.java @@ -7,8 +7,10 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.jetbrains.annotations.Nullable; -@NoArgsConstructor(access = AccessLevel.NONE) public class StyleHelper { + + private StyleHelper() {} + public static Component formatName(Component playerName, @Nullable Component prefix) { Component result = prefix != null ? prefix.append(Component.text("│ ").color(NamedTextColor.DARK_GRAY)) diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/style/TabStyleListener.java b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/style/TabStyleListener.java similarity index 95% rename from core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/style/TabStyleListener.java rename to core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/style/TabStyleListener.java index 0a798df..c60826b 100644 --- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/style/TabStyleListener.java +++ b/core-bukkit/plugin/main/java/de/kentoj/scrow/bukkit/style/TabStyleListener.java @@ -10,7 +10,7 @@ import org.jetbrains.annotations.Nullable; import java.util.UUID; -public class TabStyleListener implements Listener { +public final class TabStyleListener implements Listener { private final PlayerPrefixProvider prefixProvider; diff --git a/core-bukkit-impl/src/main/resources/plugin.yml b/core-bukkit/plugin/main/resources/plugin.yml similarity index 100% rename from core-bukkit-impl/src/main/resources/plugin.yml rename to core-bukkit/plugin/main/resources/plugin.yml diff --git a/core-lib/BUILD b/core-lib/BUILD index acc6aa9..0f0b31e 100644 --- a/core-lib/BUILD +++ b/core-lib/BUILD @@ -19,5 +19,4 @@ java_library( artifact("io.nats:jnats"), ], exports = shared_deps, - plugins = [ "//third_party:lombok_plugin" ], ) \ No newline at end of file diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/convention/ScrowMessageStyle.java b/core-lib/src/main/java/de/kentoj/scrowlib/convention/ScrowMessageStyle.java index 9f4e2f3..fe9fff7 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/convention/ScrowMessageStyle.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/convention/ScrowMessageStyle.java @@ -1,28 +1,21 @@ package de.kentoj.scrowlib.convention; import de.kentoj.kencommandapi.api.platform.MessageStyle; -import lombok.Getter; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.format.TextDecoration; -public class ScrowMessageStyle implements MessageStyle { +public record ScrowMessageStyle( + Component prefix, + String prefixText, + TextColor prefixColor +) implements MessageStyle { public static ScrowMessageStyle GENERIC = new ScrowMessageStyle("Scrow", TextColor.color(0xe5377f)); - @Getter - private final Component prefix; - @Getter - private final String prefixText; - @Getter - private final TextColor prefixColor; - public ScrowMessageStyle(String prefixText, TextColor prefixColor) { - this.prefixText = prefixText; - this.prefixColor = prefixColor; - this.prefix = Component.text(prefixText) - .color(prefixColor); + this(Component.text(prefixText).color(prefixColor), prefixText, prefixColor); } @Override diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/friends/FriendRequest.java b/core-lib/src/main/java/de/kentoj/scrowlib/friends/FriendRequest.java index 9df5e84..5749b97 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/friends/FriendRequest.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/friends/FriendRequest.java @@ -4,7 +4,7 @@ import java.time.Instant; import java.util.UUID; public interface FriendRequest { - UUID getFrom(); - UUID getTo(); - Instant getCreatedAt(); + UUID from(); + UUID to(); + Instant createdAt(); } diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/friends/Friendship.java b/core-lib/src/main/java/de/kentoj/scrowlib/friends/Friendship.java index e0ae3a4..262284f 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/friends/Friendship.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/friends/Friendship.java @@ -4,7 +4,7 @@ import java.time.Instant; public interface Friendship { - OrderedUUIDPair getUuids(); + OrderedUUIDPair uuids(); - Instant getCreatedAt(); + Instant createdAt(); } diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/friends/OrderedUUIDPair.java b/core-lib/src/main/java/de/kentoj/scrowlib/friends/OrderedUUIDPair.java index 18b2d5d..5844c79 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/friends/OrderedUUIDPair.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/friends/OrderedUUIDPair.java @@ -1,25 +1,24 @@ package de.kentoj.scrowlib.friends; -import lombok.Getter; - import java.util.UUID; -@Getter -public class OrderedUUIDPair { - private final UUID first; - private final UUID second; - - public OrderedUUIDPair(UUID uuid1, UUID uuid2) { - if (uuid1.compareTo(uuid2) < 0) { - this.first = uuid1; - this.second = uuid2; +public record OrderedUUIDPair( + UUID first, + UUID second +) { + public static OrderedUUIDPair of(UUID a, UUID b) { + UUID first, second; + if (a.compareTo(b) < 0) { + first = a; + second = b; } else { - this.first = uuid2; - this.second = uuid1; + first = b; + second = a; } + return new OrderedUUIDPair(first, second); } public UUID getOther(UUID self) { - return getFirst().equals(self) ? getSecond() : getFirst(); + return first().equals(self) ? second() : first(); } } diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/FriendshipImpl.java b/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/FriendshipImpl.java index da1de60..a891fb2 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/FriendshipImpl.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/FriendshipImpl.java @@ -3,18 +3,15 @@ package de.kentoj.scrowlib.friends.friendship; import de.kentoj.scrowlib.friends.Friendship; import de.kentoj.scrowlib.friends.OrderedUUIDPair; import lombok.RequiredArgsConstructor; -import lombok.Value; import java.time.Instant; import java.util.UUID; -@Value -@RequiredArgsConstructor -public class FriendshipImpl implements Friendship { - OrderedUUIDPair uuids; - Instant createdAt; - +public record FriendshipImpl( + OrderedUUIDPair uuids, + Instant createdAt +) implements Friendship { public FriendshipImpl(UUID uuid1, UUID uuid2, Instant createdAt) { - this(new OrderedUUIDPair(uuid1, uuid2), createdAt); + this(OrderedUUIDPair.of(uuid1, uuid2), createdAt); } } diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/InMemoryFriendshipService.java b/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/InMemoryFriendshipService.java index 41a2ddd..36a81b9 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/InMemoryFriendshipService.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/InMemoryFriendshipService.java @@ -15,14 +15,14 @@ public class InMemoryFriendshipService implements FriendshipService { @Override public Friendship getFriendship(UUID uuid1, UUID uuid2) { - return friendships.get(new OrderedUUIDPair(uuid1, uuid2)); + return friendships.get(OrderedUUIDPair.of(uuid1, uuid2)); } @Override public List getFriendships(UUID playerId) { return friendships.entrySet().stream() .filter(ent -> - ent.getKey().getFirst().equals(playerId) || ent.getKey().getSecond().equals(playerId) + ent.getKey().first().equals(playerId) || ent.getKey().second().equals(playerId) ) .map(Map.Entry::getValue) .toList(); @@ -30,11 +30,11 @@ public class InMemoryFriendshipService implements FriendshipService { @Override public boolean saveFriendship(Friendship friendship) { - return friendships.putIfAbsent(friendship.getUuids(), friendship) == null; + return friendships.putIfAbsent(friendship.uuids(), friendship) == null; } @Override public boolean deleteFriendship(UUID uuid1, UUID uuid2) { - return friendships.remove(new OrderedUUIDPair(uuid1, uuid2)) != null; + return friendships.remove(OrderedUUIDPair.of(uuid1, uuid2)) != null; } } diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/PostgresFriendshipService.java b/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/PostgresFriendshipService.java index aa38a55..19a7cb7 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/PostgresFriendshipService.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/friends/friendship/PostgresFriendshipService.java @@ -33,15 +33,15 @@ public class PostgresFriendshipService implements FriendshipService { @Override public @Nullable Friendship getFriendship(UUID uuid1, UUID uuid2) { - var uuids = new OrderedUUIDPair(uuid1, uuid2); + var uuids = OrderedUUIDPair.of(uuid1, uuid2); return jdbi.withHandle(h -> h.createQuery(""" SELECT first_uuid, second_uuid, created_at FROM friendships WHERE first_uuid = :first AND second_uuid = :second """) - .bind("first", uuids.getFirst()) - .bind("second", uuids.getSecond()) + .bind("first", uuids.first()) + .bind("second", uuids.second()) .map(this::parseFriendship) .findFirst().orElse(null)); } @@ -65,21 +65,21 @@ public class PostgresFriendshipService implements FriendshipService { VALUES (:first, :second, :createdAt) ON CONFLICT (first_uuid, second_uuid) DO NOTHING """) - .bind("first", friendship.getUuids().getFirst()) - .bind("second", friendship.getUuids().getSecond()) - .bind("createdAt", friendship.getCreatedAt()) + .bind("first", friendship.uuids().first()) + .bind("second", friendship.uuids().second()) + .bind("createdAt", friendship.createdAt()) .execute() > 0); } @Override public boolean deleteFriendship(UUID uuid1, UUID uuid2) { - var uuids = new OrderedUUIDPair(uuid1, uuid2); + var uuids = OrderedUUIDPair.of(uuid1, uuid2); return jdbi.withHandle(h -> h.createUpdate(""" DELETE FROM friendships WHERE first_uuid = :first AND second_uuid = :second """) - .bind("first", uuids.getFirst()) - .bind("second", uuids.getSecond()) + .bind("first", uuids.first()) + .bind("second", uuids.second()) .execute() > 0); } diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/FriendRequestImpl.java b/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/FriendRequestImpl.java index ba4a069..9f12269 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/FriendRequestImpl.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/FriendRequestImpl.java @@ -1,19 +1,15 @@ package de.kentoj.scrowlib.friends.request; import de.kentoj.scrowlib.friends.FriendRequest; -import lombok.AllArgsConstructor; -import lombok.Value; import java.time.Instant; import java.util.UUID; -@Value -@AllArgsConstructor -public class FriendRequestImpl implements FriendRequest { - UUID from; - UUID to; - Instant createdAt; - +public record FriendRequestImpl( + UUID from, + UUID to, + Instant createdAt +) implements FriendRequest { public FriendRequestImpl(UUID from, UUID to) { this(from, to, Instant.now()); } diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/InMemoryFriendRequestService.java b/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/InMemoryFriendRequestService.java index 493a22c..005e30d 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/InMemoryFriendRequestService.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/InMemoryFriendRequestService.java @@ -15,21 +15,21 @@ public class InMemoryFriendRequestService implements FriendRequestService { @Override public List getFriendRequestsTo(UUID playerId) { return requests.stream() - .filter(req -> req.getTo().equals(playerId)) + .filter(req -> req.to().equals(playerId)) .toList(); } @Override public List getFriendRequestsFrom(UUID playerId) { return requests.stream() - .filter(req -> req.getFrom().equals(playerId)) + .filter(req -> req.from().equals(playerId)) .toList(); } @Override public FriendRequest getFriendRequest(UUID from, UUID to) { return requests.stream() - .filter(req -> req.getFrom().equals(from) && req.getTo().equals(to)) + .filter(req -> req.from().equals(from) && req.to().equals(to)) .findFirst() .orElse(null); } @@ -41,6 +41,6 @@ public class InMemoryFriendRequestService implements FriendRequestService { @Override public boolean deleteFriendRequest(UUID from, UUID to) { - return requests.removeIf(req -> req.getFrom().equals(from) && req.getTo().equals(to)); + return requests.removeIf(req -> req.from().equals(from) && req.to().equals(to)); } } diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/PostgresFriendRequestService.java b/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/PostgresFriendRequestService.java index 16afead..c071679 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/PostgresFriendRequestService.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/friends/request/PostgresFriendRequestService.java @@ -13,7 +13,6 @@ import java.time.OffsetDateTime; import java.util.List; import java.util.UUID; -@Slf4j public class PostgresFriendRequestService implements FriendRequestService { private final Jdbi jdbi; @@ -52,9 +51,9 @@ public class PostgresFriendRequestService implements FriendRequestService { INSERT INTO friendrequests (from_uuid, to_uuid, created_at) VALUES (:from, :to, :createdAt) """) - .bind("from", friendRequest.getFrom()) - .bind("to", friendRequest.getTo()) - .bind("createdAt", friendRequest.getCreatedAt()) + .bind("from", friendRequest.from()) + .bind("to", friendRequest.to()) + .bind("createdAt", friendRequest.createdAt()) .execute() > 0); } diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/InstanceManager.java b/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/InstanceManager.java index ee1eb1b..60d2adc 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/InstanceManager.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/InstanceManager.java @@ -24,7 +24,7 @@ public interface InstanceManager { * * @return list of running instances */ - List getInstances(); + List instances(); /** * Runs blocking diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/InstanceManagerImpl.java b/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/InstanceManagerImpl.java index f205e48..dc6961c 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/InstanceManagerImpl.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/InstanceManagerImpl.java @@ -8,11 +8,14 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -@RequiredArgsConstructor public class InstanceManagerImpl implements InstanceManager { private final MessageBroker messageBroker; + public InstanceManagerImpl(MessageBroker messageBroker) { + this.messageBroker = messageBroker; + } + @Override public ServerInstance deployInstance(String template) { var document = messageBroker.request("instance.deploy", new Document("template", template)); @@ -31,7 +34,7 @@ public class InstanceManagerImpl implements InstanceManager { } @Override - public List getInstances() { + public List instances() { var document = messageBroker.request("instance.list", new Document()); return document.getList("instances", Document.class) .stream() diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/ServerInstance.java b/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/ServerInstance.java index 8df7729..cf7ecbd 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/ServerInstance.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/instancemanager/ServerInstance.java @@ -1,21 +1,17 @@ package de.kentoj.scrowlib.instancemanager; -import com.google.common.base.Preconditions; -import lombok.Value; import org.bson.Document; -@Value -public class ServerInstance { - String handle; - String template; - int port; +import static com.google.common.base.Preconditions.checkNotNull; - public ServerInstance(String handle, String template, int port) { - Preconditions.checkNotNull(template); - Preconditions.checkNotNull(handle); - this.template = template; - this.handle = handle; - this.port = port; +public record ServerInstance( + String handle, + String template, + int port +) { + public ServerInstance { + checkNotNull(template); + checkNotNull(handle); } static ServerInstance fromDocument(Document document) { diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/messaging/InMemoyMessageBroker.java b/core-lib/src/main/java/de/kentoj/scrowlib/messaging/InMemoyMessageBroker.java index 49716a3..05e88ee 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/messaging/InMemoyMessageBroker.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/messaging/InMemoyMessageBroker.java @@ -1,7 +1,8 @@ package de.kentoj.scrowlib.messaging; -import lombok.extern.slf4j.Slf4j; import org.bson.Document; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.HashMap; @@ -10,9 +11,10 @@ import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.function.Consumer; -@Slf4j public class InMemoyMessageBroker implements MessageBroker { + private final Logger log = LoggerFactory.getLogger(InMemoyMessageBroker.class); + private final Map>> subscribers = new HashMap<>(); private final Map handlers = new HashMap<>(); @@ -25,7 +27,7 @@ public class InMemoyMessageBroker implements MessageBroker { @Override public void subscribe(String subject, Consumer consumer) { - subscribers.computeIfAbsent(subject, __ -> new ArrayList<>()) + subscribers.computeIfAbsent(subject, _ -> new ArrayList<>()) .add(consumer); } diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/messaging/MessageBroker.java b/core-lib/src/main/java/de/kentoj/scrowlib/messaging/MessageBroker.java index c5327b8..39178aa 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/messaging/MessageBroker.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/messaging/MessageBroker.java @@ -15,6 +15,7 @@ public interface MessageBroker { void publish(String subject, Document document); /** + * May block until subscription registered. * subscribes to a subject, consumer may run asynchronously * * @param subject subject to publish to diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/messaging/NatsMessageBroker.java b/core-lib/src/main/java/de/kentoj/scrowlib/messaging/NatsMessageBroker.java index 7f7f7b3..48049f0 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/messaging/NatsMessageBroker.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/messaging/NatsMessageBroker.java @@ -5,8 +5,9 @@ import com.leakyabstractions.result.core.Results; import de.kentoj.scrowlib.utils.DocumentRepository; import io.nats.client.Connection; import io.nats.client.Dispatcher; -import lombok.extern.slf4j.Slf4j; import org.bson.Document; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.Optional; import java.util.concurrent.ExecutionException; @@ -14,9 +15,10 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.function.Consumer; -@Slf4j public class NatsMessageBroker implements MessageBroker { + private final Logger log = LoggerFactory.getLogger(NatsMessageBroker.class); + private static final ExecutorService EXECUTOR = Executors.newVirtualThreadPerTaskExecutor(); private final Connection nats; private final Dispatcher dispatcher; diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/messaging/ResultRepository.java b/core-lib/src/main/java/de/kentoj/scrowlib/messaging/ResultRepository.java index eb39506..84b68e5 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/messaging/ResultRepository.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/messaging/ResultRepository.java @@ -2,14 +2,14 @@ package de.kentoj.scrowlib.messaging; import com.leakyabstractions.result.api.Result; import com.leakyabstractions.result.core.Results; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; import org.bson.Document; -@NoArgsConstructor(access = AccessLevel.NONE) class ResultRepository { + private ResultRepository() { + } + static Document toDocument(Result result) { return result.hasSuccess() ? new Document("data", result.getSuccess().orElseThrow()) diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/player/NetworkPlayerFactory.java b/core-lib/src/main/java/de/kentoj/scrowlib/player/NetworkPlayerFactory.java index 915cc30..9496f4a 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/player/NetworkPlayerFactory.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/player/NetworkPlayerFactory.java @@ -4,6 +4,5 @@ import java.util.UUID; @FunctionalInterface public interface NetworkPlayerFactory { - NetworkPlayer create(UUID uuid); } diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/player/NetworkPlayerImpl.java b/core-lib/src/main/java/de/kentoj/scrowlib/player/NetworkPlayerImpl.java index b62f933..920d9cf 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/player/NetworkPlayerImpl.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/player/NetworkPlayerImpl.java @@ -12,13 +12,17 @@ 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; + public NetworkPlayerImpl(MessageBroker messageBroker, UUID playerId) { + this.messageBroker = messageBroker; + this.playerId = playerId; + } + @Override public void sendMessage(@NotNull Component message) { requestAsync("player.sendMessage", new Document("message", MM.serialize(message))); diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/utils/ComponentUtils.java b/core-lib/src/main/java/de/kentoj/scrowlib/utils/ComponentUtils.java index 5f9ef03..a68e6b4 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/utils/ComponentUtils.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/utils/ComponentUtils.java @@ -1,21 +1,22 @@ package de.kentoj.scrowlib.utils; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.event.ClickEvent; import java.util.regex.Pattern; -@NoArgsConstructor(access = AccessLevel.NONE) public class ComponentUtils { + private static final Pattern URL_REGEX = Pattern.compile("(https?://)?[a-z0-9]+(\\.[a-z0-9]+)*(\\.[a-z0-9]{1,10})((/+)[^/ ]*)*", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private static final TextReplacementConfig REPLACER = TextReplacementConfig.builder() .match(URL_REGEX) .replacement((c) -> c.clickEvent(ClickEvent.openUrl(c.content().startsWith("http") ? c.content() : "https://" + c.content()))) .build(); + private ComponentUtils() { + } + public static Component resolveURLS(Component component) { return component.replaceText(REPLACER); diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/utils/DocumentRepository.java b/core-lib/src/main/java/de/kentoj/scrowlib/utils/DocumentRepository.java index 923154f..6551384 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/utils/DocumentRepository.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/utils/DocumentRepository.java @@ -1,13 +1,13 @@ package de.kentoj.scrowlib.utils; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; import org.bson.Document; import org.jetbrains.annotations.ApiStatus; -@NoArgsConstructor(access = AccessLevel.PRIVATE) public class DocumentRepository { + private DocumentRepository() { + } + @ApiStatus.Obsolete public static Document fromBytes(byte[] bytes) { return Document.parse(new String(bytes)); diff --git a/core-lib/src/main/java/de/kentoj/scrowlib/utils/EnvUtils.java b/core-lib/src/main/java/de/kentoj/scrowlib/utils/EnvUtils.java index bdf63c9..6a6c885 100644 --- a/core-lib/src/main/java/de/kentoj/scrowlib/utils/EnvUtils.java +++ b/core-lib/src/main/java/de/kentoj/scrowlib/utils/EnvUtils.java @@ -1,10 +1,10 @@ package de.kentoj.scrowlib.utils; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.NONE) public class EnvUtils { + + private EnvUtils() { + } + /** * @throws IllegalStateException if the var is not set */ diff --git a/core-velocity-api/build.gradle.kts b/core-velocity-api/build.gradle.kts deleted file mode 100644 index bb29a67..0000000 --- a/core-velocity-api/build.gradle.kts +++ /dev/null @@ -1,29 +0,0 @@ -plugins { - id("java") - alias(libs.plugins.scrow.publish) - alias(libs.plugins.scrow.basedependencies) - alias(libs.plugins.scrow.javalibrary) - alias(libs.plugins.scrow.database) -} - -group = "de.kentoj.scrow" - -dependencies { - api(project(":core-lib")) - - api(libs.velocity.api) - api(libs.scrow.commandapi.velocity) { - isChanging = true - } -} - -publishing { - publications { - create("ScrowVelocityApi") { - groupId = project.group.toString() - artifactId = project.name - version = project.version.toString() - from(components["java"]) - } - } -} \ No newline at end of file diff --git a/core-velocity-impl/BUILD b/core-velocity-impl/BUILD deleted file mode 100644 index 46d4e8d..0000000 --- a/core-velocity-impl/BUILD +++ /dev/null @@ -1,15 +0,0 @@ -load("@rules_java//java:java_binary.bzl", "java_binary") -load("@rules_jvm_external//:defs.bzl", "artifact") - -java_binary( - name = "core-velocity-impl", - srcs = glob(["src/main/**/*.java"]), - main_class = "none", - resources = glob(["src/main/resources/**"], allow_empty = True), - deps = [ - "//core-velocity-api", - artifact("com.velocitypowered:velocity-api"), - artifact("io.nats:jnats"), - ], - plugins = [ "//third_party:lombok_plugin" ], -) diff --git a/core-velocity-impl/build.gradle.kts b/core-velocity-impl/build.gradle.kts deleted file mode 100644 index 8777908..0000000 --- a/core-velocity-impl/build.gradle.kts +++ /dev/null @@ -1,43 +0,0 @@ -plugins { - id("java") - alias(libs.plugins.shadow) - alias(libs.plugins.scrow.basedependencies) - alias(libs.plugins.scrow.database) -} - -group = "de.kentoj.scrow" - -dependencies { - implementation(project(":core-velocity-api")) - annotationProcessor(libs.velocity.api) - implementation(libs.nats) - implementation(libs.postgres) -} - -tasks.build { - dependsOn("shadowJar") -} - -val generateBuildInfo by tasks.registering { - val outputDir = layout.buildDirectory.dir("generated/sources/buildInfo") - outputs.dir(outputDir) - doLast { - val file = outputDir.get() - .file("de/kentoj/scrow/generated/BuildInfo.java") - .asFile - file.parentFile.mkdirs() - file.writeText( - """ - package de.kentoj.scrow.generated; - public final class BuildInfo { - private BuildInfo() {} - public static final String VERSION = "${project.version}"; - } - """.trimIndent() - ) - } -} - -sourceSets.main { - java.srcDir(generateBuildInfo) -} \ No newline at end of file diff --git a/core-velocity-api/BUILD b/core-velocity/BUILD similarity index 54% rename from core-velocity-api/BUILD rename to core-velocity/BUILD index 27a81a1..eb33a9e 100644 --- a/core-velocity-api/BUILD +++ b/core-velocity/BUILD @@ -1,9 +1,10 @@ load("@rules_jvm_external//:defs.bzl", "artifact") load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_java//java:java_binary.bzl", "java_binary") java_library( - name = "core-velocity-api", - srcs = glob(["src/main/**/*.java"]), + name = "api", + srcs = glob(["api/main/**/*.java"]), visibility = ["//visibility:public"], deps = [ "//core-lib:core", @@ -17,4 +18,17 @@ java_library( artifact("org.mongodb:bson"), ], plugins = [ "//third_party:lombok_plugin" ], -) \ No newline at end of file +) + +java_binary( + name = "plugin", + srcs = glob(["plugin/main/**/*.java"]), + main_class = "none", + resources = glob(["plugin/main/resources/**"], allow_empty = True), + deps = [ + ":api", + artifact("com.velocitypowered:velocity-api"), + artifact("io.nats:jnats"), + ], + plugins = [ "//third_party:lombok_plugin" ], +) diff --git a/core-velocity-api/src/main/java/de/kentoj/scrow/velocity/ScrowAPI.java b/core-velocity/api/main/java/de/kentoj/scrow/velocity/ScrowAPI.java similarity index 100% rename from core-velocity-api/src/main/java/de/kentoj/scrow/velocity/ScrowAPI.java rename to core-velocity/api/main/java/de/kentoj/scrow/velocity/ScrowAPI.java diff --git a/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/CoreVelocityPlugin.java b/core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/CoreVelocityPlugin.java similarity index 100% rename from core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/CoreVelocityPlugin.java rename to core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/CoreVelocityPlugin.java diff --git a/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/ScrowAPISurface.java b/core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/ScrowAPISurface.java similarity index 100% rename from core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/ScrowAPISurface.java rename to core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/ScrowAPISurface.java diff --git a/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/misc/OnlineCommand.java b/core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/misc/OnlineCommand.java similarity index 100% rename from core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/misc/OnlineCommand.java rename to core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/misc/OnlineCommand.java diff --git a/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/network/FriendNotifications.java b/core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/network/FriendNotifications.java similarity index 100% rename from core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/network/FriendNotifications.java rename to core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/network/FriendNotifications.java diff --git a/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/network/SendPlayerWatchdog.java b/core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/network/SendPlayerWatchdog.java similarity index 100% rename from core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/network/SendPlayerWatchdog.java rename to core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/network/SendPlayerWatchdog.java diff --git a/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/network/ServerRegisterWatchdog.java b/core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/network/ServerRegisterWatchdog.java similarity index 100% rename from core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/network/ServerRegisterWatchdog.java rename to core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/network/ServerRegisterWatchdog.java diff --git a/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/LastTargetCache.java b/core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/privmsg/LastTargetCache.java similarity index 100% rename from core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/LastTargetCache.java rename to core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/privmsg/LastTargetCache.java diff --git a/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/MsgCommand.java b/core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/privmsg/MsgCommand.java similarity index 100% rename from core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/MsgCommand.java rename to core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/privmsg/MsgCommand.java diff --git a/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/PrivMsgHandler.java b/core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/privmsg/PrivMsgHandler.java similarity index 100% rename from core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/PrivMsgHandler.java rename to core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/privmsg/PrivMsgHandler.java diff --git a/core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/ReplyCommand.java b/core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/privmsg/ReplyCommand.java similarity index 100% rename from core-velocity-impl/src/main/java/de/kentoj/scrow/corevelocity/privmsg/ReplyCommand.java rename to core-velocity/plugin/main/java/de/kentoj/scrow/corevelocity/privmsg/ReplyCommand.java diff --git a/runDevServer.sh b/runDevServer.sh new file mode 100755 index 0000000..53497da --- /dev/null +++ b/runDevServer.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env sh +set -e + +test -n "$MC_VERSION" || { + >&2 echo "MC_VERSION unset" + exit 1 +} + +test -n "$BUILT_PLUGIN" || { + >&2 echo "BUILT_PLUGIN unset" + exit 1 +} + +BUILT_PLUGIN="$(realpath "$BUILD_WORKSPACE_DIRECTORY/$BUILT_PLUGIN")" +test -e "$BUILT_PLUGIN" || { + >&2 echo "$BUILT_PLUGIN does not exist" + exit 1 +} + +mkdir -p "$BUILD_WORKSPACE_DIRECTORY/run" +cd "$BUILD_WORKSPACE_DIRECTORY/run" +printf 'eula=true' > eula.txt + +server="paper-${MC_VERSION}.jar" +test -f "$server" || { + >&2 echo "$server not found. downloading..." + url="$(curl -Ls "https://fill.papermc.io/v3/projects/paper/versions/$MC_VERSION/builds/latest" \ + | jq -r '.downloads."server:default".url')" + curl -L -o "$server" "$url" +} + +# shellcheck disable=SC2068 +for arg in $@; do + name="$(echo "$arg" | cut -d= -f1)" + url="$(echo "$arg" | cut -d= -f2)" + plugin="plugins/$name" + test -f "$plugin" || curl -Lo "$plugin" "$url" +done + +exec java -jar "$server" \ + --nogui \ + --add-plugin "$BUILT_PLUGIN" \ No newline at end of file diff --git a/third_party/BUILD b/third_party/BUILD index 0e6cbc7..1aa921d 100644 --- a/third_party/BUILD +++ b/third_party/BUILD @@ -1,4 +1,7 @@ load("@rules_java//java:java_plugin.bzl", "java_plugin") +load("@rules_java//java:java_library.bzl", "java_library") +load("@rules_jvm_external//:defs.bzl", "artifact") + java_plugin( name = "lombok_plugin", visibility = ["//visibility:public"], @@ -6,8 +9,6 @@ java_plugin( processor_class = "lombok.launch.AnnotationProcessorHider$AnnotationProcessor", ) -load("@rules_java//java:java_library.bzl", "java_library") -load("@rules_jvm_external//:defs.bzl", "artifact") java_library( name = "common_deps", exports = [