diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index affa795..a4fe9da 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,27 +4,14 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
+
+
-
+
@@ -70,22 +57,14 @@
-
-
-
-
-
-
-
-
-
+
@@ -120,6 +99,7 @@
+
@@ -145,6 +125,8 @@
"Gradle.core [build].executor": "Run",
"Gradle.core [clean].executor": "Run",
"Gradle.core [publishAllPublicationsToScrowRepository].executor": "Run",
+ "Gradle.core:core-bukkit-api [build].executor": "Run",
+ "Gradle.core:core-bukkit-api [clean].executor": "Run",
"ModuleVcsDetector.initialDetectionPerformed": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
@@ -162,6 +144,9 @@
+
+
+
@@ -238,6 +223,50 @@
false
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
@@ -252,8 +281,10 @@
-
+
+
+
@@ -265,6 +296,19 @@
1782581947132
+
+
+ 1782666067624
+
+
+
+ 1782666067624
+
+
+
+
+
+
\ 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/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java
index bad5d00..775f6fd 100644
--- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java
+++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/ScrowAPI.java
@@ -32,7 +32,7 @@ public class ScrowAPI {
@Getter
private static ServerManager serverManager;
@Getter
- private static final RegionManager regionManager = new RegionManager();
+ private static RegionManager regionManager;
@Getter
private static final BukkitKenCommandApi commandApi = new BukkitKenCommandApi();
@@ -70,5 +70,10 @@ public class ScrowAPI {
public static void setDbConFactory(@Nullable DatabaseConnectionFactory dbConFactory) {
ScrowAPI.dbConFactory = dbConFactory;
}
+
+ @ApiStatus.Internal
+ public static void setRegionManager(RegionManager regionManager) {
+ ScrowAPI.regionManager = regionManager;
+ }
}
diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/RegionManager.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/RegionManager.java
index 95a9c83..ed3ee25 100644
--- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/RegionManager.java
+++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/RegionManager.java
@@ -2,41 +2,12 @@ package de.kentoj.scrow.bukkit.region;
import de.kentoj.scrow.bukkit.region.impl.Region;
-import java.util.*;
+import java.util.List;
-public class RegionManager {
+public interface RegionManager {
+ List getRegions(ChunkPos chunkPos);
- private final Map> chunkIndex = new HashMap<>();
- private final Map regions = new HashMap<>();
+ void registerRegion(Region region);
- public List getRegions(ChunkPos chunkPos) {
- long key = toKey(chunkPos.getX(), chunkPos.getZ());
- var uuids = chunkIndex.get(key);
- if (uuids == null) return Collections.emptyList();
- return uuids.stream().map(regions::get).toList();
- }
-
- public void registerRegion(Region region) {
- for (ChunkPos chunkPos : region.getChunks()) {
- var key = toKey(chunkPos.getX(), chunkPos.getZ());
- chunkIndex.computeIfAbsent(key, __ -> new ArrayList<>())
- .add(region.getUuid());
- }
- regions.put(region.getUuid(), region);
- }
-
- public void unregisterRegion(Region region) {
- for (ChunkPos chunkPos : region.getChunks()) {
- var key = toKey(chunkPos.getX(), chunkPos.getZ());
- var list = chunkIndex.get(key);
- if (list == null) return;
- list.remove(region.getUuid());
- }
- regions.remove(region.getUuid());
- }
-
- public long toKey(int x, int z) {
- // chatgpt
- return (((long) x) << 32) ^ (z & 0xffffffffL);
- }
+ void unregisterRegion(Region region);
}
diff --git a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionJoinEvent.java b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionJoinEvent.java
index 8356425..d724628 100644
--- a/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionJoinEvent.java
+++ b/core-bukkit-api/src/main/java/de/kentoj/scrow/bukkit/region/event/RegionJoinEvent.java
@@ -3,7 +3,6 @@ package de.kentoj.scrow.bukkit.region.event;
import de.kentoj.scrow.bukkit.region.impl.Region;
import lombok.Getter;
import lombok.Setter;
-import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java
index 648a1e7..fc35278 100644
--- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java
+++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/ScrowAPISurface.java
@@ -7,6 +7,7 @@ import de.kentoj.scrow.bukkit.friends.friendship.InMemoryFriendshipService;
import de.kentoj.scrow.bukkit.friends.friendship.PostgresFriendshipService;
import de.kentoj.scrow.bukkit.friends.request.InMemoryFriendRequestService;
import de.kentoj.scrow.bukkit.friends.request.PostgresFriendRequestService;
+import de.kentoj.scrow.bukkit.region.RegionManagerImpl;
import de.kentoj.scrowlib.connection.DatabaseConnectionFactoryImpl;
import de.kentoj.scrowlib.servermanager.ServerManagerImpl;
import io.nats.client.Nats;
@@ -45,6 +46,7 @@ public class ScrowAPISurface {
ScrowAPI.setDbConFactory(new DatabaseConnectionFactoryImpl(factory));
}
+ ScrowAPI.setRegionManager(new RegionManagerImpl());
ScrowAPI.setServerManager(new ServerManagerImpl(ScrowAPI.getNats()));
ScrowAPI.setEconomyService(ScrowAPI.getDbConFactory() != null ?
new PostgresEconomyService(ScrowAPI.getDbConFactory()) : new InMemoryEconomyService());
diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/region/RegionManagerImpl.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/region/RegionManagerImpl.java
new file mode 100644
index 0000000..189f956
--- /dev/null
+++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/region/RegionManagerImpl.java
@@ -0,0 +1,45 @@
+package de.kentoj.scrow.bukkit.region;
+
+import de.kentoj.scrow.bukkit.region.impl.Region;
+
+import java.util.*;
+
+public class RegionManagerImpl implements RegionManager {
+
+ private final Map> chunkIndex = new HashMap<>();
+ private final Map regions = new HashMap<>();
+
+ @Override
+ public List getRegions(ChunkPos chunkPos) {
+ long key = toKey(chunkPos.getX(), chunkPos.getZ());
+ var uuids = chunkIndex.get(key);
+ if (uuids == null) return Collections.emptyList();
+ return uuids.stream().map(regions::get).toList();
+ }
+
+ @Override
+ public void registerRegion(Region region) {
+ for (ChunkPos chunkPos : region.getChunks()) {
+ var key = toKey(chunkPos.getX(), chunkPos.getZ());
+ chunkIndex.computeIfAbsent(key, __ -> new ArrayList<>())
+ .add(region.getUuid());
+ }
+ regions.put(region.getUuid(), region);
+ }
+
+ @Override
+ public void unregisterRegion(Region region) {
+ for (ChunkPos chunkPos : region.getChunks()) {
+ var key = toKey(chunkPos.getX(), chunkPos.getZ());
+ var list = chunkIndex.get(key);
+ if (list == null) return;
+ list.remove(region.getUuid());
+ }
+ regions.remove(region.getUuid());
+ }
+
+ public long toKey(int x, int z) {
+ // chatgpt
+ return (((long) x) << 32) ^ (z & 0xffffffffL);
+ }
+}
diff --git a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/region/RegionTask.java b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/region/RegionTask.java
index 3a228cf..57ddbea 100644
--- a/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/region/RegionTask.java
+++ b/core-bukkit-impl/src/main/java/de/kentoj/scrow/bukkit/region/RegionTask.java
@@ -16,14 +16,16 @@ public class RegionTask extends BukkitRunnable {
@Override
public void run() {
for (var player : Bukkit.getOnlinePlayers()) {
- var regions = ScrowAPI.getRegionManager().getRegions(ChunkPos.fromChunk(player.getLocation().getChunk()));
+ var regions = ScrowAPI.getREGION_MANAGER_IMPL().getRegions(ChunkPos.fromChunk(player.getLocation().getChunk()));
+ Bukkit.broadcastMessage(player.getName() + " is near " + regions.size() + " regions");
for (Region region : regions) {
var tracked = playerTracker.isInRegion(region, player);
var inside = region.isInRegion(player.getLocation());
if (!tracked && inside) {
var ev = new RegionJoinEvent(region, player);
Bukkit.getPluginManager().callEvent(ev);
- if (!ev.isCancelled()) playerTracker.registerInRegion(region, player);
+ if (!ev.isCancelled())
+ playerTracker.registerInRegion(region, player);
} else if (tracked && !inside) {
var ev = new RegionLeaveEvent(region, player);
Bukkit.getPluginManager().callEvent(ev);