diff --git a/README.md b/README.md index 560a798a..31ebf41f 100644 --- a/README.md +++ b/README.md @@ -1,231 +1,145 @@ -![Legacy Edition Banner](.github/banner.png) -# MinecraftConsoles (Legacy Console Edition) +# Minecraft Consoles -[![Discord](https://img.shields.io/badge/Discord-Join%20Server-5865F2?logo=discord&logoColor=white)](https://discord.gg/dH8AZWGcau) +A community-maintained source port and modernization effort for Minecraft: Legacy Console Edition (TU19 codebase). ---- -## IMPORTANT UPDATE -**This repo was moved to a new org!** +This project focuses on keeping the original LCE feel while improving stability, desktop usability, and multiplayer reliability. -Please change all links and references from `smartcmd/MinecraftConsoles` to `MCLCE/MinecraftConsoles` instead. +## What This Project Is ---- +- A playable desktop-oriented LCE codebase +- A base for bug fixes, platform work, and careful backporting +- A long-term foundation for modding and extension -This project is based on source code of Minecraft Legacy Console Edition v1.6.0560.0 (TU19) with some fixes and improvements applied. +## Current Highlights -The current goal of MinecraftConsoles is to be a multi-platform base for further development, such as modding, backports, and anything else LCE. On top of that, we're working to make this a quality experience on Desktop with or without a controller while (long-term) retaining console support. +- Windows client and dedicated server targets +- Keyboard and mouse support +- Controller-first compatibility +- LAN discovery and multiplayer +- WAN/IP multiplayer support +- LCELive invite flow, signaling, and relay support +- Split-screen support (where applicable) +- Better diagnostics and runtime logs -See our our [Contributor's Guide](./CONTRIBUTING.md) for more information on the goals of this project. +## Platform Notes -## Download -### Client -Windows users can download our [Nightly Build](https://github.com/MCLCE/MinecraftConsoles/releases/tag/nightly)! Simply download the `.zip` file and extract it to a folder where you'd like to keep the game. You can set your username in `username.txt` (you'll have to make this file) -### Server -If you're looking for Dedicated Server software, download its [Nightly Build here](https://github.com/MCLCE/MinecraftConsoles/releases/tag/nightly-dedicated-server). Similar instructions to the client more or less, though see further down in this README for more info on that. +- Windows: primary supported build and runtime platform +- Linux/macOS: commonly run through Wine/CrossOver by community users (unofficial) +- Console code remains in-tree, but desktop stability and networking are current priorities -## Platform Support +## Quick Start (Windows) -- **Windows**: Supported for building and running the project -- **macOS / Linux**: The Windows nightly build will run through Wine or CrossOver based on community reports, but this is unofficial and not currently tested by the maintainers when pushing updates -- **Android**: VIA x86 EMULATORS (like GameNative) ONLY! The Windows nightly build does run but has stability / frametime pacing issues frequently reported -- **iOS**: No current support -- **All Consoles**: Console support remains in the code, but maintainers are not currently verifying console functionality / porting UI Changes to the console builds at this time. +1. Install Visual Studio 2022 or newer with C++ tools. +2. Open this GAME directory in Visual Studio. +3. Let CMake configure. +4. Choose a target/configuration, for example Windows64 - Debug. +5. Build and run Minecraft.Client or Minecraft.Server. -## Features +## Build With CMake -- Dedicated Server Software (`Minecraft.Server.exe`) -- Fixed compilation and execution in both Debug and Release mode on Windows using Visual Studio 2022 -- Added support for keyboard and mouse input -- Added fullscreen mode support (toggle using F11) -- (WIP) Disabled V-Sync for better performance -- Added a high-resolution timer path on Windows for smoother high-FPS gameplay timing -- Device's screen resolution will be used as the game resolution instead of using a fixed resolution (1920x1080) -- LAN Multiplayer & Discovery -- Added persistent username system via `username.txt` -- Decoupled usernames and UIDs to allow username changes -- Fixed various security issues present in the original codebase -- Splitscreen Multiplayer support (connect to dedicated servers, etc) -- In-game server management (Add Server button, etc) - - -## Controls (Keyboard & Mouse) - -- **Movement**: `W` `A` `S` `D` -- **Jump / Fly (Up)**: `Space` -- **Sneak / Fly (Down)**: `Shift` (Hold) -- **Sprint**: `Ctrl` (Hold) or Double-tap `W` -- **Inventory**: `E` -- **Chat**: `T` -- **Drop Item**: `Q` -- **Crafting**: `C` Use `Q` and `E` to move through tabs (cycles Left/Right) -- **Toggle View (FPS/TPS)**: `F5` -- **Fullscreen**: `F11` -- **Pause Menu**: `Esc` -- **Attack / Destroy**: `Left Click` -- **Use / Place**: `Right Click` -- **Select Item**: `Mouse Wheel` or keys `1` to `9` -- **Accept or Decline Tutorial hints**: `Enter` to accept and `B` to decline -- **Game Info (Player list and Host Options)**: `TAB` -- **Toggle HUD**: `F1` -- **Toggle Debug Info**: `F3` -- **Open Debug Overlay**: `F4` -- **Toggle Debug Console**: `F6` - - - -## Contributors -Would you like to contribute to this project? Please read our [Contributor's Guide](CONTRIBUTING.md) before doing so! This document includes our current goals, standards for inclusions, rules, and more. - -## Client Launch Arguments - -| Argument | Description | -|--------------------|-----------------------------------------------------------------------------------------------------| -| `-name ` | Overrides your in-game username. | -| `-fullscreen` | Launches the game in Fullscreen mode | - -Example: -``` -Minecraft.Client.exe -name Steve -fullscreen -``` - -## LAN Multiplayer -LAN multiplayer is available on the Windows build - -- Hosting a multiplayer world automatically advertises it on the local network -- Other players on the same LAN can discover the session from the in-game Join Game menu -- Game connections use TCP port `25565` by default -- LAN discovery uses UDP port `25566` -- Add servers to your server list with the in-game Add Server button (temp) -- Rename yourself without losing data by keeping your `uid.dat` -- Split-screen players can join in, even in Multiplayer - -# Dedicated Server Software - -## About `server.properties` - -`Minecraft.Server` reads `server.properties` from the executable working directory (Docker image: `/srv/mc/server.properties`). -If the file is missing or contains invalid values, defaults are auto-generated/normalized on startup. - -Important keys: - -| Key | Values / Range | Default | Notes | -|-----|-----------------|---------|-------| -| `server-port` | `1-65535` | `25565` | Listen TCP port | -| `server-ip` | string | `0.0.0.0` | Bind address | -| `server-name` | string (max 16 chars) | `DedicatedServer` | Host display name | -| `max-players` | `1-8` | `8` | Public player slots | -| `level-name` | string | `world` | Display world name | -| `level-id` | safe ID string | derived from `level-name` | Save folder ID; normalized automatically | -| `level-seed` | int64 or empty | empty | Empty = random seed | -| `world-size` | `classic\|small\|medium\|large` | `classic` | World size preset for new worlds and expansion target for existing worlds | -| `log-level` | `debug\|info\|warn\|error` | `info` | Server log verbosity | -| `autosave-interval` | `5-3600` | `60` | Seconds between autosaves | -| `white-list` | `true/false` | `false` | Enable access list checks | -| `lan-advertise` | `true/false` | `false` | LAN session advertisement | - -Minimal example: - -```properties -server-name=DedicatedServer -server-port=25565 -max-players=8 -level-name=world -level-seed= -world-size=classic -log-level=info -white-list=false -lan-advertise=false -autosave-interval=60 -``` - -## Dedicated Server launch arguments - -The server loads base settings from `server.properties`, then CLI arguments override those values. - -| Argument | Description | -|----------|-------------| -| `-port <1-65535>` | Override `server-port` | -| `-ip ` | Override `server-ip` | -| `-bind ` | Alias of `-ip` | -| `-name ` | Override `server-name` (max 16 chars) | -| `-maxplayers <1-8>` | Override `max-players` | -| `-seed ` | Override `level-seed` | -| `-loglevel ` | Override `log-level` (`debug`, `info`, `warn`, `error`) | -| `-help` / `--help` / `-h` | Print usage and exit | - -Examples: - -```powershell -Minecraft.Server.exe -name MyServer -port 25565 -ip 0.0.0.0 -maxplayers 8 -loglevel info -Minecraft.Server.exe -seed 123456789 -``` - -## Dedicated Server in Docker (Wine) - -This repository includes a lightweight Docker setup for running the Windows dedicated server under Wine. -### Quick Start (No Build, Recommended) - -No local build is required. The container image is pulled from GHCR. - -```bash -./start-dedicated-server.sh -``` - -`start-dedicated-server.sh` does the following: -- uses `docker-compose.dedicated-server.ghcr.yml` -- pulls latest image, then starts the container - -If you want to skip pulling and just start: - -```bash -./start-dedicated-server.sh --no-pull -``` - -Equivalent manual command: - -```bash -docker compose -f docker-compose.dedicated-server.ghcr.yml up -d -``` - -### Local Build Mode (Optional) - -Use this only when you want to run your own locally built `Minecraft.Server` binary in Docker. -**A local build of `Minecraft.Server` is required for this mode.** - -```bash -docker compose -f docker-compose.dedicated-server.yml up -d --build -``` - -Useful environment variables: -- `XVFB_DISPLAY` (default: `:99`) -- `XVFB_SCREEN` (default: `64x64x16`, tiny virtual display used by Wine) - -Fixed server runtime behavior in container: -- executable path: `/srv/mc/Minecraft.Server.exe` -- bind IP: `0.0.0.0` -- server port: `25565` - -Persistent files are bind-mounted to host: -- `./server-data/server.properties` -> `/srv/mc/server.properties` -- `./server-data/GameHDD` -> `/srv/mc/Windows64/GameHDD` - - -## Build & Run - -1. Install [Visual Studio 2022](https://aka.ms/vs/17/release/vs_community.exe) or [newer](https://visualstudio.microsoft.com/downloads/). -2. Clone the repository. -3. Open the project folder from Visual Studio. -4. Set the build configuration to **Windows64 - Debug** (Release is also ok but missing some debug features), then build and run. - -### CMake (Windows x64) +Configure: ```powershell cmake --preset windows64 +``` + +Build client: + +```powershell cmake --build --preset windows64-debug --target Minecraft.Client ``` -For more information, see [COMPILE.md](COMPILE.md). +Build dedicated server: -## Star History +```powershell +cmake --build --preset windows64-debug --target Minecraft.Server +``` -[![Star History Chart](https://api.star-history.com/svg?repos=MCLCE/MinecraftConsoles&type=date&legend=top-left)](https://www.star-history.com/?spm=a2c6h.12873639.article-detail.7.7b9d7fabjNxTRk#MCLCE/MinecraftConsoles&type=date&legend=top-left) +Release builds: + +```powershell +cmake --build --preset windows64-release --target Minecraft.Client +cmake --build --preset windows64-release --target Minecraft.Server +``` + +For full compiler/platform details, see COMPILE.md. + +## Running + +Client (example): + +```powershell +cd .\build\windows64\Minecraft.Client\Debug +.\Minecraft.Client.exe +``` + +Server (example): + +```powershell +cd .\build\windows64\Minecraft.Server\Debug +.\Minecraft.Server.exe -port 25565 -bind 0.0.0.0 -name DedicatedServer +``` + +Important: run from the output directory so relative asset paths resolve correctly. + +## Client Launch Arguments + +| Argument | Description | +|---|---| +| -name | Override in-game username | +| -fullscreen | Start in fullscreen | + +Example: + +```text +Minecraft.Client.exe -name Steve -fullscreen +``` + +## Logging + +Client logs are written next to the executable in: + +- logs/game.log +- logs/game.previous.log +- logs/lcelive.log +- logs/lcelive.previous.log + +Use these first when diagnosing startup, invite, signaling, relay, or join issues. + +## Multiplayer Notes + +- Default game port: TCP 25565 +- LAN discovery: UDP 25566 +- Relay/signaling paths are used when direct connectivity is blocked +- If direct joins fail, logs/lcelive.log typically shows whether fallback was used + +## Dedicated Server + +Minecraft.Server reads server.properties from its working directory. +CLI arguments override server.properties values. + +Common flags: + +- -port <1-65535> +- -ip +- -bind +- -name +- -maxplayers <1-8> +- -seed +- -loglevel + +## Docker (Dedicated Server) + +A Wine-based container flow is included. +Use the provided compose/start scripts in this GAME directory. + +## Contribution Direction + +The project prioritizes: + +- Stability and crash reduction +- Networking reliability +- Controller and desktop UX quality +- Faithful LCE presentation and behavior + +For contribution standards and scope, see CONTRIBUTING.md.