The TUI log view used an ItemsControl with 5000 max entries and no UI
virtualization. Avalonia's composition renderer traverses the entire
visual tree on each frame -- with thousands of TextBlock controls, the
recursive Render/RenderCore calls exceed the thread stack size on
constrained devices (especially ARM where each stack frame is larger
due to ABI differences), causing a StackOverflowException in
ServerCompositionContainerVisual.Render.
Changes:
- Enable VirtualizingStackPanel on the log ItemsControl so Avalonia
only creates visuals for the rows currently in the viewport.
- Add [Console.General] TUI_Log_Scrollback config option so users can
control max log lines in TUI mode. Default is 0 (automatic: 3000 on
x86/x64, 500 on ARM/ARM64).
Made-with: Cursor
- Reset _BotRecoAttempts on successful game join so retry counter
does not carry stale state across sessions
- Display "unlimited" instead of near-int.MaxValue retry count when
Retries is set to -1 (infinite)
- Guard SendText with CanSendMessage check to prevent
NullReferenceException when bots call send after disconnect
- Catch SocketException/IOException in Protocol18 Updater thread so
a closed socket triggers OnConnectionLost gracefully instead of an
unhandled exception
Made-with: Cursor
Consolonia's Unix.Terminal uses [DllImport("libcoreclr.so")] to load
dlopen/dlsym on .NET Core. It ships a SetDllImportResolver that maps
the library name to the current process handle, but the resolver is
guarded by #if NET6_0 (exact TFM match) instead of NET6_0_OR_GREATER.
Since Consolonia targets net8.0, the resolver is never compiled in.
On self-contained single-file publishes, libcoreclr.so is bundled
inside the host binary and does not exist on disk. Without the
resolver the OS linker cannot find it, causing a DllNotFoundException
that crashes the TUI on startup. This primarily affects ARM64 Linux
users (e.g. Raspberry Pi / Debian Trixie) who almost exclusively use
self-contained publishes.
This commit registers an AssemblyLoadContext.Default.ResolvingUnmanagedDll
handler in Program.Main (before TUI init) that returns (IntPtr)(-1) for
libcoreclr.so, which the runtime interprets as the current process.
This is a temporary workaround until the upstream fix lands:
https://github.com/Consolonia/Consolonia/pull/605
Made-with: Cursor
- Added functionality to fetch version metadata from Mojang's manifest.
- Implemented checks for the presence of Proguard mappings to determine decompilation method.
- Enhanced the script to handle unobfuscated versions by downloading and extracting inner jars when necessary.
- Improved error handling for missing dependencies and added informative output messages during the decompilation process.
- Implemented ReadNextItemStackTemplate method to read ItemStackTemplate data with item-first encoding.
- Updated Protocol18 to utilize ReadItemStackTemplateLabel for improved item display handling.
- Enhanced item component parsing to accommodate new structured components.
- Removed unused color definitions for screen and dark screen.
- Updated pixel array to use the new screen background color consistently.
- Adjusted prompt text colors for better visibility in the TUI.
- Introduced a configuration option `Display_Icon_Banner` to control the visibility of the startup icon banner.
- Refactored `ProcessStartupState` to utilize TUI for displaying the banner if enabled, falling back to a classic banner display otherwise.
- Added new methods for building the banner panel and icon grid for improved visual representation.
- Updated translations and resource comments to support the new banner features.
- Add BlockHardness.cs with hardness data for all 1053 blocks from MC 1.21.11
- Add MiningCalculator.cs with version-aware dig duration computation
- Tool speed from ToolComponent (1.20.6+) or legacy hardcoded tables
- Efficiency enchantment (legacy: level^2+1, 1.21.11+: mining_efficiency attribute)
- Haste/Conduit Power/Mining Fatigue effects
- BLOCK_BREAK_SPEED attribute (1.20.6+)
- MINING_EFFICIENCY and SUBMERGED_MINING_SPEED attributes (1.21.11+)
- Underwater penalty with Aqua Affinity support (legacy) or attribute (modern)
- Airborne penalty
- Correct tool for drops check (30 vs 100 divisor)
- Modify McClient.DigBlock to auto-compute duration for survival/adventure mode
- Cache player attributes from OnEntityProperties in McClient
- Expose duration parameter in ChatBot.cs scripting wrapper
- Add /downloads/ to .gitignore
Agent-Logs-Url: https://github.com/MCCTeam/Minecraft-Console-Client/sessions/579df446-a335-4174-9a8b-4d66173c82b1
Co-authored-by: milutinke <441903+milutinke@users.noreply.github.com>
MC 26.1 changed the minecraft:slot_display registry, inserting 3 new
types (with_any_potion, only_with_component, dyed) and shifting all
existing IDs. This caused MCC to misparse recipe display data, leading
to a Queue empty crash in SkipItemHolderSet.
Add version-gated ReadSlotDisplayLabel with correct 26.1 type mapping
and reader methods for the 3 new slot display types.
Agent-Logs-Url: https://github.com/MCCTeam/Minecraft-Console-Client/sessions/47b0c937-1491-4216-8ee0-1aca866e99ab
Co-authored-by: milutinke <441903+milutinke@users.noreply.github.com>