Add and remove roles from internal cache where needed

This commit is contained in:
Teriuihi 2021-09-20 03:29:52 +02:00
parent 8b42cfea43
commit 1c2eeec78a
3 changed files with 30 additions and 8 deletions

View File

@ -50,6 +50,7 @@ public class DiscordRoleListener extends ListenerAdapter {
discordLinkPlayer.updateMinecraft(added_roles, true);
added_roles.forEach(discordRole -> {
discordLinkPlayer.addRole(discordRole.getInternalName());
if (!discordRole.getAnnouncement().isEmpty()) {
Component component = miniMessage.parse(
discordRole.getAnnouncement(),
@ -83,6 +84,7 @@ public class DiscordRoleListener extends ListenerAdapter {
return;
}
removed_roles.forEach(role -> discordLinkPlayer.removeRole(role.getInternalName()));
discordLinkPlayer.updateMinecraft(removed_roles, false);
DiscordLink.getPlugin().getDatabase().syncRoles(discordLinkPlayer);
}

View File

@ -41,7 +41,13 @@ public class LuckpermsEvents {
if (discordLinkPlayer == null)
return;
discordLinkPlayer.updateDiscord(List.of(optional.get()), added);
DiscordRole discordRole = optional.get();
if (added)
discordLinkPlayer.addRole(discordRole.getInternalName());
else
discordLinkPlayer.removeRole(discordRole.getInternalName());
discordLinkPlayer.updateDiscord(List.of(discordRole), added);
DiscordLink.getPlugin().getDatabase().syncRoles(discordLinkPlayer);
}

View File

@ -20,12 +20,13 @@ public class DiscordLinkPlayer {
private boolean nick;
private final List<String> roleNames;
public DiscordLinkPlayer(long userId, UUID uuid, String username, String discordUsername, boolean nick, List<String> roleNames) {
public DiscordLinkPlayer(long userId, UUID uuid, String username, String discordUsername, boolean nick, List<String> roleNames) {//TODO what is nick used for? and where is it stored
this.userId = userId;
this.uuid = uuid;
this.username = username;
this.roleNames = roleNames;
this.discordUsername = discordUsername;
this.nick = nick;
}
public long getUserId() {
@ -48,6 +49,15 @@ public class DiscordLinkPlayer {
return roleNames;
}
public void addRole(String role) {
if (!roleNames.contains(role))
roleNames.add(role);
}
public void removeRole(String role) {
roleNames.remove(role);
}
public String getDiscordUsername() {
return discordUsername;
}
@ -106,21 +116,25 @@ public class DiscordLinkPlayer {
discordLinkPlayers.add(discordLinkPlayer);
}
public static void removeDiscordLinkPlayer(DiscordLinkPlayer discordLinkPlayer) {
discordLinkPlayers.remove(discordLinkPlayer);
}
public static DiscordLinkPlayer getDiscordLinkPlayer(long userId) {
return discordLinkPlayers.stream()
.filter(discordLinkPlayer -> discordLinkPlayer.getUserId() == userId)
.findFirst()
.orElseGet(() -> DiscordLink.getPlugin().getDatabase().getPlayer(userId));
.orElseGet(() -> {
DiscordLinkPlayer player = DiscordLink.getPlugin().getDatabase().getPlayer(userId);
DiscordLinkPlayer.addDiscordLinkPlayer(player);
return player;
});
}
public static DiscordLinkPlayer getDiscordLinkPlayer(UUID uuid) {
return discordLinkPlayers.stream()
.filter(o1 -> o1.getUuid().equals(uuid))
.findFirst()
.orElseGet(() -> DiscordLink.getPlugin().getDatabase().getPlayer(uuid));
.orElseGet(() -> {
DiscordLinkPlayer player = DiscordLink.getPlugin().getDatabase().getPlayer(uuid);
DiscordLinkPlayer.addDiscordLinkPlayer(player);
return player;
});
}
}