This commit is contained in:
kento2 2026-06-28 21:01:09 +02:00
parent 63a4f17a76
commit e9cd803e99
7 changed files with 134 additions and 66 deletions

View file

@ -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;
}
}

View file

@ -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<Region> getRegions(ChunkPos chunkPos);
private final Map<Long, List<UUID>> chunkIndex = new HashMap<>();
private final Map<UUID, Region> regions = new HashMap<>();
void registerRegion(Region region);
public List<Region> 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);
}

View file

@ -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;