From 24e6d8452765a907bb237ea76bc1bc042964786a Mon Sep 17 00:00:00 2001 From: HypherionMC Date: Tue, 13 Jun 2023 18:37:47 +0200 Subject: [PATCH] Fix DiscordAuthor using wrong username to retrieve avatars --- build.gradle | 2 +- gradle.properties | 2 +- .../sdlink/core/accounts/DiscordAuthor.java | 27 ++++++++++++------- .../core/accounts/MinecraftAccount.java | 11 +++++++- .../messaging/discord/DiscordMessage.java | 6 ++--- .../discord/DiscordMessageBuilder.java | 2 +- 6 files changed, 33 insertions(+), 17 deletions(-) diff --git a/build.gradle b/build.gradle index 32f661d..b49fb24 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,6 @@ repositories { maven { url "https://maven.firstdarkdev.xyz/releases" } maven { url "https://maven.firstdarkdev.xyz/snapshots" } maven { url "https://m2.dv8tion.net/releases" } - maven { url "https://nexus.velocitypowered.com/repository/maven-public/" } } dependencies { @@ -61,6 +60,7 @@ dependencies { implementation("commons-io:commons-io:${commonsio}") implementation("com.google.code.gson:gson:${gson}") implementation("com.google.guava:guava:31.1-jre") + implementation 'com.mojang:authlib:4.0.43' } shadowJar { diff --git a/gradle.properties b/gradle.properties index 45b62f0..df38841 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ version_major=0 version_minor=0 -version_patch=1 +version_patch=3 shade_group=com.hypherionmc.sdlink.shaded. diff --git a/src/main/java/com/hypherionmc/sdlink/core/accounts/DiscordAuthor.java b/src/main/java/com/hypherionmc/sdlink/core/accounts/DiscordAuthor.java index c25fba9..698c0d6 100644 --- a/src/main/java/com/hypherionmc/sdlink/core/accounts/DiscordAuthor.java +++ b/src/main/java/com/hypherionmc/sdlink/core/accounts/DiscordAuthor.java @@ -14,39 +14,46 @@ import com.hypherionmc.sdlink.core.services.SDLinkPlatform; public class DiscordAuthor { // User used for Server Messages - public static final DiscordAuthor SERVER = new DiscordAuthor(SDLinkConfig.INSTANCE.channelsAndWebhooks.serverName, SDLinkConfig.INSTANCE.channelsAndWebhooks.serverAvatar, true); + public static final DiscordAuthor SERVER = new DiscordAuthor(SDLinkConfig.INSTANCE.channelsAndWebhooks.serverName, SDLinkConfig.INSTANCE.channelsAndWebhooks.serverAvatar, "server", true); - private final String username; + private final String displayName; private final String avatar; private final boolean isServer; + private final String username; /** - * Internal. Use {@link #of(String, String)} - * @param username The Username of the Author + * Internal. Use {@link #of(String, String, String)} + * @param displayName The Username of the Author * @param avatar The avatar URL of the Author * @param isServer Is the Author the Minecraft Server */ - private DiscordAuthor(String username, String avatar, boolean isServer) { - this.username = username; + private DiscordAuthor(String displayName, String avatar, String username, boolean isServer) { + this.displayName = displayName; this.avatar = avatar; + this.username = username; this.isServer = isServer; } /** * Create a new Discord Author - * @param username The name/Username of the Author + * @param displayName The name/Username of the Author * @param uuid The Mojang UUID of the Author * @return A constructed {@link DiscordAuthor} */ - public static DiscordAuthor of(String username, String uuid) { + public static DiscordAuthor of(String displayName, String uuid, String username) { return new DiscordAuthor( - username, + displayName, SDLinkConfig.INSTANCE.chatConfig.playerAvatarType.resolve(SDLinkPlatform.minecraftHelper.isOnlineMode() ? uuid : username), + username, false ); } - public String getUsername() { + public String getDisplayName() { + return displayName; + } + + public String getRawUsername() { return username; } diff --git a/src/main/java/com/hypherionmc/sdlink/core/accounts/MinecraftAccount.java b/src/main/java/com/hypherionmc/sdlink/core/accounts/MinecraftAccount.java index 4f2484e..c79f819 100644 --- a/src/main/java/com/hypherionmc/sdlink/core/accounts/MinecraftAccount.java +++ b/src/main/java/com/hypherionmc/sdlink/core/accounts/MinecraftAccount.java @@ -10,6 +10,7 @@ import com.hypherionmc.sdlink.core.discord.BotController; import com.hypherionmc.sdlink.core.managers.RoleManager; import com.hypherionmc.sdlink.core.messaging.Result; import com.hypherionmc.sdlink.core.services.SDLinkPlatform; +import com.mojang.authlib.GameProfile; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.User; @@ -78,7 +79,7 @@ public class MinecraftAccount { * Convert a username to an offline account * @param username The Username to search for */ - public static MinecraftAccount offline(String username) { + private static MinecraftAccount offline(String username) { Pair player = offlinePlayer(username); return new MinecraftAccount( player.getLeft(), @@ -88,6 +89,14 @@ public class MinecraftAccount { ); } + /** + * Convert GameProfile to Minecraft account + * @param profile The profile of the player + */ + public static MinecraftAccount fromGameProfile(GameProfile profile) { + return standard(profile.getName()); + } + public String getUsername() { return username; } diff --git a/src/main/java/com/hypherionmc/sdlink/core/messaging/discord/DiscordMessage.java b/src/main/java/com/hypherionmc/sdlink/core/messaging/discord/DiscordMessage.java index aec2463..f2f9961 100644 --- a/src/main/java/com/hypherionmc/sdlink/core/messaging/discord/DiscordMessage.java +++ b/src/main/java/com/hypherionmc/sdlink/core/messaging/discord/DiscordMessage.java @@ -70,7 +70,7 @@ public final class DiscordMessage { // Check if a webhook is configured, and use that instead if (channel.getMiddle() != null && SDLinkConfig.INSTANCE.channelsAndWebhooks.webhooks.enabled) { WebhookMessageBuilder builder = new WebhookMessageBuilder(); - builder.setUsername(this.author.getUsername()); + builder.setUsername(this.author.getDisplayName()); if (!this.author.getAvatar().isEmpty()) { builder.setAvatarUrl(this.author.getAvatar()); } @@ -99,7 +99,7 @@ public final class DiscordMessage { } else { channel.getLeft().sendMessage( this.messageType == MessageType.CHAT ? - SDLinkConfig.INSTANCE.messageFormatting.chat.replace("%player%", author.getUsername()).replace("%message%", message) + SDLinkConfig.INSTANCE.messageFormatting.chat.replace("%player%", author.getDisplayName()).replace("%message%", message) : message) .queue(success -> { if (afterSend != null) @@ -140,7 +140,7 @@ public final class DiscordMessage { if (withAuthor) { builder.setAuthor( - this.author.getUsername(), + this.author.getDisplayName(), null, this.author.getAvatar().isEmpty() ? null : this.author.getAvatar() ); diff --git a/src/main/java/com/hypherionmc/sdlink/core/messaging/discord/DiscordMessageBuilder.java b/src/main/java/com/hypherionmc/sdlink/core/messaging/discord/DiscordMessageBuilder.java index 40316eb..fa0c8d7 100644 --- a/src/main/java/com/hypherionmc/sdlink/core/messaging/discord/DiscordMessageBuilder.java +++ b/src/main/java/com/hypherionmc/sdlink/core/messaging/discord/DiscordMessageBuilder.java @@ -32,7 +32,7 @@ public final class DiscordMessageBuilder { public DiscordMessageBuilder author(DiscordAuthor author) { this.author = author; - if (author.getUsername().equalsIgnoreCase("server")) { + if (author.getRawUsername().equalsIgnoreCase("server")) { this.author = DiscordAuthor.SERVER; }