Skip to content

These docs were made completely by AI, so they might be right, or wrong, you'll need to test them yourself. This was made for a easier understanding of everything. So use at your own risk. If anything is wrong, please don't hurt to make a PR on the page you have a problem with. ON GITHUB

Build System & CI

MinecraftConsoles supports two build methods: the original Visual Studio solution (.sln) and a newer CMake-based build. Both target Windows x64 only at build time.

The CMake build enforces C++17:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

The project uses C++17 features throughout, including shared_ptr, make_shared, dynamic_pointer_cast, and modern STL containers.

File: MinecraftConsoles.sln

This is the main build method, documented in COMPILE.md:

  1. Open MinecraftConsoles.sln in Visual Studio 2022.
  2. Set Minecraft.Client as the Startup Project.
  3. Pick your configuration: Debug (recommended) or Release.
  4. Pick your platform: Windows64.
  5. Build with Ctrl+Shift+B, run with F5.

File: CMakeLists.txt

A supplementary build system that generates a Visual Studio 2022 solution.

Configure:

Terminal window
cmake -S . -B build -G "Visual Studio 17 2022" -A x64 \
-DCMAKE_GENERATOR_INSTANCE="C:/Program Files/Microsoft Visual Studio/2022/Community"

Build:

Terminal window
cmake --build build --config Debug --target MinecraftClient
cmake --build build --config Release --target MinecraftClient

Run:

Terminal window
cd .\build\Debug
.\MinecraftClient.exe

The game relies on relative paths (e.g., Common\Media\...), so you need to launch it from the output directory.

The CMake build defines two targets:

TargetTypeDescription
MinecraftWorldStatic libraryGame logic, entities, items, tiles, commands
MinecraftClientWin32 executableRendering, UI, networking, platform code

Source file lists are kept in separate CMake includes:

  • cmake/WorldSources.cmake for all Minecraft.World/ source files
  • cmake/ClientSources.cmake for all Minecraft.Client/ source files

Both targets define:

DefinitionPurpose
_LARGE_WORLDSExtended world size support
_DEBUG_MENUS_ENABLEDDebug menu availability
_CRT_NON_CONFORMING_SWPRINTFSMSVC printf compatibility
_CRT_SECURE_NO_WARNINGSDisable MSVC security warnings
_WINDOWS6464-bit platform flag
_DEBUGDebug-only definition
_LIBWorld library only

The configure_msvc_target() function applies:

Debug:

  • /W3 warnings
  • /MP multi-processor compilation
  • /FS force synchronous PDB writes
  • /EHsc C++ exception handling

Release:

  • /W0 warnings (all disabled)
  • /MP multi-processor compilation
  • /GL whole-program optimization
  • /O2 maximize speed
  • /Oi intrinsic functions
  • /GT fiber-safe thread-local storage
  • /GF string pooling

Release linker:

  • /LTCG link-time code generation
  • /INCREMENTAL:NO no incremental linking

MinecraftClient links against:

LibraryPurpose
MinecraftWorldStatic library with game logic
d3d11DirectX 11 rendering
XInput9_1_0Controller input
wsock32Networking
legacy_stdio_definitionsMSVC compatibility
iggy_w64.libSWF/Flash UI rendering
iggyperfmon_w64.libIggy performance monitoring
iggyexpruntime_w64.libIggy expression runtime
4J_Input.lib4J input abstraction (debug/release variants)
4J_Storage.lib4J storage abstraction (debug/release variants)
4J_Render_PC.lib4J rendering abstraction (debug/release variants)

The Iggy libraries handle the Flash/SWF-based UI system from the original console edition. The 4J libraries are proprietary platform abstraction layers.

Both the .sln and CMake builds target Windows x64 only. The CMake build checks for this explicitly:

if(NOT WIN32)
message(FATAL_ERROR "This CMake build currently supports Windows only.")
endif()
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
message(FATAL_ERROR "Use a 64-bit generator/toolchain (x64).")
endif()

