- Remove shadowcolor from font tags (Iggy doesn't support multiple)
- Enforce HTML text mode on chat labels and jukebox
- Move IDS translatable pattern matching into FormatChatMessage
- Add §r (reset) color code support
- Fix message truncation to count visible characters, skipping HTML tags
- Fix CJK truncation using raw index instead of visible char count
Bypass the 4J RenderManager's hardcoded SyncInterval=1 by calling
the DXGI swap chain directly with Present(0, ALLOW_TEARING) when
VSync is disabled. Falls back to the library's Present on failure.
Relocate VSync/Fullscreen setting flags from bits 18-19 to bits 24-25
to eliminate overlap with the render distance byte (bits 16-23).
Sync the Fullscreen game setting when F11 is pressed so the graphics
menu checkbox stays accurate.
Remove tracked DumpSwf.class (already covered by tools/*.class gitignore).
The tab player list and teleport menu now show the correct map marker
color for each player. The icon is computed using the same hash as the
map renderer (getRandomPlayerMapIcon) and stored by player name,
bypassing the unreliable small-ID lookup that produced wrong colors
on dedicated servers.
The dedicated server previously picked a completely random seed with no
biome diversity checks (the client validates but the server skipped it).
On top of that, the client's findSeed() was hardcoded to only check a
54-chunk (Classic) area, so Large worlds had no diversity guarantee
beyond the center.
New server worlds now use findSeed() scaled to the full target world
size. Added override-seed in server.properties to fix existing worlds
without deleting them.
- Add VSync and Exclusive Fullscreen toggles to the graphics settings menu
- Rewrite D3D11 swap chain to use DXGI flip model with tearing support
- Fix black screen on resize by creating new swap chain instead of ResizeBuffers
- Revert conditional lighting optimization in Level::setTileAndData back to unconditional checkLight
- Revert deferred lightGaps flagging in LevelChunk::recalcHeight back to immediate lightGap calls
- Add SWF/ARC editing tools used to add new UI checkboxes
* add: Dedicated Server implementation
- Introduced `ServerMain.cpp` for the dedicated server logic, handling command-line arguments, server initialization, and network management.
- Created `postbuild_server.ps1` script for post-build tasks, including copying necessary resources and DLLs for the dedicated server.
- Added `CopyServerAssets.cmake` to manage the copying of server assets during the build process, ensuring required files are available for the dedicated server.
- Defined project filters in `Minecraft.Server.vcxproj.filters` for better organization of server-related files.
* add: refactor world loader & add server properties
- Introduced ServerLogger for logging startup steps and world I/O operations.
- Implemented ServerProperties for loading and saving server configuration from `server.properties`.
- Added WorldManager to handle world loading and creation based on server properties.
- Updated ServerMain to integrate server properties loading and world management.
- Enhanced project files to include new source and header files for the server components.
* update: implement enhanced logging functionality with configurable log levels
* update: update keyboard and mouse input initialization 1dc8a005ed
* fix: change virtual screen resolution to 1920x1080(HD)
Since 31881af56936aeef38ff322b975fd0 , `skinHud.swf` for 720 is not included in `MediaWindows64.arc`,
the app crashes unless the virtual screen is set to HD.
* fix: dedicated server build settings for miniaudio migration and missing sources
- remove stale Windows64 Miles (mss64) link/copy references from server build
- add Common/Filesystem/Filesystem.cpp to Minecraft.Server.vcxproj
- add Windows64/PostProcesser.cpp to Minecraft.Server.vcxproj
- fix unresolved externals (PostProcesser::*, FileExists) in dedicated server build
* update: changed the virtual screen to 720p
Since the crash caused by the 720p `skinHud.swf` not being included in `MediaWindows64.arc` has been resolved, switching back to 720p to reduce resource usage.
* add: add Docker support for Dedicated Server
add with entrypoint and build scripts
* fix: add initial save for newly created worlds in dedicated server
on the server side, I fixed the behavior introduced after commit aadb511, where newly created worlds are intentionally not saved to disk immediately.
* update: add basically all configuration options that are implemented in the classes to `server.properties`
* update: add LAN advertising configuration for server.properties
LAN-Discovery, which isn’t needed in server mode and could potentially be a security risk, has also been disabled(only server mode).
* add: add implementing interactive command line using linenoise
- Integrated linenoise library for line editing and completion in the server console.
- Updated ServerLogger to handle external writes safely during logging.
- Modified ServerMain to initialize and manage the ServerCli for command input.
- The implementation is separate from everything else, so it doesn't affect anything else.
- The command input section and execution section are separated into threads.
* update: enhance command line completion with predictive hints
Like most command line tools, it highlights predictions in gray.
* add: implement `StringUtils` for string manipulation and refactor usages
Unified the scattered utility functions.
* fix: send DisconnectPacket on shutdown and fix Win64 recv-thread teardown race
Before this change, server/host shutdown closed sockets directly in
ServerConnection::stop(), which bypassed the normal disconnect flow.
As a result, clients could be dropped without receiving a proper
DisconnectPacket during stop/kill/world-close paths.
Also, WinsockNetLayer::Shutdown() could destroy synchronization objects
while host-side recv threads were still exiting, causing a crash in
RecvThreadProc (access violation on world close in host mode).
* fix: return client to menus when Win64 host connection drops
- Add client-side host disconnect handling in CPlatformNetworkManagerStub::DoWork() for _WINDOWS64.
- When in QNET_STATE_GAME_PLAY as a non-host and WinsockNetLayer::IsConnected() becomes false, trigger g_NetworkManager.HandleDisconnect(false) to enter the normal disconnect/UI flow.
- Use m_bLeaveGameOnTick as a one-shot guard to prevent repeated disconnect handling while the link remains down.
- Reset m_bLeaveGameOnTick on LeaveGame(), HostGame(), and JoinGame() to avoid stale state across sessions.
* update: converted Japanese comments to English
* add: create `Minecraft.Server` developer guide in English and Japanese
* update: add note about issue
* add: add `nlohmann/json` json lib
* add: add FileUtils
Moved file operations to `utils`.
* add: Dedicated Server BAN access manager with persistent player and IP bans
- add Access frontend that publishes thread-safe ban manager snapshots for dedicated server use
- add BanManager storage for banned-players.json and banned-ips.json with load/save/update flows
- add persistent player and IP ban checks during dedicated server connection handling
- add UTF-8 BOM-safe JSON parsing and shared file helpers backed by nlohmann/json
- add Unicode-safe ban file read/write and safer atomic replacement behavior on Windows
- add active-ban snapshot APIs and expiry-aware filtering for expires metadata
- add RAII-based dedicated access shutdown handling during server startup and teardown
* update: changed file read/write operations to use `FileUtils`.
- As a side effect, saving has become faster!
* fix: Re-added the source that had somehow disappeared.
* add: significantly improved the dedicated server logging system
- add ServerLogManager to Minecraft.Server as the single entry point for dedicated-server log output
- forward CMinecraftApp logger output to the server logger when running with g_Win64DedicatedServer
- add named network logs for incoming, accepted, rejected, and disconnected connections
- cache connection metadata by smallId so player name and remote IP remain available for disconnect logs
- keep Minecraft.Client changes minimal by using lightweight hook points and handling log orchestration on the server side
* fix: added the updated library source
* add: add `ban` and `pardon` commands for Player and IP
* fix: fix stop command shutdown process
add dedicated server shutdown request handling
* fix: fixed the save logic during server shutdown
Removed redundant repeated saves and eliminated the risks of async writes.
* update: added new sever files to Docker entrypoint
* fix: replace shutdown flag with atomic variable for thread safety
* update: update Dedicated Server developer guide
English is machine translated.
Please forgive me.
* update: check for the existence of `GameHDD` and create
* add: add Whitelist to Dedicated Server
* refactor: clean up and refactor the code
- unify duplicated implementations that were copied repeatedly
- update outdated patterns to more modern ones
* fix: include UI header (new update fix)
* fix: fix the detection range for excessive logging
`getHighestNonEmptyY()` returning `-1` occurs normally when the chunk is entirely air.
The caller (`Minecraft.World/LevelChunk.cpp:2400`) normalizes `-1` to `0`.
* update: add world size config to dedicated server properties
* update: update README add explanation of `server.properties` & launch arguments
* update: add nightly release workflow for dedicated server and client builds to Actions
* fix: update name for workflow
* add random seed generation
* add: add Docker nightly workflow for Dedicated Server publish to GitHub Container Registry
* fix: ghost player when clients disconnect out of order
#4
* fix: fix 7zip option
* fix: fix Docker workflow for Dedicated Server artifact handling
* add: add no build Dedicated Server startup scripts and Docker Compose
* update: add README for Docker Dedicated Server setup with no local build
* refactor: refactor command path structure
As the number of commands has increased and become harder to navigate, each command has been organized into separate folders.
* update: support stream(file stdin) input mode for server CLI
Support for the stream (file stdin) required when attaching a tty to a Docker container on Linux.
* add: add new CLI Console Commands for Dedicated Server
Most of these commands are executed using the command dispatcher implemented on the `Minecraft.World` side. When registering them with the dispatcher, the sender uses a permission-enabled configuration that treats the CLI as a player.
- default game.
- enchant
- experience.
- give
- kill(currently, getting a permission error for some reason)
- time
- weather.
- update tp & gamemode command
* fix: change player map icon to random select
* update: increase the player limit
* add: restore the basic anti-cheat implementation and add spawn protection
Added the following anti-cheat measures and add spawn protection to `server.properties`.
- instant break
- speed
- reach
* fix: fix Docker image tag
---------
Co-authored-by: sylvessa <225480449+sylvessa@users.noreply.github.com>
---
Minecraft.Client/ClientConnection.cpp
Purpose: Propagate hardcore flag through network level creation
- handleLogin() (2 sites): Changed MultiPlayerLevel constructor calls from hardcoded false for the
hardcore parameter to packet->m_isHardcore, so the client-side level correctly knows it's hardcore
when joining a server.
- handleRespawn(): Same change - when creating a new dimension level on respawn, uses
packet->m_isHardcore instead of querying minecraft->level->getLevelData()->isHardcore() (which could
be stale/wrong).
---
Minecraft.Client/Common/App_Defines.h
Purpose: Define bitmask for hardcore host option
- Added GAME_HOST_OPTION_BITMASK_HARDCORE (0x40000000) - a new bit in the host options bitfield to
store whether the game is hardcore.
---
Minecraft.Client/Common/App_enums.h
Purpose: Add hardcore enum value
- Added eGameHostOption_Hardcore to the eGameHostOption enum so code can get/set the hardcore flag
via SetGameHostOption/GetGameHostOption.
---
Minecraft.Client/Common/Consoles_App.cpp
Purpose: Implement hardcore get/set in host options bitfield
- SetGameHostOption(): Added case eGameHostOption_Hardcore - sets or clears the
GAME_HOST_OPTION_BITMASK_HARDCORE bit.
- GetGameHostOption(): Added case eGameHostOption_Hardcore - returns 1 if the hardcore bit is set, 0
otherwise.
---
Minecraft.Client/Common/Consoles_App.h
Purpose: Store save folder name for hardcore world deletion
- Added SetCurrentSaveFolderName() and GetCurrentSaveFolderName() public methods.
- Added wstring m_currentSaveFolderName private member - stores the save folder name so the hardcore
death handler can find and delete the world.
---
Minecraft.Client/Common/UI/IUIScene_PauseMenu.cpp
Purpose: Delete hardcore world's save data on exit
- Added Win64_DeleteSaveDirectory() - a recursive directory deletion helper (Windows64 only).
- In _ExitWorld(): Before the server is torn down, captures whether this is a hardcore death exit
(getDeleteWorldOnExit()). Tries 3 sources for the save folder name: app storage, StorageManager, and
MinecraftServer.
- After the server fully stops, if shouldDeleteHardcoreWorld is true, deletes the entire
Windows64\GameHDD\<savefolder> directory.
---
Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.cpp
Purpose: Hardcore difficulty slider in Create World menu
- Added file-scope s_bHardcore flag to track when the slider is at position 4 (Hardcore).
- Constructor: Extended difficulty slider range from 0-3 to 0-4, resets s_bHardcore to false.
- handleSliderMove(): When slider value >= 4, sets s_bHardcore = true, stores actual difficulty as 3
(Hard), and displays "Hardcore" label. Otherwise behaves normally.
- CreateGame(): Clears the save folder name (new world), and sets eGameHostOption_Hardcore based on
s_bHardcore.
- Minor: Changed RequestErrorMessage to RequestAlertMessage for a content restriction dialog.
---
Minecraft.Client/Common/UI/UIScene_DeathMenu.cpp
Purpose: Hardcore death screen behavior (Iggy UI)
- Constructor: Checks if current level is hardcore. If so, shows IDS_HARDCORE_DEATH_MESSAGE on the
respawn button and hides it. Otherwise shows normal "Respawn" button.
- handlePress() - Respawn: Added safeguard - if hardcore, blocks respawn entirely.
- handlePress() - Exit Game: If hardcore and host, skips save dialog, disables save-on-exit, enables
delete-world-on-exit, and triggers immediate world exit.
---
Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp
Purpose: Show "Difficulty: Hardcore" in Load World menu + persist hardcore through game launch
- Static array: Expanded m_iDifficultyTitleSettingA from 4 to 5 entries, added IDS_GAMEMODE_HARDCORE
at index 4.
- Constructor: Initializes m_bHardcore = false. In Windows64 block: sets up thumbnail name from save
details, and reads isHardcore from params->saveDetails. If hardcore, immediately initializes the
difficulty slider to show "Hardcore" locked at position 4.
- tick(): When host options are read (bHostOptionsRead block), also reads the hardcore flag and
re-initializes the slider if needed (for console path).
- handleSliderMove(): If m_bHardcore, locks the slider at position 4 (prevents changing difficulty).
- StartGameFromSave(): Stores the save folder name in app for later hardcore deletion. Sets
eGameHostOption_Hardcore from m_bHardcore.
---
Minecraft.Client/Common/UI/UIScene_LoadMenu.h
Purpose: Declare hardcore member
- Expanded m_iDifficultyTitleSettingA from [4] to [5].
- Added bool m_bHardcore private member.
---
Minecraft.Client/Common/UI/UIScene_LoadOrJoinMenu.cpp
Purpose: Read hardcore flag from level.dat when building the save list
- ReadLevelNameFromSaveFile(): Added optional bool *outHardcore parameter. Inside the NBT Data
compound tag parsing, if outHardcore is non-null, reads dataTag->getBoolean(L"hardcore").
- Save enumeration block (Windows64): Passes &saveHardcore to ReadLevelNameFromSaveFile and stores
the result in m_saveDetails[i].isHardcore.
---
Minecraft.Client/Common/UI/UIStructs.h
Purpose: Add isHardcore to save list details struct
- Added bool isHardcore field to _SaveListDetails struct.
- Initialized to false in the constructor.
---
Minecraft.Client/Common/XUI/XUI_Death.cpp
Purpose: Hardcore death screen behavior (XUI/Xbox UI)
- Mirror of the Iggy UIScene_DeathMenu.cpp changes but for the XUI rendering path.
- OnInit(): Checks isHardcore(), hides respawn button and shows death message if true.
- OnNotifyPressEx() - Exit Game: If hardcore and host, skips save, flags world for deletion, exits
immediately.
- OnNotifyPressEx() - Respawn: Safeguard to block respawn in hardcore.
---
Minecraft.Client/Gui.cpp
Purpose: Syntax fix
- Fixed lines.push_back(L"" → lines.push_back(L"") - missing closing quote/paren in debug terrain
feature display.
---
Minecraft.Client/MinecraftServer.cpp
Purpose: Server-side hardcore support
- Constructor: Initializes m_deleteWorldOnExit = false.
- loadLevel(): Captures the save folder name from StorageManager into m_saveFolderName for later use
in hardcore world deletion.
- isHardcore(): Changed from always returning false to returning
app.GetGameHostOption(eGameHostOption_Hardcore) > 0 - this is the key change that makes the server
actually report hardcore mode.
---
Minecraft.Client/MinecraftServer.h
Purpose: Declare hardcore-related members
- Added bool m_deleteWorldOnExit and wstring m_saveFolderName private members.
- Added setDeleteWorldOnExit(), getDeleteWorldOnExit(), and getSaveFolderName() public methods.
---
Minecraft.Client/PlayerConnection.h
Purpose: Thread-safety fix for kicked flag
- Changed m_bWasKicked from bool to std::atomic<bool> (initialized with {false}).
- Changed setWasKicked()/getWasKicked() to use .store()/.load() - fixes a race condition where the
kicked flag is set on one thread and read on another.
---
Minecraft.Client/PlayerList.cpp
Purpose: Hardcore multiplayer - ban, respawn as Adventure, thread-safe bans
- Constructor/Destructor: Added InitializeCriticalSection/DeleteCriticalSection for m_banCS.
- placeNewPlayer(): Passes isHardcore() flag to the LoginPacket constructor so clients joining know
it's hardcore.
- respawn(): After respawn in hardcore, forces the player into Adventure mode (spectate-like: can
look around but not interact). Sends GameEventPacket to sync client.
- respawn() and toggleDimension() (2 sites): Pass isHardcore() to RespawnPacket constructor.
- isXuidBanned(): Wrapped m_bannedXuids iteration with EnterCriticalSection/LeaveCriticalSection for
thread safety.
- banXuid() (new): Thread-safe method to add a player's XUID to the ban list - used when a player
dies in hardcore multiplayer.
---
Minecraft.Client/PlayerList.h
Purpose: Declare ban-related additions
- Added CRITICAL_SECTION m_banCS to protect m_bannedXuids.
- Added void banXuid(PlayerUID xuid) public method.
---
Minecraft.Client/SelectWorldScreen.cpp
Purpose: Show [Hardcore] badge in Java-style world list
- In renderItem(): If levelSummary->isHardcore(), appends [Hardcore] to the world name display.
---
Minecraft.Client/ServerPlayer.cpp
Purpose: Hardcore death behavior on server
- die(): If the level is hardcore, switches the dead player to Adventure mode (so they can't
interact if somehow respawned).
- Minor: Two comment lines changed // → /// (no functional change).
---
Minecraft.Client/Windows64Media/strings.h
Purpose: String IDs for hardcore UI text
- Added 8 new string IDs (2286-2293): IDS_GAMEMODE_HARDCORE, IDS_HARDCORE, IDS_HARDCORE_TOOLTIP,
IDS_HARDCORE_WARNING_TITLE, IDS_HARDCORE_WARNING_TEXT, IDS_HARDCORE_DEATH_MESSAGE,
IDS_LABEL_HARDCORE, IDS_GAMEOPTION_HARDCORE.
---
Minecraft.World/ConsoleSaveFileOriginal.cpp
Purpose: Capture save folder name after first save (for new worlds)
- SaveSaveDataCallback() (Windows64 only): After a successful save, if the app doesn't yet know the
save folder name, attempts to capture it via StorageManager or by scanning Windows64\GameHDD\ for
the newest folder. This handles the case where a newly-created hardcore world hasn't been saved yet
when the folder name is needed.
---
Minecraft.World/DisconnectPacket.h
Purpose: Hardcore disconnect reason
- Added eDisconnect_HardcoreDeath to the disconnect reason enum - used when kicking a player who
died in hardcore multiplayer.
---
Minecraft.World/LoginPacket.cpp & LoginPacket.h
Purpose: Serialize hardcore flag in login packet
- Added bool m_isHardcore member, initialized to false in both constructors.
- Server→Client constructor now accepts bool isHardcore = false parameter.
- read(): Reads m_isHardcore from the stream.
- write(): Writes m_isHardcore to the stream.
- getEstimatedSize(): Added sizeof(bool) for the new field.
---
Minecraft.World/RespawnPacket.cpp & RespawnPacket.h
Purpose: Serialize hardcore flag in respawn packet
- Added bool m_isHardcore member, initialized to false.
- Constructor now accepts bool isHardcore = false parameter.
- read()/write(): Serialize m_isHardcore via readBoolean()/writeBoolean().
- getEstimatedSize(): Changed from 13 to 14 bytes to account for the new boolean.
* Fixed boats falling and a TP glitch #266
* Replaced every C-style cast with C++ ones
* Replaced every C-style cast with C++ ones
* Fixed boats falling and a TP glitch #266
* Updated NULL to nullptr and fixing some type issues
* Modernized and fixed a few bugs
- Replaced most instances of `NULL` with `nullptr`.
- Replaced most `shared_ptr(new ...)` with `make_shared`.
- Removed the `nullptr` macro as it was interfering with the actual nullptr keyword in some instances.
* Fixing more conflicts
* Replace int loops with size_t and start work on overrides
* Add safety checks and fix a issue with vector going OOR
This code was not tested and breaks in Release builds, reverting to restore
functionality of the nightly. All in-game menus do not work and generating
a world crashes.
This reverts commit a9be52c41a.
* Fixed boats falling and a TP glitch #266
* Replaced every C-style cast with C++ ones
* Replaced every C-style cast with C++ ones
* Fixed boats falling and a TP glitch #266
* Updated NULL to nullptr and fixing some type issues
* Modernized and fixed a few bugs
- Replaced most instances of `NULL` with `nullptr`.
- Replaced most `shared_ptr(new ...)` with `make_shared`.
- Removed the `nullptr` macro as it was interfering with the actual nullptr keyword in some instances.
* Fixing more conflicts
* Replace int loops with size_t and start work on overrides
* FOV option without debug menu
Now located in Graphics section.
Based on the FOV thing from discord idk
* language
* render distance option for graphics menu
* oop
* swf files on media
* revert changes on language selector
* nvm it was actually easy to fix
* forgot this
* Final probably
Fixed visual bug and made the chunk updates depend to your view distance.
* Save FOV value to settings.dat
* Batch font drawing to fix debug overlay FPS
* Revert "Batch font drawing to fix debug overlay FPS"
This reverts commit 7dcecdbd4d6037194e75d9fe3130845dd8690928.
People keep breaking random stuff by using these settings, so turn them
off for now in release builds. If folks can figure out how to compile a
debug build locally, they can use em :)
- Skip QuadrantSignin (profile selector) on Windows64 in both LoadMenu
and CreateWorldMenu, proceeding directly to local play since Xbox Live
stubs always return true for IsSignedInLive()
- Fix IsLocalMultiplayerAvailable() to not require IsHiDef() on Windows64
- Allow pad-connected players to join without a profile sign-in check
- Fix ghost RemotePlayer creation by scanning all local player slots and
matching on server-assigned player index rather than controller slot,
fixing P3/P4 ghost entities when joining out of controller order
- Give each player a unique name (Player 1-4) based on controller index
instead of a single shared stub name
- Use raw XInput (XInputGetState) for secondary controller join detection,
bypassing the 4J toggle system which consumes all button presses before
game logic runs; uses a 120-frame latch for a reliable detection window
- Add .gitignore for Visual Studio build artifacts and output directories