From 1c2eeec78a8ebd0963f0550d5dc85c4df043e792 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Mon, 20 Sep 2021 03:29:52 +0200 Subject: [PATCH] Add and remove roles from internal cache where needed --- .../bot/listeners/DiscordRoleListener.java | 2 ++ .../minecraft/listeners/LuckpermsEvents.java | 8 +++++- .../objects/DiscordLinkPlayer.java | 28 ++++++++++++++----- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/alttd/proxydiscordlink/bot/listeners/DiscordRoleListener.java b/src/main/java/com/alttd/proxydiscordlink/bot/listeners/DiscordRoleListener.java index 57cea51..13a70b1 100644 --- a/src/main/java/com/alttd/proxydiscordlink/bot/listeners/DiscordRoleListener.java +++ b/src/main/java/com/alttd/proxydiscordlink/bot/listeners/DiscordRoleListener.java @@ -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); } diff --git a/src/main/java/com/alttd/proxydiscordlink/minecraft/listeners/LuckpermsEvents.java b/src/main/java/com/alttd/proxydiscordlink/minecraft/listeners/LuckpermsEvents.java index 19b7c67..6519fa6 100644 --- a/src/main/java/com/alttd/proxydiscordlink/minecraft/listeners/LuckpermsEvents.java +++ b/src/main/java/com/alttd/proxydiscordlink/minecraft/listeners/LuckpermsEvents.java @@ -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); } diff --git a/src/main/java/com/alttd/proxydiscordlink/objects/DiscordLinkPlayer.java b/src/main/java/com/alttd/proxydiscordlink/objects/DiscordLinkPlayer.java index b1e264f..1104dc0 100644 --- a/src/main/java/com/alttd/proxydiscordlink/objects/DiscordLinkPlayer.java +++ b/src/main/java/com/alttd/proxydiscordlink/objects/DiscordLinkPlayer.java @@ -20,12 +20,13 @@ public class DiscordLinkPlayer { private boolean nick; private final List roleNames; - public DiscordLinkPlayer(long userId, UUID uuid, String username, String discordUsername, boolean nick, List roleNames) { + public DiscordLinkPlayer(long userId, UUID uuid, String username, String discordUsername, boolean nick, List 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; + }); } }