The previous implementation only indexed files in the root directory,
ignoring files in subdirectories. This change adds recursive traversal
to index all files within the folder hierarchy while maintaining
relative paths for compatibility.
Replace the ArchiveFile-based media asset loading system with a new
FolderFile implementation that reads files directly from a folder
structure instead of from compressed .arc archives. This change
simplifies asset management and eliminates the need for pre-packaged
media archives.
Key changes:
- Added FolderFile class that indexes and reads files from a folder
- Updated Consoles_App to use FolderFile instead of ArchiveFile
- Modified CMake asset copy configuration to exclude platform-specific
media folders instead of .arc files
- Updated platform-specific media path references to point to folders
instead of .arc files
This enables easier development and debugging by allowing direct access
to media files without requiring archive extraction or repackaging.
Add missing GuardianModel.cpp and GuardianRenderer.cpp to the
Minecraft.Server build configuration to fix compilation errors in
the debug GitHub PR workflow.
Also fix inconsistent indentation in Minecraft.Client's Common.cmake
for the GuardianModel.cpp and GuardianRenderer.cpp entries (styling only).
Resolve merge conflicts across multiple components
Merge and synchronize XML locale changes
Ensure consistency between string resources and localization files
Minor fixes to restore successful builds after merge
AppContext.BaseDirectory pointed to the runtime/ subfolder where the
self-contained .NET payload lives, causing plugins that use it for file
paths to write to the wrong directory. Now set to the server exe
directory at startup via AppContext.SetData.
Also adds serverDirectory and dataDirectory properties to ServerPlugin
so plugin authors have convenient access to the server root and a
per-plugin data folder (plugins/<PluginName>/) without needing to
resolve paths manually.
Python-based bot tool that rapidly connects/disconnects to the server
using the full LCE protocol (PreLogin, Login, cipher handshake, identity
tokens, keepalive). Configurable concurrent bots, hold times, burst
joins, movement packets, and duration. Includes batch files for common
test scenarios (basic, aggressive, movement, burst, endurance).
- Protect PlayerList and ServerConnection players vectors with critical
sections; all iterations use copy-on-read snapshots to prevent iterator
invalidation during concurrent join/leave
- Add null check on player bounding box in movement validation to prevent
crash when player is removed mid-tick
- Re-validate socket player pointer immediately before SendData to narrow
the TOCTOU race window on disconnect
- Replace inline disconnect cleanup with a queued system drained on the
main tick thread, eliminating the done_cs -> m_playersCS lock inversion
that caused deadlocks under load
- Disable Windows QuickEdit mode at server startup to prevent console
input selection from freezing the process
- Move chunk priority sort behind ServerConnection::sortPlayersByChunkPriority()
to keep the players vector lock-protected
- Prevent payment item from being consumed when submitting unchanged powers
- Reorder ServerPlayer::openBeacon to send ContainerOpenPacket before
addSlotListener so beacon data packets arrive after the client menu is ready
- Add BeaconMenu::broadcastChanges() to continuously sync levels and powers
to clients, matching the pattern FurnaceMenu already uses
- Initialize UIControl_BeaconEffectButton::m_lastState to prevent stale
heap memory from suppressing Iggy ChangeState calls on menu re-entry
The custom name assignment for boss mobs is already handled inside
the `BossMobGuiInfo::setBossHealth` method. The removed code in both
`WitherBossRenderer` and `EnderDragonRenderer` was redundant and not working.
Add CI/CD workflows for nightly releases and pull request builds, along with
structured issue templates for bug reports and suggestions.
- Nightly workflow builds and releases both client and server binaries for
Windows, creating signed tags and GitHub releases with detailed instructions.
- Pull request workflow triggers builds on PR events to validate changes.
- Issue templates guide users in reporting bugs and suggesting enhancements,
linking to community Discord for support.