Cache bending players for 30 seconds after disconnect

This commit is contained in:
jayoevans 2019-10-23 19:25:09 +10:00
parent 29f6056b1c
commit 00093af01b

View file

@ -11,13 +11,18 @@ import org.bukkit.event.player.PlayerQuitEvent;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
public class BendingPlayerManager extends DatabaseModule<BendingPlayerRepository> public class BendingPlayerManager extends DatabaseModule<BendingPlayerRepository>
{ {
private final Map<UUID, BendingPlayer> _players = new HashMap<>(); private final Map<UUID, BendingPlayer> _players = new HashMap<>();
private final Set<UUID> _disconnected = new HashSet<>();
private final long _databaseSyncInterval = 20 * 30;
private BendingPlayerManager() private BendingPlayerManager()
{ {
super("Bending Player", new BendingPlayerRepository()); super("Bending Player", new BendingPlayerRepository());
@ -38,11 +43,22 @@ public class BendingPlayerManager extends DatabaseModule<BendingPlayerRepository
e.printStackTrace(); e.printStackTrace();
} }
}); });
runTimer(() ->
{
_disconnected.forEach(_players::remove);
_disconnected.clear();
}, _databaseSyncInterval, _databaseSyncInterval);
} }
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onLogin(PlayerLoginEvent event) public void onLogin(PlayerLoginEvent event)
{ {
if (_disconnected.remove(event.getPlayer().getUniqueId()))
{
return;
}
runAsync(() -> runAsync(() ->
{ {
loadBendingPlayer(event.getPlayer()); loadBendingPlayer(event.getPlayer());
@ -52,8 +68,7 @@ public class BendingPlayerManager extends DatabaseModule<BendingPlayerRepository
@EventHandler @EventHandler
public void onQuit(PlayerQuitEvent event) public void onQuit(PlayerQuitEvent event)
{ {
// TODO Queue disconnected players and execute in a batch _disconnected.add(event.getPlayer().getUniqueId());
_players.remove(event.getPlayer().getUniqueId());
} }
@EventHandler @EventHandler