From d7e59af1e3be19f376c1781c5c9d02ef618357c4 Mon Sep 17 00:00:00 2001 From: FlorianMichael Date: Tue, 16 Jul 2024 20:40:44 +0200 Subject: [PATCH] Put bedrock login process messages into translations, various cleanups --- .../MixinClasses.java | 2 +- .../MixinDefaultJwtParserBuilder.java | 2 +- .../ViaFabricPlusOldAuthProvider.java | 2 +- .../screen/base/ReportIssuesScreen.java | 45 ++++++++++--------- .../settings/impl/BedrockSettings.java | 44 +++++++++++------- .../assets/viafabricplus/lang/de_de.json | 14 ++++-- .../assets/viafabricplus/lang/en_us.json | 14 ++++-- src/main/resources/viafabricplus.mixins.json | 4 +- 8 files changed, 77 insertions(+), 50 deletions(-) rename src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/{jsonwebtoken => minecraftauth}/MixinClasses.java (95%) rename src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/{jsonwebtoken => minecraftauth}/MixinDefaultJwtParserBuilder.java (95%) diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/jsonwebtoken/MixinClasses.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/minecraftauth/MixinClasses.java similarity index 95% rename from src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/jsonwebtoken/MixinClasses.java rename to src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/minecraftauth/MixinClasses.java index 8932f31a..5593bc44 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/jsonwebtoken/MixinClasses.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/minecraftauth/MixinClasses.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package de.florianmichael.viafabricplus.injection.mixin.compat.jsonwebtoken; +package de.florianmichael.viafabricplus.injection.mixin.compat.minecraftauth; import io.jsonwebtoken.lang.Classes; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/jsonwebtoken/MixinDefaultJwtParserBuilder.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/minecraftauth/MixinDefaultJwtParserBuilder.java similarity index 95% rename from src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/jsonwebtoken/MixinDefaultJwtParserBuilder.java rename to src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/minecraftauth/MixinDefaultJwtParserBuilder.java index 06cf9ca5..b845623f 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/jsonwebtoken/MixinDefaultJwtParserBuilder.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/compat/minecraftauth/MixinDefaultJwtParserBuilder.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package de.florianmichael.viafabricplus.injection.mixin.compat.jsonwebtoken; +package de.florianmichael.viafabricplus.injection.mixin.compat.minecraftauth; import io.jsonwebtoken.gson.io.GsonDeserializer; import io.jsonwebtoken.impl.DefaultJwtParserBuilder; diff --git a/src/main/java/de/florianmichael/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusOldAuthProvider.java b/src/main/java/de/florianmichael/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusOldAuthProvider.java index 174b4ae0..81526351 100644 --- a/src/main/java/de/florianmichael/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusOldAuthProvider.java +++ b/src/main/java/de/florianmichael/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusOldAuthProvider.java @@ -38,7 +38,7 @@ public class ViaFabricPlusOldAuthProvider extends OldAuthProvider { final var mc = MinecraftClient.getInstance(); mc.getSessionService().joinServer(mc.getSession().getUuidOrNull(), mc.getSession().getAccessToken(), serverId); } catch (Exception e) { - user.getChannel().attr(ProtocolTranslator.CLIENT_CONNECTION_ATTRIBUTE_KEY).get().disconnect(ChatUtil.prefixText(Text.translatable("authentication.viafabricplus.failed_to_verify_session"))); + user.getChannel().attr(ProtocolTranslator.CLIENT_CONNECTION_ATTRIBUTE_KEY).get().disconnect(ChatUtil.prefixText(Text.translatable("betacraft.viafabricplus.failed_to_verify_session"))); ViaFabricPlus.global().getLogger().error("Error occurred while calling join server to verify session", e); } } diff --git a/src/main/java/de/florianmichael/viafabricplus/screen/base/ReportIssuesScreen.java b/src/main/java/de/florianmichael/viafabricplus/screen/base/ReportIssuesScreen.java index 259f08bb..9b2186ac 100644 --- a/src/main/java/de/florianmichael/viafabricplus/screen/base/ReportIssuesScreen.java +++ b/src/main/java/de/florianmichael/viafabricplus/screen/base/ReportIssuesScreen.java @@ -44,29 +44,30 @@ public class ReportIssuesScreen extends VFPScreen { public ReportIssuesScreen() { super("Report issues", true); - if (actions.isEmpty()) { - actions.put("report.viafabricplus.bug_report", () -> { - Util.getOperatingSystem().open(URI.create("https://github.com/ViaVersion/ViaFabricPlus/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml")); - this.setupSubtitle(Text.of("Opened GitHub issue page!")); - }); - actions.put("report.viafabricplus.feature_request", () -> { - Util.getOperatingSystem().open(URI.create("https://github.com/ViaVersion/ViaFabricPlus/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.yml")); - this.setupSubtitle(Text.of("Opened GitHub issue page!")); - }); - actions.put("report.viafabricplus.create_via_dump", () -> DumpUtil.postDump(client.getSession().getUuidOrNull()).whenComplete((s, throwable) -> { - if (throwable != null) { - this.setupSubtitle(Text.of("Failed to create a dump! See logs for more information.")); - ViaFabricPlus.global().getLogger().error("Failed to create a dump", throwable); - return; - } - this.setupSubtitle(Text.of("Dump created and copied to clipboard!")); - client.keyboard.setClipboard(s); - })); - actions.put("report.viafabricplus.open_logs", () -> { - Util.getOperatingSystem().open(new File(client.runDirectory, "logs") /* there is no constant for this in the game */); - this.setupSubtitle(Text.of("Logs folder opened!")); - }); + if (!actions.isEmpty()) { + return; } + actions.put("report.viafabricplus.bug_report", () -> { + Util.getOperatingSystem().open(URI.create("https://github.com/ViaVersion/ViaFabricPlus/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml")); + this.setupSubtitle(Text.of("Opened GitHub issue page!")); + }); + actions.put("report.viafabricplus.feature_request", () -> { + Util.getOperatingSystem().open(URI.create("https://github.com/ViaVersion/ViaFabricPlus/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.yml")); + this.setupSubtitle(Text.of("Opened GitHub issue page!")); + }); + actions.put("report.viafabricplus.create_via_dump", () -> DumpUtil.postDump(client.getSession().getUuidOrNull()).whenComplete((s, throwable) -> { + if (throwable != null) { + this.setupSubtitle(Text.of("Failed to create a dump! See logs for more information.")); + ViaFabricPlus.global().getLogger().error("Failed to create a dump", throwable); + return; + } + this.setupSubtitle(Text.of("Dump created and copied to clipboard!")); + client.keyboard.setClipboard(s); + })); + actions.put("report.viafabricplus.open_logs", () -> { + Util.getOperatingSystem().open(new File(client.runDirectory, "logs") /* there is no constant for this in the game */); + this.setupSubtitle(Text.of("Logs folder opened!")); + }); } @Override diff --git a/src/main/java/de/florianmichael/viafabricplus/settings/impl/BedrockSettings.java b/src/main/java/de/florianmichael/viafabricplus/settings/impl/BedrockSettings.java index bade4551..74d0f2c1 100644 --- a/src/main/java/de/florianmichael/viafabricplus/settings/impl/BedrockSettings.java +++ b/src/main/java/de/florianmichael/viafabricplus/settings/impl/BedrockSettings.java @@ -22,6 +22,7 @@ package de.florianmichael.viafabricplus.settings.impl; import com.mojang.blaze3d.systems.RenderSystem; import de.florianmichael.viafabricplus.ViaFabricPlus; import de.florianmichael.viafabricplus.injection.access.IConfirmScreen; +import de.florianmichael.viafabricplus.save.impl.AccountsSave; import de.florianmichael.viafabricplus.screen.VFPScreen; import de.florianmichael.viafabricplus.settings.base.BooleanSetting; import de.florianmichael.viafabricplus.settings.base.ButtonSetting; @@ -33,12 +34,17 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Util; import net.raphimc.minecraftauth.MinecraftAuth; +import net.raphimc.minecraftauth.step.AbstractStep; +import net.raphimc.minecraftauth.step.bedrock.StepMCChain; +import net.raphimc.minecraftauth.step.bedrock.StepPlayFabToken; import net.raphimc.minecraftauth.step.msa.StepMsaDeviceCode; +import net.raphimc.minecraftauth.step.msa.StepMsaDeviceCodeMsaCode; +import net.raphimc.minecraftauth.step.xbl.StepXblDeviceToken; +import net.raphimc.minecraftauth.step.xbl.StepXblSisuAuthentication; +import net.raphimc.minecraftauth.step.xbl.StepXblXstsToken; import net.raphimc.minecraftauth.util.logging.ConsoleLogger; import net.raphimc.minecraftauth.util.logging.ILogger; -import java.net.URI; -import java.net.URISyntaxException; import java.util.concurrent.CompletableFuture; public class BedrockSettings extends SettingGroup { @@ -47,7 +53,7 @@ public class BedrockSettings extends SettingGroup { private static final BedrockSettings INSTANCE = new BedrockSettings(); - private final ButtonSetting _IGNORED = new ButtonSetting(this, Text.translatable("bedrock_settings.viafabricplus.click_to_set_bedrock_account"), () -> CompletableFuture.runAsync(this::openBedrockAccountLogin)) { + private final ButtonSetting clickToSetBedrockAccount = new ButtonSetting(this, Text.translatable("bedrock_settings.viafabricplus.click_to_set_bedrock_account"), () -> CompletableFuture.runAsync(this::openBedrockAccountLogin)) { @Override public MutableText displayValue() { @@ -63,14 +69,14 @@ public class BedrockSettings extends SettingGroup { private final ILogger GUI_LOGGER = new ConsoleLogger() { @Override - public void info(String message) { - super.info(message); - if (message.equals("Waiting for MSA login via device code...")) { + public void info(AbstractStep step, String message) { + super.info(step, message); + if (step instanceof StepMsaDeviceCodeMsaCode) { return; } MinecraftClient.getInstance().execute(() -> { if (MinecraftClient.getInstance().currentScreen instanceof ConfirmScreen confirmScreen) { - ((IConfirmScreen) confirmScreen).viaFabricPlus$setMessage(Text.literal(message)); + ((IConfirmScreen) confirmScreen).viaFabricPlus$setMessage(Text.translatable(translationKey(step))); } }); } @@ -81,10 +87,12 @@ public class BedrockSettings extends SettingGroup { } private void openBedrockAccountLogin() { + final AccountsSave accountsSave = ViaFabricPlus.global().getSaveManager().getAccountsSave(); + final MinecraftClient client = MinecraftClient.getInstance(); final Screen prevScreen = client.currentScreen; try { - ViaFabricPlus.global().getSaveManager().getAccountsSave().setBedrockAccount(MinecraftAuth.BEDROCK_DEVICE_CODE_LOGIN.getFromInput(GUI_LOGGER, MinecraftAuth.createHttpClient(), new StepMsaDeviceCode.MsaDeviceCodeCallback(msaDeviceCode -> { + accountsSave.setBedrockAccount(MinecraftAuth.BEDROCK_DEVICE_CODE_LOGIN.getFromInput(GUI_LOGGER, MinecraftAuth.createHttpClient(), new StepMsaDeviceCode.MsaDeviceCodeCallback(msaDeviceCode -> { client.execute(() -> client.setScreen(new ConfirmScreen(copyUrl -> { if (copyUrl) { client.keyboard.setClipboard(msaDeviceCode.getDirectVerificationUri()); @@ -92,13 +100,8 @@ public class BedrockSettings extends SettingGroup { client.setScreen(prevScreen); Thread.currentThread().interrupt(); } - }, TITLE, Text.translatable("bedrock.viafabricplus.login"), Text.translatable("base.viafabricplus.copy_link"), Text.translatable("base.viafabricplus.cancel")))); - try { - Util.getOperatingSystem().open(new URI(msaDeviceCode.getDirectVerificationUri())); - } catch (URISyntaxException e) { - Thread.currentThread().interrupt(); - VFPScreen.showErrorScreen("Microsoft Bedrock Login", e, prevScreen); - } + }, TITLE, Text.translatable("bedrock_settings.viafabricplus.click_to_set_bedrock_account.notice"), Text.translatable("base.viafabricplus.copy_link"), Text.translatable("base.viafabricplus.cancel")))); + Util.getOperatingSystem().open(msaDeviceCode.getDirectVerificationUri()); }))); RenderSystem.recordRenderCall(() -> client.setScreen(prevScreen)); @@ -108,6 +111,17 @@ public class BedrockSettings extends SettingGroup { } } + private String translationKey(final AbstractStep step) { + return "minecraftauth_library.viafabricplus." + switch (step) { + case StepXblDeviceToken stepXblDeviceToken -> "authenticate_xbox_live"; + case StepXblSisuAuthentication stepXblSisuAuthentication -> "authenticate_sisu"; + case StepMCChain stepMCChain -> "authenticate_minecraft"; + case StepXblXstsToken stepXblXstsToken -> "requesting_xsts_token"; + case StepPlayFabToken stepPlayFabToken -> "authenticate_playfab"; + case null, default -> throw new IllegalArgumentException("Unknown step: " + step); + }; + } + public static BedrockSettings global() { return INSTANCE; } diff --git a/src/main/resources/assets/viafabricplus/lang/de_de.json b/src/main/resources/assets/viafabricplus/lang/de_de.json index a9e2dd1d..2946d44c 100644 --- a/src/main/resources/assets/viafabricplus/lang/de_de.json +++ b/src/main/resources/assets/viafabricplus/lang/de_de.json @@ -46,6 +46,7 @@ "general_settings.viafabricplus.emulate_inventory_actions_in_alpha_versions": "Inventaraktionen in Alpha-Versionen emulieren", "bedrock_settings.viafabricplus.click_to_set_bedrock_account": "Klicke, um den Account für die Bedrock-Edition einzustellen", + "bedrock_settings.viafabricplus.click_to_set_bedrock_account.notice": "Dein Browser sollte sich geöffnet haben.\nDas Schließen dieses Bildschirms unterbricht den Vorgang!", "bedrock_settings.viafabricplus.replace_default_port": "Standardport in der Serverliste ersetzen", "debug_settings.viafabricplus.queue_config_packets": "Konfigurationspakete in Warteschlange einreihen", @@ -90,9 +91,6 @@ "visual_settings.viafabricplus.hide_crafting_recipe_book": "Bastelrezeptbuch verstecken", "visual_settings.viafabricplus.hide_modern_jigsaw_screen_features": "Moderne Puzzle-Funktionen ausblenden", - "bedrock.viafabricplus.login": "Dein Browser sollte sich geöffnet haben.\nDas Schließen dieses Bildschirms unterbricht den Vorgang!", - "authentication.viafabricplus.failed_to_verify_session": "ViaFabricPlus konnte deine Sitzung nicht verifizieren! Bitte logge dich in einen Account ein oder deaktiviere die BetaCraft-Authentifizierung in den ViaFabricPlus-Einstellungen.", - "report.viafabricplus.button": "Probleme melden", "report.viafabricplus.bug_report": "Fehler auf GitHub melden", "report.viafabricplus.feature_request": "Funktion auf GitHub vorschlagen", @@ -102,11 +100,19 @@ "classicube.viafabricplus.account": "Du kannst hier einen Account erstellen: https://www.classicube.net/", "classicube.viafabricplus.loading": "Lade Profilinformationen und Serverliste...", "classicube.viafabricplus.warning": "Diese Funktion sendet API-Anfragen an die ClassiCube-API.", + + "betacraft.viafabricplus.failed_to_verify_session": "ViaFabricPlus konnte deine Sitzung nicht verifizieren! Bitte logge dich in einen Account ein oder deaktiviere die BetaCraft-Authentifizierung in den ViaFabricPlus-Einstellungen.", "betacraft.viafabricplus.warning": "Durch Drücken dieser Schaltfläche werden API-Anfragen an \"betacraft.uk/serverlist\" gesendet.", "classic4j_library.viafabricplus.error.token": "Inkorrektes Token. Ist ViaFabricPlus veraltet?", "classic4j_library.viafabricplus.error.username": "Ungültiger Benutzername.", "classic4j_library.viafabricplus.error.password": "Ungültiges Passwort.", "classic4j_library.viafabricplus.error.verification": "Benutzer hat seine E-Mail-Adresse noch nicht verifiziert.", - "classic4j_library.viafabricplus.error.logincode": "Mehrstufige Authentifizierung angefordert. Bitte überprüfe deine E-Mails." + "classic4j_library.viafabricplus.error.logincode": "Mehrstufige Authentifizierung angefordert. Bitte überprüfe deine E-Mails.", + + "minecraftauth_library.viafabricplus.authenticate_xbox_live": "Gerät mit Xbox Live authentifizieren...", + "minecraftauth_library.viafabricplus.authenticate_sisu": "Authentifizierung mit Xbox Live über SISU...", + "minecraftauth_library.viafabricplus.authenticate_minecraft": "Authentifizierung mit den Minecraft-Diensten...", + "minecraftauth_library.viafabricplus.requesting_xsts_token": "Anfordern des XSTS-Tokens...", + "minecraftauth_library.viafabricplus.authenticate_playfab": "Authentifizierung mit PlayFab..." } diff --git a/src/main/resources/assets/viafabricplus/lang/en_us.json b/src/main/resources/assets/viafabricplus/lang/en_us.json index f49fa5cc..cd26a475 100644 --- a/src/main/resources/assets/viafabricplus/lang/en_us.json +++ b/src/main/resources/assets/viafabricplus/lang/en_us.json @@ -46,6 +46,7 @@ "general_settings.viafabricplus.emulate_inventory_actions_in_alpha_versions": "Emulate inventory actions in alpha versions", "bedrock_settings.viafabricplus.click_to_set_bedrock_account": "Click to set account for Bedrock Edition", + "bedrock_settings.viafabricplus.click_to_set_bedrock_account.notice": "Your browser should have opened.\nClosing this screen will cancel the process!", "bedrock_settings.viafabricplus.replace_default_port": "Replace default port in server list", "debug_settings.viafabricplus.queue_config_packets": "Queue config packets", @@ -91,9 +92,6 @@ "visual_settings.viafabricplus.hide_crafting_recipe_book": "Hide crafting recipe book", "visual_settings.viafabricplus.hide_modern_jigsaw_screen_features": "Hide modern Jigsaw screen features", - "bedrock.viafabricplus.login": "Your browser should have opened.\nClosing this screen will cancel the process!", - "authentication.viafabricplus.failed_to_verify_session": "ViaFabricPlus couldn't verify your session! Please log in to an account or disable the BetaCraft authentication in the ViaFabricPlus Settings", - "report.viafabricplus.button": "Report issues", "report.viafabricplus.bug_report": "Report a bug on GitHub", "report.viafabricplus.feature_request": "Request a feature on GitHub", @@ -103,11 +101,19 @@ "classicube.viafabricplus.account": "You can create an account here: https://www.classicube.net/", "classicube.viafabricplus.loading": "Loading profile information and server list...", "classicube.viafabricplus.warning": "This feature will send API requests to the ClassiCube API.", + + "betacraft.viafabricplus.failed_to_verify_session": "ViaFabricPlus couldn't verify your session! Please log in to an account or disable the BetaCraft authentication in the ViaFabricPlus Settings", "betacraft.viafabricplus.warning": "Pressing this button will send API requests to \"betacraft.uk/serverlist\".", "classic4j_library.viafabricplus.error.token": "Incorrect token. Is your ViaFabricPlus out of date?", "classic4j_library.viafabricplus.error.username": "Invalid username.", "classic4j_library.viafabricplus.error.password": "Invalid password.", "classic4j_library.viafabricplus.error.verification": "User hasn't verified their email address yet.", - "classic4j_library.viafabricplus.error.logincode": "Multi-factor authentication requested. Please check your email." + "classic4j_library.viafabricplus.error.logincode": "Multi-factor authentication requested. Please check your email.", + + "minecraftauth_library.viafabricplus.authenticate_xbox_live": "Authenticating device with Xbox Live...", + "minecraftauth_library.viafabricplus.authenticate_sisu": "Authenticating with Xbox Live using SISU...", + "minecraftauth_library.viafabricplus.authenticate_minecraft": "Authenticating with Minecraft Services...", + "minecraftauth_library.viafabricplus.requesting_xsts_token": "Requesting XSTS Token...", + "minecraftauth_library.viafabricplus.authenticate_playfab": "Authenticating with PlayFab..." } diff --git a/src/main/resources/viafabricplus.mixins.json b/src/main/resources/viafabricplus.mixins.json index fa20a00e..e5dd8322 100644 --- a/src/main/resources/viafabricplus.mixins.json +++ b/src/main/resources/viafabricplus.mixins.json @@ -32,9 +32,9 @@ "compat.classic4j.MixinTextFieldWidget", "compat.fabricapi.MixinRegistrySyncManager", "compat.ipnext.MixinAutoRefillHandler_ItemSlotMonitor", - "compat.jsonwebtoken.MixinClasses", - "compat.jsonwebtoken.MixinDefaultJwtParserBuilder", "compat.lithium.MixinEntity", + "compat.minecraftauth.MixinClasses", + "compat.minecraftauth.MixinDefaultJwtParserBuilder", "fixes.authlib.MixinKeyPairResponse", "fixes.authlib.MixinYggdrasilUserApiService", "fixes.minecraft.MixinActionResult",