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