.
This commit is contained in:
parent
6087b98705
commit
63a4f17a76
21 changed files with 484 additions and 27 deletions
|
|
@ -3,6 +3,8 @@ package de.kentoj.scrow.bukkit;
|
|||
import de.kentoj.scrow.bukkit.crown.CrownCommand;
|
||||
import de.kentoj.scrow.bukkit.economy.CoinsCommand;
|
||||
import de.kentoj.scrow.bukkit.friends.command.FriendCommand;
|
||||
import de.kentoj.scrow.bukkit.region.RegionPlayerTracker;
|
||||
import de.kentoj.scrow.bukkit.region.RegionTask;
|
||||
import de.kentoj.scrow.bukkit.server.LobbyCommand;
|
||||
import de.kentoj.scrow.bukkit.server.PlayCommand;
|
||||
import org.bukkit.Bukkit;
|
||||
|
|
@ -24,6 +26,8 @@ public class CoreImplPlugin extends JavaPlugin {
|
|||
ScrowAPI.getCommandApi().register(new LobbyCommand().getRootNode());
|
||||
}
|
||||
|
||||
new RegionTask(new RegionPlayerTracker()).runTaskTimer(this, 10, 10);
|
||||
|
||||
registerServer();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -52,7 +52,6 @@ public class ScrowAPISurface {
|
|||
new PostgresFriendRequestService(ScrowAPI.getDbConFactory()) : new InMemoryFriendRequestService());
|
||||
ScrowAPI.setFriendshipService(ScrowAPI.getDbConFactory() != null ?
|
||||
new PostgresFriendshipService(ScrowAPI.getDbConFactory()) : new InMemoryFriendshipService());
|
||||
ScrowAPI.setCommandApi(new BukkitKenCommandApi());
|
||||
}
|
||||
|
||||
public static void destroyScrowAPI() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
package de.kentoj.scrow.bukkit.region;
|
||||
|
||||
import de.kentoj.scrow.bukkit.region.impl.Region;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class RegionPlayerTracker {
|
||||
|
||||
private final Map<UUID, List<UUID>> playersInRegion = new HashMap<>();
|
||||
|
||||
public void registerInRegion(Region region, Player player) {
|
||||
playersInRegion.computeIfAbsent(region.getUuid(), __ -> new ArrayList<>())
|
||||
.add(player.getUniqueId());
|
||||
}
|
||||
|
||||
public void unregisterInRegion(Region region, Player player) {
|
||||
var uuids = playersInRegion.get(region.getUuid());
|
||||
if (uuids == null) return;
|
||||
uuids.remove(player.getUniqueId());
|
||||
}
|
||||
|
||||
public boolean isInRegion(Region region, Player player) {
|
||||
var uuids = playersInRegion.get(region.getUuid());
|
||||
if (uuids == null) return false;
|
||||
return uuids.contains(player.getUniqueId());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package de.kentoj.scrow.bukkit.region;
|
||||
|
||||
import de.kentoj.scrow.bukkit.ScrowAPI;
|
||||
import de.kentoj.scrow.bukkit.region.event.RegionJoinEvent;
|
||||
import de.kentoj.scrow.bukkit.region.event.RegionLeaveEvent;
|
||||
import de.kentoj.scrow.bukkit.region.impl.Region;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class RegionTask extends BukkitRunnable {
|
||||
|
||||
private final RegionPlayerTracker playerTracker;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for (var player : Bukkit.getOnlinePlayers()) {
|
||||
var regions = ScrowAPI.getRegionManager().getRegions(ChunkPos.fromChunk(player.getLocation().getChunk()));
|
||||
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);
|
||||
} else if (tracked && !inside) {
|
||||
var ev = new RegionLeaveEvent(region, player);
|
||||
Bukkit.getPluginManager().callEvent(ev);
|
||||
if (!ev.isCancelled())
|
||||
playerTracker.unregisterInRegion(region, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue