Use UUID object instead of String for PlayerStatus and FriendStatus, as well as update CommunityJoinRequestInfo on a task

This commit is contained in:
AlexTheCoder 2016-12-23 18:34:52 -05:00
parent 74a6071d4e
commit 35a9eabf74
8 changed files with 71 additions and 38 deletions

View File

@ -60,7 +60,7 @@ public class PlayerTracker implements Listener
{ {
public void run() public void run()
{ {
PlayerStatus snapshot = new PlayerStatus(event.getPlayer().getUniqueId().toString(), event.getPlayer().getName(), event.getServer().getInfo().getName()); PlayerStatus snapshot = new PlayerStatus(event.getPlayer().getUniqueId(), event.getPlayer().getName(), event.getServer().getInfo().getName());
_repository.addElement(snapshot, DEFAULT_STATUS_TIMEOUT); _repository.addElement(snapshot, DEFAULT_STATUS_TIMEOUT);
} }
}); });

View File

@ -85,6 +85,8 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
private volatile boolean _cycling = false; private volatile boolean _cycling = false;
private volatile boolean _updateJoinRequests = false;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public CommunityManager(JavaPlugin plugin, CoreClientManager clientManager) public CommunityManager(JavaPlugin plugin, CoreClientManager clientManager)
{ {
@ -140,6 +142,11 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
LinkedList<Community> communities = new LinkedList<>(); LinkedList<Community> communities = new LinkedList<>();
_loadedCommunities.values().forEach(community -> communities.add(community)); _loadedCommunities.values().forEach(community -> communities.add(community));
_repo.updateMembers(communities); _repo.updateMembers(communities);
if (_updateJoinRequests)
{
_repo.updateJoinRequests(communities);
}
_updateJoinRequests = !_updateJoinRequests;
}, 0L, 20 * 7); }, 0L, 20 * 7);
Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () -> Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () ->

View File

