Trending-skills minecraftconsoles-lce
Expert skill for building, running, and extending MinecraftConsoles (Minecraft Legacy Console Edition) — a C++ multi-platform reimplementation with dedicated server, LAN multiplayer, and modding support.
git clone https://github.com/Aradotso/trending-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/Aradotso/trending-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/minecraftconsoles-lce" ~/.claude/skills/aradotso-trending-skills-minecraftconsoles-lce && rm -rf "$T"
skills/minecraftconsoles-lce/SKILL.mdMinecraftConsoles (Legacy Console Edition) Skill
Skill by ara.so — Daily 2026 Skills collection.
What This Project Is
MinecraftConsoles is a C++ reimplementation/continuation of Minecraft Legacy Console Edition v1.6.0560.0 (TU19), targeting modern Windows (and unofficially macOS/Linux via Wine). Goals include:
- Multi-platform base for modding, backports, and LCE development
- Quality desktop experience with keyboard/mouse and controller support
- LAN multiplayer and dedicated server software
- Splitscreen multiplayer support
Repository:
smartcmd/MinecraftConsolesPrimary language: C++
Build system: Visual Studio 2022 solution (
.sln) + CMake support
Quick Start
Prerequisites
- Windows (primary supported platform)
- Visual Studio 2022 with C++ desktop workload
- Git
Clone
git clone https://github.com/smartcmd/MinecraftConsoles.git cd MinecraftConsoles
Build with Visual Studio
- Open
in Visual Studio 2022MinecraftConsoles.sln - Set Startup Project to
Minecraft.Client - Set configuration to Debug (or Release), platform to Windows64
- Press F5 or Ctrl+F5 to build and run
Build with CMake (Windows x64)
# Configure cmake -S . -B build -G "Visual Studio 17 2022" -A x64 # Build the client cmake --build build --config Debug --target MinecraftClient # Build the dedicated server cmake --build build --config Debug --target MinecraftServer
See
COMPILE.md in the repo for additional platform-specific notes.
Running the Client
Nightly Build (No Compile Needed)
Download the
.zip from the Nightly Release, extract, and run Minecraft.Client.exe.
Setting Your Username
Create
username.txt in the same directory as the executable:
Steve
Or use a launch argument:
Minecraft.Client.exe -name Steve Minecraft.Client.exe -name Steve -fullscreen
Client Launch Arguments
| Argument | Description |
|---|---|
| Override in-game username |
| Launch in fullscreen mode |
Keyboard & Mouse Controls
| Action | Key/Button |
|---|---|
| Move | |
| Jump / Fly Up | |
| Sneak / Fly Down | (hold) |
| Sprint | (hold) or double-tap |
| Inventory | |
| Chat | |
| Drop Item | |
| Crafting | (tabs: / ) |
| Attack / Destroy | Left Click |
| Use / Place | Right Click |
| Select hotbar slot | – or Mouse Wheel |
| Pause | |
| Fullscreen | |
| Toggle HUD | |
| Toggle Debug Info | |
| Debug Overlay | |
| Toggle Debug Console | |
| Toggle FPS/TPS view | |
| Player list / Host Options | |
| Accept tutorial hint | |
| Decline tutorial hint | |
LAN Multiplayer
LAN multiplayer works automatically on the Windows build:
- Hosting a world auto-advertises it on the local network
- Other players discover sessions via Join Game menu
- TCP port: 25565 (game connections)
- UDP port: 25566 (LAN discovery)
- Use the Add Server button to connect to known IPs
- Username changes are safe — keep
to preserve your data across renamesuid.dat - Splitscreen players can join LAN/multiplayer sessions
Dedicated Server
Download Nightly Server Build
Run Directly (Windows)
Minecraft.Server.exe -name MyServer -port 25565 -ip 0.0.0.0 -maxplayers 8 -loglevel info Minecraft.Server.exe -seed 123456789
Server CLI Arguments
| Argument | Description |
|---|---|
| Override |
| Override (bind address) |
| Alias of |
| Override (max 16 chars) |
| Override |
| Override |
| , , , |
/ / | Print usage and exit |
server.properties
Configuration
server.propertiesLocated in the same directory as
Minecraft.Server.exe. Auto-generated with defaults if missing.
server-name=DedicatedServer server-port=25565 server-ip=0.0.0.0 max-players=8 level-name=world level-id=world level-seed= world-size=classic log-level=info white-list=false lan-advertise=false autosave-interval=60
Key property notes:
| Key | Values | Default | Notes |
|---|---|---|---|
| | | TCP listen port |
| string | | Bind address |
| string | | Max 16 chars |
| | | Player slots |
| int64 or empty | empty | Empty = random |
| | | New world size |
| | | Verbosity |
| | | Seconds between autosaves |
| | | Enable whitelist |
| | | LAN advertisement |
Dedicated Server in Docker (Linux/Wine)
Recommended: Pull from GHCR (No Local Build)
# Start (pulls latest image automatically) ./start-dedicated-server.sh # Start without pulling ./start-dedicated-server.sh --no-pull # Equivalent manual command docker compose -f docker-compose.dedicated-server.ghcr.yml up -d
Local Build Mode (Optional)
Requires a locally compiled
Minecraft.Server.exe:
docker compose -f docker-compose.dedicated-server.yml up -d --build
Docker Persistent Volumes
| Host Path | Container Path | Purpose |
|---|---|---|
| | Server config |
| | World save data |
Docker Environment Variables
| Variable | Default | Description |
|---|---|---|
| | Virtual display number |
| | Virtual screen size (tiny, Wine needs it) |
Project Structure (Key Areas)
MinecraftConsoles/ ├── MinecraftConsoles.sln # Visual Studio solution ├── CMakeLists.txt # CMake build definition ├── COMPILE.md # Detailed compile instructions ├── CONTRIBUTING.md # Contributor guide and project goals ├── docker-compose.dedicated-server.ghcr.yml # Docker (GHCR image) ├── docker-compose.dedicated-server.yml # Docker (local build) ├── start-dedicated-server.sh # Quick-start script ├── server-data/ │ ├── server.properties # Server config (auto-generated) │ └── GameHDD/ # World save data └── .github/ └── banner.png
Common C++ Patterns in This Codebase
Adding a New Key Binding (Keyboard Input)
The project added keyboard/mouse support on top of the original controller-only code. When extending input:
// Typical pattern for checking key state in the input handler // Find the keyboard input processing file and add your key check: bool isKeyPressed(int virtualKey) { return (GetAsyncKeyState(virtualKey) & 0x8000) != 0; } // Example: adding a new toggle key if (isKeyPressed(VK_F7)) { // toggle your feature myFeatureEnabled = !myFeatureEnabled; }
Registering a Launch Argument
Follow the existing
-name / -fullscreen pattern:
// In the argument parsing section (typically in main or init): for (int i = 1; i < argc; i++) { std::string arg = argv[i]; if (arg == "-name" && i + 1 < argc) { username = argv[++i]; } else if (arg == "-fullscreen") { launchFullscreen = true; } // Add your argument: else if (arg == "-myoption" && i + 1 < argc) { myOption = argv[++i]; } }
Reading server.properties
server.properties#include <fstream> #include <sstream> #include <map> #include <string> std::map<std::string, std::string> loadServerProperties(const std::string& path) { std::map<std::string, std::string> props; std::ifstream file(path); std::string line; while (std::getline(file, line)) { if (line.empty() || line[0] == '#') continue; auto eq = line.find('='); if (eq == std::string::npos) continue; std::string key = line.substr(0, eq); std::string val = line.substr(eq + 1); props[key] = val; } return props; } // Usage: auto props = loadServerProperties("server.properties"); int port = std::stoi(props.count("server-port") ? props["server-port"] : "25565"); std::string serverName = props.count("server-name") ? props["server-name"] : "DedicatedServer";
Writing server.properties
(Normalize / Auto-generate)
server.propertiesvoid writeServerProperties(const std::string& path, const std::map<std::string, std::string>& props) { std::ofstream file(path); for (auto& [key, val] : props) { file << key << "=" << val << "\n"; } } // Normalize level-id from level-name std::string normalizeLevelId(const std::string& levelName) { std::string id = levelName; // Remove unsafe characters, lowercase, replace spaces with underscores for (char& c : id) { if (!std::isalnum(c) && c != '_' && c != '-') c = '_'; } return id; }
Troubleshooting
Build Fails: Missing Windows SDK
- Open Visual Studio Installer → Modify → add Windows 10/11 SDK
- Make sure the platform is set to Windows64 (not x86)
CMake Can't Find Visual Studio Generator
# Confirm VS 2022 is installed, then: cmake -S . -B build -G "Visual Studio 17 2022" -A x64 # "17 2022" is the generator name for VS 2022
Game Launches But No Display / Crashes Immediately
- Ensure you're running from the directory containing all game assets
- Check that your GPU drivers support the required DirectX version
- Try Debug build for more verbose error output
Server Not Visible on LAN
- Check firewall rules allow TCP 25565 and UDP 25566
- Verify
is NOT required for dedicated servers (it's for LAN broadcast; clients discover via Join Game)lan-advertise=true - Ensure both client and server are on the same subnet
Docker Server: Wine Can't Display
- The
env var must match what Wine usesXVFB_DISPLAY - The container uses a minimal
virtual framebuffer — don't change this unless you have a reason64x64x16
Username Reset / UID Issues
- Do not delete
— it stores your unique player IDuid.dat - If you rename yourself via
or-name
, your existingusername.txt
keeps world data linked to your accountuid.dat
macOS / Linux (Wine)
- Download the Windows nightly
.zip - Run via
or CrossOverwine Minecraft.Client.exe - Stability issues (frametime pacing) are known and community-reported; not officially supported
Contributing
Read
before submitting PRs. Key points:CONTRIBUTING.md
- Follow existing code style and naming conventions
- Console build compatibility should not be broken without discussion
- Security fixes are always welcome
- Check open issues (535+) for good first tasks
- Join the Discord for contributor discussion
Platform Support Summary
| Platform | Status |
|---|---|
| Windows (VS 2022) | ✅ Fully supported |
| macOS / Linux (Wine) | ⚠️ Community-reported working, unofficial |
| Android (Wine) | ⚠️ Runs with frametime issues |
| iOS | ❌ No support |
| Consoles | ⚠️ Code present, not actively maintained |