The CMake build automatically copies runtime assets during configuration:

Windows: Uses robocopy.exe to copy:

  • Redistributables from x64/Release/
  • Client assets (excluding source files)
  • DurangoMedia patches

Unix/Linux: Uses rsync with equivalent exclusion filters. This path exists for asset copying, but the actual compilation still needs MSVC.

The asset copy excludes source files (*.cpp, *.h, etc.), build files, scripts, and platform-specific directories (Durango*, Orbis*, PS*, Xbox).

Per COMPILE.md, contributors on Linux need a Windows machine or VM to build. Running the compiled game via Wine is a separate concern from having a supported build environment.

The CONTRIBUTING.md notes that one of the project’s goals is “having workable multi-platform compilation for ARM, Consoles, Linux.” This is a future goal, not something that works today.

The source contains several platform ifdefs:

MacroPlatform
__ORBIS__PlayStation (Orbis)
_WINDOWS64Windows 64-bit
_DURANGOXbox One

These are remnants of the original multi-platform console codebase. For example, BaseAttributeMap uses a different hash function on Orbis because the PlayStation standard library doesn’t default-hash enums.

MinecraftConsoles uses three GitHub Actions workflows:

Triggers: Pull requests (opened, reopened, synchronize), pushes to main, and manual dispatch.

Runs a Debug build on windows-latest using MSBuild. This is the main CI gate that makes sure all PRs compile successfully. It ignores changes to .gitignore and markdown files (both root and .github/ markdown).

Triggers: Pushes to main and manual dispatch.

Builds a Release configuration on windows-latest, zips the output as LCEWindows64.zip, and publishes it as a nightly release using the andelf/nightly-release action. The release includes:

  • LCEWindows64.zip, the full game package
  • Minecraft.Client.exe, the standalone executable
  • Minecraft.Client.pdb, debug symbols

Release builds use MSVC v14.44.35207 with /O2 /Ot /Oi /Ob3 /GF /fp:precise.

Triggers: Manual dispatch only (workflow_dispatch).

Builds both Release and Debug configurations in a matrix strategy. Uploads artifacts for each configuration as MinecraftClient-Release and MinecraftClient-Debug.

File: .clang-format

The project includes a clang-format configuration based on the Microsoft style:

SettingValue
Base styleMicrosoft
Indent width4
Tab width4
Use tabsNever
Column limit0 (unlimited)
Pointer alignmentRight (int *ptr)
Brace wrappingAlways after control statements
Insert bracesYes (enforces braces on single-line blocks)
Sort includesCase sensitive
StandardLatest

Notable settings: InsertBraces: true makes sure all control flow blocks have braces, and ColumnLimit: 0 turns off line length enforcement.

AspectLCEMPMinecraftConsoles
Build systemVisual Studio .sln.sln + CMake
CI/CDNone documented3 GitHub Actions workflows
Code formattingNo enforced standard.clang-format (Microsoft-based)
Nightly releasesNoneAutomated via GitHub Actions
PR validationNoneDebug build on every PR
Asset copyingManualAutomated in CMake (robocopy/rsync)
C++ standardC++11C++17
Source file count~1,564 (World)~1,837 (World) + ~606 (Client)

LCEMP also has a build-macos directory and a Common top-level directory that don’t exist in MinecraftConsoles. LCEMP includes ConsoleSaveFileSplit files not present in MinecraftConsoles.

The CONTRIBUTING.md file outlines strict contribution guidelines:

  • Scope: Stability, quality of life, and platform support over new content. No Java Edition backports, visual changes, or content without LCE precedent.
  • Parity: Must match original LCE visual and gameplay experience.
  • Accepted changes: Bug fixes, multi-platform support, SWF-free UI replacements, asset quality improvements, dedicated server menus, Steamworks networking, keyboard/mouse support.
  • PR requirements: One topic per PR, fully documented changes, use the PR template. Undocumented changes cause closure.
  • AI policy: Code written largely or noticeably by an LLM is not accepted.