@ -220,7 +220,7 @@ public class CommunityRepository extends MinecraftRepository
online = true; online = true;
server = status.getServer(); server = status.getServer();
info.update(System.currentTimeMillis(), online, server); info.update(System.currentTimeMillis(), online, server);
if (!info.Name.equalsIgnoreCase(status.getName())) if (!info.Name.equals(status.getName()))
{ {
info.updateName(status.getName()); info.updateName(status.getName());
} }
@ -236,6 +236,28 @@ public class CommunityRepository extends MinecraftRepository
} }
} }
public void updateJoinRequests(LinkedList<Community> communities)
{
if (communities.isEmpty())
{
return;
}
for (Community c : communities)
{
for (CommunityJoinRequestInfo info : c.getJoinRequests().values())
{
PlayerStatus status = _repo.getElement(info.UUID.toString());
if (status != null)
{
if (!info.Name.equals(status.getName()))
{
info.update(status.getName());
}
}
}
}
}
public void loadInvites(int accountId, List<Integer> invites) public void loadInvites(int accountId, List<Integer> invites)
{ {
executeQuery("SELECT ci.communityId, c.region FROM communityInvites AS ci INNER JOIN communities AS c ON c.id=ci.communityId WHERE accountId=?;", resultSet -> executeQuery("SELECT ci.communityId, c.region FROM communityInvites AS ci INNER JOIN communities AS c ON c.id=ci.communityId WHERE accountId=?;", resultSet ->

View File

@ -392,8 +392,8 @@ public class PlayerDisguiseManager extends MiniPlugin implements IPacketHandler
CoreClient client = getClientManager().Get(caller); CoreClient client = getClientManager().Get(caller);
client.undisguise(); client.undisguise();
require(FriendManager.class).updatePlayerStatus(disguisedProfile.getId().toString(), null); require(FriendManager.class).updatePlayerStatus(disguisedProfile.getId(), null);
require(FriendManager.class).updatePlayerStatus(originalProfile.getId().toString(), new PlayerStatus(originalProfile.getId().toString(), originalProfile.getName(), _serverName)); require(FriendManager.class).updatePlayerStatus(originalProfile.getId(), new PlayerStatus(originalProfile.getId(), originalProfile.getName(), _serverName));
getPreferencesManager().handlePlayerJoin(caller, true); getPreferencesManager().handlePlayerJoin(caller, true);
require(ScoreboardManager.class).handlePlayerJoin(disguise.getOriginalProfile().getName()); require(ScoreboardManager.class).handlePlayerJoin(disguise.getOriginalProfile().getName());
@ -539,8 +539,8 @@ public class PlayerDisguiseManager extends MiniPlugin implements IPacketHandler
callerProfile.getProperties().removeAll(ORIGINAL_UUID_KEY); callerProfile.getProperties().removeAll(ORIGINAL_UUID_KEY);
callerProfile.getProperties().put(ORIGINAL_UUID_KEY, new Property(ORIGINAL_UUID_KEY, caller.getUniqueId().toString())); callerProfile.getProperties().put(ORIGINAL_UUID_KEY, new Property(ORIGINAL_UUID_KEY, caller.getUniqueId().toString()));
require(FriendManager.class).updatePlayerStatus(disguisePlayer.getOriginalProfile().getId().toString(), null); require(FriendManager.class).updatePlayerStatus(disguisePlayer.getOriginalProfile().getId(), null);
require(FriendManager.class).updatePlayerStatus(disguisePlayer.getProfile().getId().toString(), new PlayerStatus(disguisePlayer.getProfile().getId().toString(), requestedUsername, _serverName)); require(FriendManager.class).updatePlayerStatus(disguisePlayer.getProfile().getId(), new PlayerStatus(disguisePlayer.getProfile().getId(), requestedUsername, _serverName));
getPreferencesManager().handlePlayerJoin(caller, true); getPreferencesManager().handlePlayerJoin(caller, true);

View File

@ -1,5 +1,19 @@
package mineplex.core.friend; package mineplex.core.friend;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniDbClientPlugin; import mineplex.core.MiniDbClientPlugin;
import mineplex.core.account.CoreClientManager; import mineplex.core.account.CoreClientManager;
import mineplex.core.common.Rank; import mineplex.core.common.Rank;
@ -22,19 +36,6 @@ import mineplex.core.preferences.PreferencesManager;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.serverdata.data.PlayerStatus; import mineplex.serverdata.data.PlayerStatus;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.plugin.java.JavaPlugin;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
public class FriendManager extends MiniDbClientPlugin<FriendData> public class FriendManager extends MiniDbClientPlugin<FriendData>
{ {
@ -402,12 +403,12 @@ public class FriendManager extends MiniDbClientPlugin<FriendData>
} }
public void updatePlayerStatus(String playerUUID, PlayerStatus status) public void updatePlayerStatus(UUID playerUUID, PlayerStatus status)
{ {
_repository.updatePlayerStatus(playerUUID, status); _repository.updatePlayerStatus(playerUUID, status);
} }
public PlayerStatus getStatus(String playerUUID) public PlayerStatus getStatus(UUID playerUUID)
{ {
return _repository.getStatus(playerUUID); return _repository.getStatus(playerUUID);
} }

View File

@ -7,6 +7,7 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.UUID;
import mineplex.core.database.MinecraftRepository; import mineplex.core.database.MinecraftRepository;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -95,7 +96,7 @@ public class FriendRepository extends MinecraftRepository
friend.Name = resultSet.getString(2); friend.Name = resultSet.getString(2);
friend.Status = Enum.valueOf(FriendStatusType.class, resultSet.getString(3)); friend.Status = Enum.valueOf(FriendStatusType.class, resultSet.getString(3));
friend.LastSeenOnline = resultSet.getTimestamp(5).getTime() - resultSet.getTimestamp(4).getTime(); friend.LastSeenOnline = resultSet.getTimestamp(5).getTime() - resultSet.getTimestamp(4).getTime();
friend.UUID = resultSet.getString(6); friend.UUID = UUID.fromString(resultSet.getString(6));
if (!friends.containsKey(uuidSource)) if (!friends.containsKey(uuidSource))
friends.put(uuidSource, new FriendData()); friends.put(uuidSource, new FriendData());
@ -127,7 +128,7 @@ public class FriendRepository extends MinecraftRepository
friend.Name = resultSet.getString(1); friend.Name = resultSet.getString(1);
friend.Status = Enum.valueOf(FriendStatusType.class, resultSet.getString(2)); friend.Status = Enum.valueOf(FriendStatusType.class, resultSet.getString(2));
friend.LastSeenOnline = resultSet.getTimestamp(4).getTime() - resultSet.getTimestamp(3).getTime(); friend.LastSeenOnline = resultSet.getTimestamp(4).getTime() - resultSet.getTimestamp(3).getTime();
friend.UUID = resultSet.getString(5); friend.UUID = UUID.fromString(resultSet.getString(5));
friend.ServerName = null; friend.ServerName = null;
friend.Online = (friend.ServerName != null); friend.Online = (friend.ServerName != null);
friendData.getFriends().add(friend); friendData.getFriends().add(friend);
@ -146,17 +147,17 @@ public class FriendRepository extends MinecraftRepository
public void loadFriendStatuses(FriendData friendData) public void loadFriendStatuses(FriendData friendData)
{ {
// Generate a set of all friend names // Generate a set of all friend names
Set<String> friendUUIDS = new HashSet<String>(); Set<String> friendUUIDS = new HashSet<>();
for(FriendStatus status : friendData.getFriends()) for(FriendStatus status : friendData.getFriends())
{ {
friendUUIDS.add(status.UUID); friendUUIDS.add(status.UUID.toString());
} }
// Load PlayerStatus' for friends // Load PlayerStatus' for friends
Collection<PlayerStatus> statuses = _repository.getElements(friendUUIDS); Collection<PlayerStatus> statuses = _repository.getElements(friendUUIDS);
// Load player statuses into a mapping // Load player statuses into a mapping
Map<String, PlayerStatus> playerStatuses = new HashMap<String, PlayerStatus>(); Map<UUID, PlayerStatus> playerStatuses = new HashMap<>();
for(PlayerStatus status : statuses) for(PlayerStatus status : statuses)
{ {
playerStatuses.put(status.getUUID(), status); playerStatuses.put(status.getUUID(), status);
@ -176,14 +177,14 @@ public class FriendRepository extends MinecraftRepository
* @return the name that the player matching {@code playerName} * @return the name that the player matching {@code playerName}
* is currently online on, if they are online, null otherwise. * is currently online on, if they are online, null otherwise.
*/ */
public String fetchPlayerServer(String playerUUID) public String fetchPlayerServer(UUID playerUUID)
{ {
PlayerStatus status = _repository.getElement(playerUUID); PlayerStatus status = _repository.getElement(playerUUID.toString());
return (status == null) ? null : status.getServer(); return (status == null) ? null : status.getServer();
} }
public void updatePlayerStatus(String playerUUID, PlayerStatus status) public void updatePlayerStatus(UUID playerUUID, PlayerStatus status)
{ {
if (status != null) if (status != null)
{ {
@ -191,12 +192,12 @@ public class FriendRepository extends MinecraftRepository
} }
else else
{ {
_repository.removeElement(playerUUID); _repository.removeElement(playerUUID.toString());
} }
} }
public PlayerStatus getStatus(String playerUUID) public PlayerStatus getStatus(UUID playerUUID)
{ {
return _repository.getElement(playerUUID); return _repository.getElement(playerUUID.toString());
} }
} }

View File

@ -1,11 +1,13 @@
package mineplex.core.friend.data; package mineplex.core.friend.data;
import java.util.UUID;
import mineplex.core.friend.FriendStatusType; import mineplex.core.friend.FriendStatusType;
public class FriendStatus public class FriendStatus
{ {
public String Name; public String Name;
public String UUID; public UUID UUID;
public String ServerName; public String ServerName;
public boolean Online; public boolean Online;
/** /**

View File

@ -1,12 +1,12 @@
package mineplex.serverdata.data; package mineplex.serverdata.data;
import mineplex.serverdata.data.Data; import java.util.UUID;
public class PlayerStatus implements Data public class PlayerStatus implements Data
{ {
// The uuid of this player. // The uuid of this player.
private String _uuid; private UUID _uuid;
public String getUUID() { return _uuid; } public UUID getUUID() { return _uuid; }
// The name of this player. // The name of this player.
private String _name; private String _name;
@ -21,7 +21,7 @@ public class PlayerStatus implements Data
* @param name * @param name
* @param server * @param server
*/ */
public PlayerStatus(String uuid, String name, String server) public PlayerStatus(UUID uuid, String name, String server)
{ {
_uuid = uuid; _uuid = uuid;
_name = name; _name = name;
@ -33,6 +33,6 @@ public class PlayerStatus implements Data
*/ */
public String getDataId() public String getDataId()
{ {
return _uuid; return _uuid.toString();
} }
} }