- Update Account setting in configuration.md: clarify that Microsoft
accounts don't need passwords (device code flow with 2FA support),
add separate examples for Microsoft, offline, and Yggdrasil accounts
- Update usage.md: add tip about device code flow for Microsoft accounts,
update command-line examples to show Microsoft and offline patterns,
clarify that password is not needed in config files for Microsoft auth
- Update README.md features list: add Microsoft authentication with 2FA
support as a listed feature
Co-authored-by: milutinke <441903+milutinke@users.noreply.github.com>
Agent-Logs-Url: https://github.com/MCCTeam/Minecraft-Console-Client/sessions/3afd0e85-19ae-45c7-ac4b-c2b7bf733008
Re-implements the changes from PR #2890, adapted for the current codebase
which uses System.Text.Json.Nodes and HttpClient instead of the legacy
Json.JSONData and hand-rolled SslStream HTTP client.
Changes:
- Settings.cs: Convert AuthlibServer from struct to class with
[TomlDoNotInlineObject]; convert Host to a property that parses
'host:port' syntax; add AuthlibInjectorAPIPath (default '/api/yggdrasil')
for servers that use a different prefix (e.g. Drasl uses '/authlib-injector');
add UseHttps (default true) so local/dev auth servers without TLS work.
- ConfigComments.resx: Add descriptive inline comments for the new
AuthlibServer fields (Host, Port, AuthlibInjectorAPIPath, UseHttps).
- ProtocolHandler.cs: Replace three hardcoded '/api/yggdrasil/...' paths
with AuthlibInjectorAPIPath-based paths (authenticate, refresh, join).
Replace hand-rolled TcpClient+SslStream HTTP in DoHTTPSRequest with
HttpClient+SocketsHttpHandler (ConnectCallback routes through ProxyHandler).
Add useHttps parameter so HTTP-only auth servers are supported.
- KeyUtils.cs: Add AuthServerSupportsProfileKeys() that fetches the
authlib-injector metadata endpoint and checks feature.enable_profile_key.
Update GetNewProfileKeys() to skip key fetch when the auth server does not
support profile keys; build the cert URL dynamically using AuthlibInjectorAPIPath
for Yggdrasil; always fetch real certs instead of returning a dummy response.
Remove MakeDummyResponse() which is no longer needed.
Tested against a local Drasl instance with authlib-injector 1.2.7 on a
1.21.11 Minecraft server — full auth flow (login, profile key fetch, session
join) confirmed working end-to-end.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Replace `source ~/.zshrc` with `source "$REPO_ROOT/tools/mcc-env.sh"` in
ensure_offline_server.sh and run_full_spectrum_test.sh
- Convert both scripts from zsh to bash (#!/usr/bin/env bash) so mcc-env.sh
can be sourced natively; replace ${0:A:h} with portable SCRIPT_DIR expansion
- Update SKILL.md: drop ~/.zshrc references, point to tools/mcc-env.sh and
standalone tools/start-server.sh + tools/mc-rcon.sh; update server path
from ~/Minecraft/Servers/ to MinecraftOfficial/downloads/; replace
`mcc-build` with `dotnet build MinecraftClient.sln -c Release`
- Update evals.json expectation to match new workflow
Co-authored-by: milutinke <441903+milutinke@users.noreply.github.com>
Agent-Logs-Url: https://github.com/MCCTeam/Minecraft-Console-Client/sessions/1ff08b70-7be3-4211-9b77-a9e10ff1d157
When the MC server sends a plain-text string (not valid JSON) for fields like
the ServerData MOTD, JsonNode.Parse() throws JsonReaderException. This was a
regression introduced by the System.Text.Json modernization.
Fix: catch JsonException in ParseJson() and return JsonValue.Create(json) so
plain-text strings are treated as literal string values rather than crashing.
Tested against a real Minecraft 1.21.11 server (offline mode): MCC connects
and stays connected without crashing.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
ParseJson now returns null for null, empty, or whitespace-only input
instead of throwing JsonReaderException. This matches the behavior of
the old hand-rolled parser and is needed because MC protocol packets
may contain empty strings where JSON text is expected (e.g. empty chat
messages in DeathCombatEvent packets).
Discovered during end-to-end testing against a Minecraft 1.21.11
protocol server.
Co-authored-by: milutinke <441903+milutinke@users.noreply.github.com>
Agent-Logs-Url: https://github.com/milutinke/Minecraft-Console-Client/sessions/34df723e-4a63-45a0-a942-e119d81a575b