Fixed User not saving to plan_user_info on BungeeCord setups when user has joined one server and joins another, Leading to players not appearing on playerlist of the second server #351

This commit is contained in:
Rsl1122 2017-10-29 10:52:35 +02:00
parent 54a9551a9c
commit 0864cbae84
5 changed files with 16 additions and 14 deletions

View File

@ -27,6 +27,7 @@ public class UserInfo {
this.registered = registered;
this.opped = opped;
this.banned = banned;
lastSeen = 0L;
}
public UUID getUuid() {

View File

@ -49,12 +49,12 @@ public class RegisterProcessor extends PlayerProcessor {
if (!usersTable.isRegistered(uuid)) {
usersTable.registerUser(uuid, registered, name);
}
if (db.getActionsTable().getActions(uuid).size() > 0) {
return;
}
if (!userInfoTable.isRegistered(uuid)) {
userInfoTable.registerUserInfo(uuid, registered);
}
if (db.getActionsTable().getActions(uuid).size() > 0) {
return;
}
plugin.getDataCache().markFirstSession(uuid);
db.getActionsTable().insertAction(uuid, new Action(time, Actions.FIRST_SESSION, "Online: " + playersOnline + " Players"));
} catch (SQLException e) {

View File

@ -261,17 +261,12 @@ public class Analysis {
}
}
Map<UUID, UserInfo> mappedUserInfo = new HashMap<>();
userInfo.forEach(u -> mappedUserInfo.put(u.getUuid(), u));
Map<UUID, Long> lastSeen = db.getSessionsTable().getLastSeenForAllPlayers();
for (Map.Entry<UUID, Long> entry : lastSeen.entrySet()) {
UserInfo user = mappedUserInfo.get(entry.getKey());
if (user == null) {
continue;
}
user.setLastSeen(entry.getValue());
for (UserInfo info : userInfo) {
Long userLastSeen = lastSeen.getOrDefault(info.getUuid(), 0L);
info.setLastSeen(userLastSeen);
}
userInfo.sort(new UserInfoLastPlayedComparator());
activity.setRecentPlayersUUIDs(userInfo.stream().map(UserInfo::getUuid).collect(Collectors.toList()));
@ -279,7 +274,7 @@ public class Analysis {
playerCount.addPlayers(userInfo.stream().map(UserInfo::getUuid).collect(Collectors.toSet()));
Map<UUID, Long> registered = mappedUserInfo.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getRegistered()));
Map<UUID, Long> registered = userInfo.stream().collect(Collectors.toMap(UserInfo::getUuid, UserInfo::getRegistered));
joinInfo.addRegistered(registered);
activity.addBans(userInfo.stream().filter(UserInfo::isBanned).map(UserInfo::getUuid).collect(Collectors.toSet()));

View File

@ -437,6 +437,11 @@ public class DatabaseTest {
assertNull(sessions.get(worlds.get(1)));
assertEquals(session, savedSessions.get(0));
Map<UUID, Long> lastSeen = sessionsTable.getLastSeenForAllPlayers();
assertTrue(lastSeen.containsKey(uuid));
assertFalse(lastSeen.containsKey(uuid2));
assertEquals(22345L, (long) lastSeen.get(uuid));
}
@Test

View File

@ -67,9 +67,10 @@ public class ComparatorTest {
longValues.sort(Long::compare);
Collections.reverse(longValues);
System.out.println(longValues);
userInfo.sort(new UserInfoLastPlayedComparator());
List<Long> afterSort = userInfo.stream().map(UserInfo::getLastSeen).collect(Collectors.toList());
System.out.println(afterSort);
assertEquals(longValues, afterSort);
}