.
This commit is contained in:
parent
63a4f17a76
commit
e9cd803e99
7 changed files with 134 additions and 66 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue