diff --git a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountLinkManager.java b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountLinkManager.java index 10b33d9d513..982a3756244 100644 --- a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountLinkManager.java +++ b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountLinkManager.java @@ -68,12 +68,7 @@ public UUID getUUID(final String discordId) { public boolean unlinkAccount(InteractionMember member) { Preconditions.checkNotNull(member, "member cannot be null"); - if (!isLinked(member.getId())) { - return false; - } - - removeAccount(member, DiscordLinkStatusChangeEvent.Cause.UNSYNC_API); - return true; + return isLinked(member.getId()) && removeAccount(member, DiscordLinkStatusChangeEvent.Cause.UNSYNC_API); } public boolean removeAccount(final InteractionMember member, final DiscordLinkStatusChangeEvent.Cause cause) { @@ -82,10 +77,11 @@ public boolean removeAccount(final InteractionMember member, final DiscordLinkSt ensureAsync(() -> { final IUser user = ess.getEss().getUser(uuid); ensureSync(() -> ess.getServer().getPluginManager().callEvent(new DiscordLinkStatusChangeEvent(user, member, member.getId(), false, cause))); + + roleSyncManager.unSync(uuid, member.getId()); }); return true; } - ensureAsync(() -> roleSyncManager.unSync(uuid, member.getId())); return false; } @@ -106,9 +102,10 @@ public boolean removeAccount(final IUser user, final DiscordLinkStatusChangeEven if (storage.remove(user.getBase().getUniqueId())) { ess.getApi().getMemberById(id).thenAccept(member -> ensureSync(() -> ess.getServer().getPluginManager().callEvent(new DiscordLinkStatusChangeEvent(user, member, id, false, cause)))); + + ensureAsync(() -> roleSyncManager.unSync(user.getBase().getUniqueId(), id)); return true; } - ensureAsync(() -> roleSyncManager.unSync(user.getBase().getUniqueId(), id)); return false; } diff --git a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountStorage.java b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountStorage.java index 68bf0552ad2..f7d95b582be 100644 --- a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountStorage.java +++ b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountStorage.java @@ -39,7 +39,6 @@ public AccountStorage(final EssentialsDiscordLink plugin) throws IOException { throw new IOException("Unable to create account file!"); } try (final Reader reader = new FileReader(accountFile)) { - //noinspection UnstableApiUsage final Map map = gson.fromJson(reader, new TypeToken>() {}.getType()); uuidToDiscordIdMap = map == null ? Maps.synchronizedBiMap(HashBiMap.create()) : Maps.synchronizedBiMap(HashBiMap.create(map)); } @@ -74,15 +73,19 @@ public void add(final UUID uuid, final String discordId) { } public boolean remove(final UUID uuid) { - final boolean success = uuidToDiscordIdMap.remove(uuid.toString()) != null; - queueSave(); - return success; + if (uuidToDiscordIdMap.remove(uuid.toString()) != null) { + queueSave(); + return true; + } + return false; } public boolean remove(final String discordId) { - final boolean success = uuidToDiscordIdMap.values().removeIf(discordId::equals); - queueSave(); - return success; + if (uuidToDiscordIdMap.values().removeIf(discordId::equals)) { + queueSave(); + return true; + } + return false; } public UUID getUUID(final String discordId) { diff --git a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/listeners/LinkBukkitListener.java b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/listeners/LinkBukkitListener.java index 4ea071ff67e..10651d90769 100644 --- a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/listeners/LinkBukkitListener.java +++ b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/listeners/LinkBukkitListener.java @@ -138,20 +138,21 @@ public void onDiscordMessage(final DiscordMessageEvent event) { @EventHandler public void onUserLinkStatusChange(final DiscordLinkStatusChangeEvent event) { - if (event.isLinked()) { + if (event.isLinked() || ess.getSettings().getLinkPolicy() == DiscordLinkSettings.LinkPolicy.NONE) { event.getUser().setFreeze(false); return; } + String code; + try { + code = ess.getLinkManager().createCode(event.getUser().getBase().getUniqueId()); + } catch (IllegalArgumentException e) { + code = e.getMessage(); + } + final String finalCode = code; + switch (ess.getSettings().getLinkPolicy()) { case KICK: { - String code; - try { - code = ess.getLinkManager().createCode(event.getUser().getBase().getUniqueId()); - } catch (IllegalArgumentException e) { - code = e.getMessage(); - } - final String finalCode = code; final Runnable kickTask = () -> event.getUser().getBase().kickPlayer(tl("discordLinkLoginKick", "/link " + finalCode, ess.getApi().getInviteUrl())); if (Bukkit.isPrimaryThread()) { kickTask.run(); @@ -161,18 +162,12 @@ public void onUserLinkStatusChange(final DiscordLinkStatusChangeEvent event) { break; } case FREEZE: { - String code; - try { - code = ess.getLinkManager().createCode(event.getUser().getBase().getUniqueId()); - } catch (IllegalArgumentException e) { - code = e.getMessage(); - } event.getUser().sendMessage(tl("discordLinkLoginPrompt", "/link " + code, ess.getApi().getInviteUrl())); event.getUser().setFreeze(true); break; } default: { - break; + throw new IllegalStateException(); } } }