Commit graph

768 commits

Author SHA1 Message Date
Riley M. c0da06e4ee
major: Switch to forward slashes(+more) to fix compilation on Linux (#1403)
Notably also adds some metadata files for NixOS 

* add support for linux clang cross compiles

* add linux clang instructions

* un-capitalize Mob.horse.*

* update the description in flake.nix

---------

Co-authored-by: Loki <lokirautio@gmail.com>
2026-04-14 16:47:37 -05:00
Fireblade 8d72625516
feat: neoLegacy logo
Signed-off-by: George V. <georgev22.github@gmail.com>
2026-04-14 22:26:00 +03:00
George V. 9803addf5c
chore: clean up the Minecraft.Client/Common/Media folder 2026-04-14 21:20:44 +03:00
George V. 8bfebcabf4
Merge branch 'pieeebot:main' into upstream-merge 2026-04-14 19:32:01 +03:00
SevenToaster509 cc94cb8966 Feature: Players start with an empty map instead of a drawn map 2026-04-14 16:47:23 +01:00
Lord_Cambion 02ea52926c feat: sprintable horse and boats 2026-04-14 17:33:07 +02:00
George V. 00af47178d
refactor: Remove worldSizeChunks param from BiomeSource::findSeed 2026-04-13 23:02:05 +03:00
George V. 2ddf72a4eb
fix(audio): restore missing comma lost in upstream merge
A comma between "item.armor.equip_generic6" and "damage.critical" was
accidentally dropped during an upstream merge, causing the two entries
to be concatenated into a single string literal at compile time.

This produced an invalid sound key and led to crashes when:
- equipping armor
- triggering critical hits
2026-04-13 22:45:10 +03:00
George V. c2c4eb6ea8
fix: Change string ID for Elder Guardian entity
The string identifier for the Elder Guardian entity was set
to `IDS_GUARDIAN_ELDER`. This has been changed to the
consistent identifier `IDS_ELDER_GUARDIAN`.

Additionally, the localization file has been updated to include the
missing string definitions for both `IDS_GUARDIAN` and
`IDS_ELDER_GUARDIAN`
2026-04-13 22:43:19 +03:00
George V. ac7a207597
Merge branch 'main' into upstream-merge
# Conflicts:
#	Minecraft.Client/Windows64Media/strings.h
#	Minecraft.World/BiomeSource.cpp
#	Minecraft.World/BiomeSource.h
2026-04-13 22:26:43 +03:00
SevenToaster509 f307d7b0eb Fix: Enchanting Table taking wrong levels
Was using cost instead of the index of the slot
2026-04-13 17:25:19 +01:00
Lord_Cambion 4fe92f9a5a changed: guardians placeholders 2026-04-13 18:21:58 +02:00
SevenToaster509 5656aa979f Fix: Controller support broken on LoadMenu
SWF updates:
LoadMenu1080
CreateWorldMenu1080
2026-04-13 16:35:46 +01:00
George V. 80179ae3be
Merge branch 'main' into upstream-merge 2026-04-13 17:56:40 +03:00
George V. 734f186cd3
Merge remote-tracking branch 'itsRevela/main' into upstream-merge
# Conflicts:
#	Minecraft.Client/Common/Audio/SoundNames.cpp
#	Minecraft.Client/SheepRenderer.cpp
#	Minecraft.World/SoundTypes.h
#	README.md
#	cmake/CopyAssets.cmake
2026-04-13 17:54:36 +03:00
George V. edeb0d2230
Merge branch 'main' into upstream-merge
# Conflicts:
#	.github/workflows/nightly.yml
#	Minecraft.Server/cmake/sources/Common.cmake
2026-04-13 17:39:46 +03:00
SevenToaster509 0606ce717d Refactor: Allow slider to be set
WARNING: REQUIRES ARC TO BE EDITED TO FUNCTION, PUSHED THIS TASK TO georgev22
2026-04-13 15:30:40 +01:00
George V. 5efd489229
fix: Prevent crash when displaying hardcore difficulty label
The hardcore difficulty label was using the raw string ID `IDS_HARDCORE` (oops)
instead of a localized string, which caused a crash in the UI.

Replaced `IDS_HARDCORE` with `app.GetString(IDS_HARDCORE)`
2026-04-13 17:18:15 +03:00
George V. 6d98c4ebf6
fix: Prevent gamemode slider movement when hardcore mode is enabled
Add virtual `canMoveSlider` method to UIScene base class and override it
in both LoadMenu and CreateWorldMenu scenes. The method returns false
when attempting to move the gamemode slider while hardcore mode is active,
effectively locking the slider in that state.

The UIController now checks `canMoveSlider` before initiating a slider
drag and during ongoing drag updates.
2026-04-13 17:18:15 +03:00
itsRevela 0544add4e2 chore: remove redundant/unused 4JLibs files 2026-04-13 03:15:58 -05:00
Loki Rautio f78dec6e00 Remove redundant/unused 4JLibs files
also adds some countermeasures against, yknow.
2026-04-13 01:26:36 -05:00
Tyler Reese 6913ce5323 fix: Implement missing critical hit sound (#1141) 2026-04-13 00:51:16 -05:00
DrPerkyLegit 71707fbb8c Add Chat Formatting Support For Servers (#1483) 2026-04-13 00:49:49 -05:00
GabsPuNs ae9dbd837d Exclude more files, reduce build .zip size (#1374) 2026-04-13 00:48:43 -05:00
Toru the Red Fox 825e96da54 Request dedicated GPU (#850) 2026-04-13 00:47:00 -05:00
Botch dea2bad0c4 fix: Disable font mipmapping (#1410) 2026-04-13 00:46:32 -05:00
DrPerkyLegit ae3c843ee5 fix: Increase entity network limit to 16k entities (#1492) 2026-04-13 00:43:18 -05:00
DrPerkyLegit 6c572d4940 feat: Scrollable chat (#1493) 2026-04-13 00:42:04 -05:00
DrPerkyLegit 5e7ad7333e Better Text Scaling (#1494)
* f3 menu text scaling

* Reduce overscaling above 1080p

Restores original scaling for 1440p to try and keep the text size more
sane on high DPI monitors

---------

Co-authored-by: Loki Rautio <lokirautio@gmail.com>
2026-04-13 00:37:54 -05:00
Tyler Reese 78afb091a4
fix: Implement missing critical hit sound (#1141)
* Fix

* Crit Sound Now Plays On Death

* Revert BuildVer.h

---------

Co-authored-by: Loki <lokio.casebstv@gmail.com>
2026-04-12 23:24:29 -05:00
Tyler Reese 2d41711055
fix: Prevent contextually wrong music from playing (#1138) 2026-04-12 23:22:14 -05:00
DrPerkyLegit 14f8d793dd
Add Chat Formatting Support For Servers (#1483)
* add chat support for html formatting

* html character serialization, normal color format support

* change for chat input handling on color

has a bug where the text after the cursor gets stripped of its color, need to make a function to backstep on a string and find the last used color codes, or get all color codes used before the string is split, and apply them to the start of the next string

* expose jukebox label as action bar like java

* prevent players from sending chat color

* restore non styled chat size check
2026-04-12 23:17:45 -05:00
GabsPuNs bfcb621808
Exclude more files, reduce build .zip size (#1374)
* Fix Sign

* Exclude more files from the compilation.

* Remove Trial and Tutorial folder in Common, Tutorial world is in windows64media
2026-04-12 23:17:21 -05:00
Toru the Red Fox 050c501786
Request dedicated GPU (#850) 2026-04-12 22:56:24 -05:00
Botch e5ce9a06cd
fix: Disable font mipmapping (#1410)
Fixes visual artifacts with signs, improving legibility at distances
2026-04-12 22:55:07 -05:00
Us3ful"-Dev e730033bcc
fix: Prevent end poem crash (#1489)
Removed player name check that always fails to work on non host instances
2026-04-12 22:53:39 -05:00
DrPerkyLegit 82c1ae1968
fix: Increase entity network limit to 16k entities (#1492) 2026-04-12 22:50:46 -05:00
DrPerkyLegit c7014f6b18
feat: Scrollable chat (#1493)
* chat scrolling

* allow escape to close chat instead of opening pause
2026-04-12 22:50:16 -05:00
DrPerkyLegit 744048f455
Better Text Scaling (#1494)
* f3 menu text scaling

* Reduce overscaling above 1080p

Restores original scaling for 1440p to try and keep the text size more
sane on high DPI monitors

---------

Co-authored-by: Loki Rautio <lokirautio@gmail.com>
2026-04-12 22:48:08 -05:00
Firebladedoge229 190f9eff2c fix: server failing from localization changes + abrupt wine crash on exit 2026-04-13 04:51:00 +03:00
SevenToaster509 3d57609e12 Chore: Disable track debugging
Hope no-one needs it, it was pissing me off
2026-04-12 20:43:55 +01:00
SevenToaster509 e0cc846be5 Fix: Lapis Slot for Enchanting takes and consumes any item 2026-04-12 18:42:59 +01:00
SevenToaster509 48ce29a28e Fix: Clicking book while signing removes signing text, Clicking book when book is signed allows text editing, Added default resolution to not crash on smaller screens (720p and less) 2026-04-12 18:25:27 +01:00
Logan Gibson d8da9af7fe
Add particles when fishing (#1)
Co-authored-by: Lord_Cambion <lordcambion.gaming@gmail.com>
2026-04-12 14:18:03 +03:00
George V. 7d05b6a9d6
fix: Replace hardcoded "Hardcore" string with localization resource ID
Replace the hardcoded string literal "Hardcore" in the difficulty slider
label with the localization resource identifier `IDS_HARDCORE` in both
the load menu and create world menu scenes.
2026-04-12 00:41:17 +03:00
Fireblade c322f759f3
Merge branch 'GeorgeV220:upstream-merge' into upstream-merge 2026-04-11 17:25:50 -04:00
Firebladedoge229 e77458b7e8 fix: folderFile common linking 2026-04-11 17:24:49 -04:00
George V. 401ccbcdc9
fix: lock survival when hardcore and swf changes 2026-04-12 00:22:38 +03:00
Firebladedoge229 4d10af2ccb chore: update logo 2026-04-11 16:52:18 -04:00
George V. 1a78363ee5
Merge branch 'main' into upstream-merge
# Conflicts:
#	Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.cpp
#	Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp
#	Minecraft.Client/Common/UI/UIScene_LoadMenu.h
2026-04-11 23:36:43 +03:00
George V. 18f7d9a219
feat: merge hardcore hearts 2026-04-11 23:10:43 +03:00
George V. 84f1382a40
chore: merge Windows 64-bit media SWF files from revelations 2026-04-11 22:31:37 +03:00
SevenToaster509 a58b14a2ea Feat: Changed game mode selection to a slider 2026-04-11 20:03:09 +01:00
George V. 192c2a3c5c
feat: implement recursive folder traversal for file indexing
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.
2026-04-11 20:49:57 +03:00
George V. 224dd491b9
chore: add MediaWindows64 directory to server target assets 2026-04-11 19:12:13 +03:00
George V. bb04d465db
feat: replace ArchiveFile with FolderFile for media asset loading
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.
2026-04-11 18:57:54 +03:00
piebot 08d68d6cdd chore: rebrand to neoLegacy 2026-04-11 18:21:40 +03:00
itsRevela abb18e3e12 fix: new players kicked when joining right after being whitelisted
When a new player was whitelisted while they were sitting on the join screen, their next attempt would insta-kick before the world ever loaded, and the retry after that would let them in for roughly 20 seconds before booting them with "connection closed". Two separate bugs were colliding.

The first kick was a stale cancel flag on the client. When the server rejects a join, the "Connecting to host..." screen tears down, and its teardown path fires the cancel callback defensively. That flag would latch on without ever being consumed, so the very first tick of the next join attempt saw it and immediately closed the fresh connection. Clearing the flag when a new join starts prevents this.

The second kick was an orphan on the server. When the first failed join's TCP dropped, its slot got recycled for the next successful join, but the half-built login object from the broken attempt was still in the pending queue. 30 seconds later its "login took too long" timer fired, and the disconnect packet it tried to send was routed to whoever currently held that slot, which was now the new in-world player. It landed on their live socket and kicked them. Telling the game's Socket layer about the TCP drop lets the orphan clean itself up, and refusing to write on an already-closing socket stops any late packet from leaking into the recycled slot.
2026-04-11 08:13:46 -05:00
itsRevela f189234614 feat: uncap fps in fullscreen for lower input latency
Before this change, turning VSync off did not actually uncap your frame rate. The game ran in borderless fullscreen, where Windows' desktop compositor owns the display pipeline and applies its own VSync regardless of what the game asks for. So on a 240Hz monitor with a GPU that could draw 800fps, you still only saw 240 frames per second and the other 560 were thrown away. Worse, the frames you did see were up to a refresh cycle stale by the time they hit your eyes, which is input latency you can feel when moving the camera or aiming.

Fullscreen now uses true DXGI exclusive mode, where the compositor is out of the way and the swap chain writes directly to the display. Every frame the GPU produces lands on screen as soon as it is ready, so "VSync off" actually does something. Expect FPS to climb well past your monitor's refresh rate and the mouse to feel noticeably more responsive.

Exclusive fullscreen also displays at your monitor's native resolution with no driver-side scaling or filtering. The backbuffer is grown to match the monitor exactly before the transition, and the display mode is pinned to the backbuffer size so nothing in the output pipeline resamples your pixels on the way to the screen. The result is a crisp 1:1 image with none of the softening or greyish filter that stretched output can introduce.

Yes, this is the mode where screen tearing can happen. Tearing gets a bad reputation but it is a visual tradeoff, not a bug, and many players prefer it over the latency VSync causes. If you want to avoid tearing, just turn VSync on in the settings and the game will cap cleanly to your refresh rate. You now have a real choice between the two instead of "off" quietly being broken.

Under the hood, F11 and the saved fullscreen preference both route through a new ApplyExclusiveFullscreen path that does Microsoft's recommended transition: grow the window to cover the monitor, ResizeTarget with no scaling so the display mode is pinned to the backbuffer size, SetFullscreenState(TRUE), SetColorSpace1(sRGB), then a second ResizeTarget so picky drivers actually apply the mode. Exit forces a real decorated windowed state so F11 cycles cleanly between windowed and exclusive fullscreen. ResizeD3D skips its swap-chain-recreate path while in exclusive mode so it does not fight DXGI for ownership.

The swap chain's RefreshRate changes from a hardcoded 60Hz to 0/0 so DXGI matches the current display mode. Fixes an "input signal out of range" error that could happen on high-refresh monitors after entering fullscreen, where the monitor was being asked to renegotiate timing off of 240Hz down to 60Hz on every launch.
2026-04-11 06:19:22 -05:00
itsRevela 6c8f463707 fix: restore in-world rendering and aspect ratio via bitblt swap chain
The previous FLIP_DISCARD swap chain configuration was producing broken rendering and a stretched aspect ratio on startup and after window resize, because the closed-source 4J Renderer library holds hidden backbuffer references that prevent ResizeBuffers from succeeding in flip mode. Switches the swap chain to the legacy bitblt DISCARD model with BufferCount=1, which lets the "destroy old, create new" resize path in ResizeD3D work cleanly. In-world rendering and aspect ratio are now correct at launch and across window resizes.

Known regression from this change: screen tearing no longer works when VSync is off. On Windows 10 and 11, bitblt swap chains always go through the DWM compositor, which locks presentation to the monitor refresh rate regardless of the SyncInterval parameter we pass to Present. Every frame the renderer produces above the refresh rate is silently dropped by DWM, which hurts input latency compared to a true uncapped-fps presentation path. The next iteration will reverse-engineer the 4J Renderer struct layout to find where those hidden backbuffer references are stored, release them before ResizeBuffers, and switch back to FLIP_DISCARD with ALLOW_TEARING so real tearing is possible again.

Also removes the dead SwapChainVSyncProxy COM wrapper. The proxy was originally intended to intercept Present calls from the Renderer library for VSync control, but the library hardcodes SyncInterval=1 and does not dispatch Present through the proxy vtable, so it was never actually doing anything useful.
2026-04-11 02:49:53 -05:00
Tyler Reese 7ea30d026c Fix _jeb easter egg on sheep (#1488)
Fixed the original jeb sheep behavior.

For some reason the later code (now commented out) just completely overrid it
2026-04-11 02:02:23 -05:00
itsRevela a07bc651b3 chore: sync credits screen and Star History with upstream org rename
The upstream project (formerly smartcmd/MinecraftConsoles, now MCLCE/MinecraftConsoles) reorganized their in-game credits screen. This pulls in that restructure so our credits accurately reflect who the current and former upstream maintainers are, and points the attribution URL at the right place. codeHusky and mattsumi stay as Project Maintainers, and itsRevela is added alongside them. smartcmd, Patoke, and rtm516 move to a new Former Maintainers section. The contributor count ticks up from 100+ to 120+, and the credit URL at the bottom now reads github.com/MCLCE/MinecraftConsoles with a "(formerly smartcmd/MinecraftConsoles)" line underneath it.

On the README side, only the Star History chart URL was updated from smartcmd to MCLCE. The Nightly client and dedicated server download links stay pointed at itsRevela/LCE-Revelations since our fork has its own release pipeline.

Upstream attribution: d0786f95 by Loki Rautio. Applied as a partial cherry-pick with the two Nightly download URL hunks dropped and itsRevela added to the maintainer list.
2026-04-11 02:01:26 -05:00
Fireblade 37ee04356b feat. set intro scene background to white (#1474) 2026-04-11 01:52:01 -05:00
itsRevela 28d997a8d0 chore: rename project from MinecraftConsoles to LCE-Revelations
The personal repo was renamed from itsRevela/MinecraftConsoles to itsRevela/LCE-Revelations, so this sweeps the rest of the codebase to match. In-game, the credits screen now shows "LCE-Revelations" instead of "MinecraftConsoles" as the project heading. In the README, the Nightly client and dedicated server download links point at the new repo URL, and the Docker image reference is now ghcr.io/itsrevela/lce-revelations-dedicated-server. The dedicated server's generated server.properties file also picks up a new header comment reflecting the rename.

For folks building from source: the CMake project name was renamed, so when you configure the build the generated solution file is now LCE-Revelations.sln instead of MinecraftConsoles.sln. The Nix flake description and the Nightly release uploader script were updated to match, and a historical FourKit port reconnaissance document was removed since that port is already complete.

Also restored the Fluxer server link at the top of the README, which was lost when the repo was fast-forwarded from the upstream that got griefed.
2026-04-11 01:38:35 -05:00
itsRevela a191df1f2e fix: controller cursor speed no longer scales with framerate
When framerate was uncapped (vsync off, high-end hardware), the controller cursor in the inventory and creative menus moved way too fast. Basically unusable unless you switched to the dpad. The cursor update was tied to how often the screen redraws, so the faster the game ran, the faster the cursor flew.

Now the cursor moves a smaller distance per frame at higher framerates, so the actual on-screen speed stays the same whether you're at 60 FPS or 600 FPS.

While fixing this I also found an old workaround that was rounding the cursor position to whole pixels every frame and nudging it by 1 pixel to keep it from getting stuck. That nudge was pointing the wrong way on the vertical axis, which made up/down movement feel broken once the per-frame distance got small. Removed the rounding and the nudge. The cursor can now hold a fractional position between frames, and the part of the code that actually draws the cursor still snaps it to whole pixels on screen.

Fixes #3
2026-04-10 21:38:43 -05:00
George V. a175854dab
fix: Resolve missing Guardian files in server build causing CI failure
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).
2026-04-11 03:05:03 +03:00
George V. a0f4063807
Merge branch 'main' into upstream-merge 2026-04-11 02:52:52 +03:00
Fireblade 0ed96f1592
fix: resolve merge conflicts and integrate XML locale updates (#1)
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
2026-04-11 02:47:59 +03:00
George V. 0ad7e383fa
Merge branch 'main-re' into upstream-merge 2026-04-10 22:00:17 +03:00
SevenToaster509 c038506071 Feat: Armour Quick Equip, Fix: Baby Armour on Players 2026-04-10 16:06:57 +01:00
SevenToaster509 490ac0eed1 Feat: Updated Enchanting Mechanics
Updated in the ARC:
EnchantingMenu1080
SkinHDGraphicsInGame
SkinHDInGame

may have override other changes in the arc but it dont think so...
2026-04-10 13:18:42 +01:00
Lord_Cambion 61b6e6adca feat: Guardians 2026-04-10 14:03:32 +02:00
itsRevela 20229fc07b fix: dedicated server thread safety, disconnect deadlock, and console freeze
- 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
2026-04-10 01:12:59 -05:00
itsRevela 9c9df615a1 fix: beacon menu item consumption, data sync, and button state issues
- 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
2026-04-09 21:34:48 -05:00
discordbotdude c7127b219d
Implemented Minigames button in main menu
Allowing minigames button functionality.
2026-04-09 23:17:46 +01:00
George V. 28cfb83682
fix: Remove duplicate STB_IMAGE_WRITE_IMPLEMENTATION include for Windows64
The Windows64 platform had duplicate include statements for
stb_image_write.h
2026-04-09 21:04:18 +03:00
George V. a0d5c649b9
refactor: remove duplicate custom name handling in boss renderers
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.
2026-04-09 21:03:30 +03:00
George V. 506ebd2176 Merge remote-tracking branch 'itsRevela/main'
# Conflicts:
#	.github/workflows/nightly.yml
#	.gitignore
#	Minecraft.Client/ChatScreen.cpp
#	Minecraft.Client/ClientConnection.cpp
#	Minecraft.Client/Common/Audio/SoundEngine.cpp
#	Minecraft.Client/Common/Audio/SoundEngine.h
#	Minecraft.Client/Common/Media/MediaWindows64.arc
#	Minecraft.Client/Common/UI/IUIScene_HUD.cpp
#	Minecraft.Client/Common/UI/UIControl_Base.cpp
#	Minecraft.Client/Common/UI/UIScene_DeathMenu.cpp
#	Minecraft.Client/Common/UI/UIScene_JoinMenu.cpp
#	Minecraft.Client/Common/XUI/XUI_Chat.cpp
#	Minecraft.Client/Common/XUI/XUI_Death.cpp
#	Minecraft.Client/Font.cpp
#	Minecraft.Client/Gui.cpp
#	Minecraft.Client/PendingConnection.cpp
#	Minecraft.Client/PlayerConnection.cpp
#	Minecraft.Client/PlayerConnection.h
#	Minecraft.Client/PlayerList.cpp
#	Minecraft.Client/Windows64/Network/WinsockNetLayer.cpp
#	Minecraft.Client/Windows64/Network/WinsockNetLayer.h
#	Minecraft.Client/Windows64Media/strings.h
#	Minecraft.Client/cmake/sources/Common.cmake
#	Minecraft.Server/Console/ServerCliEngine.cpp
#	Minecraft.Server/Console/commands/whitelist/CliCommandWhitelist.cpp
#	Minecraft.Server/Windows64/ServerMain.cpp
#	Minecraft.World/WitherBoss.h
#	Minecraft.World/cmake/sources/Common.cmake
#	README.md
2026-04-09 15:21:43 +03:00
Tyler Reese d25b762ca5
Fix _jeb easter egg on sheep (#1488)
Fixed the original jeb sheep behavior.

For some reason the later code (now commented out) just completely overrid it
2026-04-08 22:34:48 -05:00
itsRevela 71b1bf92b8 Revert "fix: tutorial world"
This reverts commit 222852c11b.
2026-04-08 13:00:44 -05:00
neoapps-dev 0ddac15fad fix: linux cross-compiling 2026-04-08 13:07:04 +03:00
neoapps-dev 9babdac928 fix: linux cross-compiling 2026-04-08 12:44:56 +03:00
neoapps-dev 222852c11b fix: tutorial world 2026-04-08 12:21:09 +03:00
ryleu 5eab358dde add support for linux clang cross compiles 2026-04-08 12:03:15 +03:00
neoapps-dev b2f00d16e6 feat: cancel join 2026-04-08 11:47:25 +03:00
irice7 d191bee468 Add cancel join
Adds the Cancel Join tooltip to the "Connecting to host"
progress bar
2026-04-08 11:47:01 +03:00
itsRevela 42a582fb9f feat: add FourKit plugin host with dual server build
Adds the FourKit .NET 10 plugin host as a second dedicated server
build flavour alongside the existing vanilla server. Both flavours
build from the same source tree, with FourKit gated by the
MINECRAFT_SERVER_FOURKIT_BUILD preprocessor define.

Build layout:

  Minecraft.Server         vanilla, no plugin support, no .NET dep
  Minecraft.Server.FourKit FourKit-enabled, ships with bundled
                           .NET 10 self-contained runtime in runtime/
                           and an empty plugins/ folder

Both produce a Minecraft.Server.exe in their own per-target output
dir. The variant identity lives in the directory name, not the
binary name, so either flavour can be shipped as a drop-in.

Native bridge (Minecraft.Server/FourKit*.{cpp,h}):

* FourKitRuntime: hosts CoreCLR via hostfxr's command-line init API
  (the runtime-config API does not support self-contained components)
* FourKitBridge: ~50 Fire* event entry points, with inline no-op
  stubs for the standalone build so gameplay code can call them
  unconditionally
* FourKitNatives: ~80 native callbacks the managed side invokes
  for player/world/inventory mutations
* FourKitMappers: type and enum mapping helpers

Managed plugin host (Minecraft.Server.FourKit/):

* Bukkit-style API: Player, World, Block, Inventory, Command,
  Listener, EventHandler attribute, ~54 event classes
* PluginLoader with per-plugin AssemblyLoadContext
* FourKitHost as the [UnmanagedCallersOnly] entry point table
* Runtime resolves plugins relative to the host process so they
  always live next to Minecraft.Server.exe regardless of where the
  managed assembly itself is loaded from

Engine hooks (Minecraft.Client/, Minecraft.World/):

* Player lifecycle (PreLogin, Login, Join, Quit, Kick, Move,
  Teleport, Portal, Death) wired into PendingConnection and
  PlayerConnection without disturbing the cipher handshake or
  identity-token security flow
* Inventory open/click/drop hooks across every container menu type
* Block place/break/grow/burn/spread/from-to hooks across the
  full tile family
* Bed enter/leave, sign change, entity damage/death, ender pearl
  teleport hooks

Regression fixes preserved while applying donor diffs:

* ServerPlayer::die() retains the LCE-Revelations hardcore branch
  (setGameMode(ADVENTURE) + banPlayerForHardcoreDeath) in both the
  FourKit and non-FourKit code paths
* ServerLevel::entityAdded() retains the sub-entity ID reassignment
  loop required by the client's handleAddMob offset, fixing Ender
  Dragon and Wither boss multi-part hit detection
* LivingEntity::travel() retains the raw Player* cast and the
  cached frictionTile, both Revelations perf wins that the donor
  silently reverted
* ServerLogger.cpp keeps the file-logging code donor stripped
* PlayerList.cpp end portal transition fix and UIScene_EndPoem
  bounds-check are intact

Build system:

* Top-level CMakeLists.txt adds the Minecraft.Server.FourKit
  subdirectory and pulls in the new shared cmake/ServerTarget.cmake
  helper
* Minecraft.Server/cmake/sources/Common.cmake is now location
  independent (uses CMAKE_CURRENT_LIST_DIR) so the source list
  can be consumed from either server target's CMakeLists.txt
* The seven FourKit*.cpp/h files live in their own
  _MINECRAFT_SERVER_COMMON_SERVER_FOURKIT variable so the
  standalone target omits them
* configure-time .NET 10 SDK check fails fast with a clear
  download link if the SDK is missing
* global.json pins the SDK to 10.0.100 with latestFeature
  rollforward

Sample plugin (samples/HelloPlugin/) demonstrates the loader and
the PlayerJoinEvent listener pattern.

CI:

* nightly.yml builds both server flavours, ships
  LCE-Revelations-Server-Win64.zip and
  LCE-Revelations-Server-Win64-FourKit.zip, attests both, and
  updates release notes for the dual-flavour layout
* pull-request.yml pulls in actions/setup-dotnet so the FourKit
  publish step works in PR validation
* All zip artifacts and the client zip are renamed from
  LCREWindows64 to LCE-Revelations-{Client,Server}-Win64

Documentation:

* COMPILE.md gets a VS 2022 quick start, .NET 10 prereq section,
  server flavours explanation, and a troubleshooting section
* docs/FOURKIT_PORT_RECON.md captures the file-by-file recon that
  drove the port
* docs/FOURKIT_PARITY.md is the canonical reference for which
  events FourKit fires

Docker:

* docker-compose.dedicated-server.yml MC_RUNTIME_DIR default points
  at the vanilla CMake output. The FourKit Docker image is
  intentionally NOT shipped yet because hosting .NET 10 self
  contained inside Wine has not been smoke-tested
2026-04-08 03:02:48 -05:00
Loki Rautio d0786f956d Update more references to old smartcmd repo 2026-04-07 20:29:32 -05:00
George V. 308c07a7fd fix: correct mode-based music selection using unified music types
Aligned with LCERenewed changes up to commit
5ec8a0e41ba8146aba450258d8620cd3cb0299e0 by 3UR after previously
porting an incorrect revision.
2026-04-08 03:34:54 +03:00
George V. ff96cd3687 feat: support separate boss health bars per dimension
Add dimension-aware tracking for boss mobs and update the boss health
GUI system to maintain independent state for each dimension (Overworld,
Nether, End). This prevents conflicts when multiple bosses exist across
different dimensions simultaneously.

- Add `getDimension()` to `BossMob` base class and implement in
  `EnderDragon` and `WitherBoss`
- Replace static boss GUI state with dimension-indexed storage
- Introduce `getIndexFromDimension()` helper for dimension mapping
- Update rendering logic to use per-dimension state
- Isolate darkening effects and health display per dimension

Ported from LCERenewed commit 5ec8a0e41ba8146aba450258d8620cd3cb0299e0 by 3UR
2026-04-08 03:34:54 +03:00
/home/neo 29ebc01ea9
feat: TU19 tutorial world (#1) 2026-04-07 22:42:22 +03:00
piebot 013c18ef85 Merge remote-tracking branch 'origin/main' 2026-04-07 21:05:36 +03:00
piebot d39bc9ad99 refactor: change wheat seeds to seeds
also make inverted daylight sensor implementation more accurate
2026-04-07 21:03:09 +03:00
Lord_Cambion 720e1a77a4 feat: oceanMonument
feat: Mesa biomes
feat: changed world generation according to java
fix: swamp hut changed to spruce
2026-04-07 19:41:14 +02:00
George V. 76ac11bde0 fix: handled all audio and parameter types correctly to prevent crashes
Original commit: 8658049e71
2026-04-07 09:30:16 +02:00
Lord_Cambion 459bc20a77 dlcfix 2026-04-07 00:45:52 +02:00
rucheykov b928351e0b
Update Windows64_Minecraft.cpp (#1468) 2026-04-06 12:34:25 -05:00
Fireblade 98a86fc69b
feat. set intro scene background to white (#1474) 2026-04-06 12:33:45 -05:00
piebot e45633defc Fix TU31 Fishing Changes
also remove halloween 2015 and greek for now as its currently causing crashes
2026-04-06 14:50:39 +03:00
BrainFart17 c5a8e8b786 Fix MediaWindows64.arc (forgot to update it before) 2026-04-05 22:46:44 -07:00
BrainFart17 ab1475b325 Fix conflicts with new book & quil item 2026-04-05 21:07:28 -07:00
BrainFart17 bc49d40c91 Merge branch 'main' of https://codeberg.org/piebot/LegacyEvolved 2026-04-05 20:44:36 -07:00
BrainFart17 f0b28416c0 Add fishing stuff from TU 31 2026-04-05 17:38:06 -07:00
itsRevela 6728ecb141 fix: increase max packet size to 4MB for cross-fork compatibility
Matches the packet size limit used by the plugin-api fork. Our 512KB
limit caused "Connection lost" when their server sent large packets
(e.g. chunk data) that exceeded our cap.
2026-04-05 18:35:28 -05:00
Sylvessa 2f3cf58c3c optimization: remove redundant lastTime setter (#1479) 2026-04-05 16:14:13 -05:00
Sylvessa d758eb887f fix: wither and ender dragon custom names (#1472) 2026-04-05 16:11:56 -05:00
Sylvessa 4e6c695899 fix: boat plr height & sneak height (#1459) 2026-04-05 16:08:17 -05:00
itsRevela 207d90de28 perf: process 16 chunks/player/tick on dedicated server, revert async save
Chunk loading now batches up to 16 nearest-first requests per player per
tick on dedicated server (client stays at 1), improving tick recovery
time after player join.

Reverts the async save system -- the background thread snapshot/compress
path added complexity without measurable benefit. Autosave on Windows64
server now uses the standard synchronous flush like client, in
preparation for a proper async implementation from upstream.
2026-04-05 15:56:39 -05:00
neoapps-dev 0c7ca66cc4 fix: rename tutorial 2026-04-05 23:42:25 +03:00
neoapps-dev d88e02c622 Delete Minecraft.Client/Common/Tutorial/Tutorial 2026-04-05 22:35:22 +02:00
neoapps-dev 2de9595b71 feat: add TU30 (also TU19) tutorial world 2026-04-05 22:34:58 +02:00
neoapps-dev 54d99581d5 feat: TU30 (also TU19) tutorial world 2026-04-05 22:33:20 +02:00
neoapps-dev e0f74f7dbc feat: even more DLCs! Steampunk, Halloween 2015, Greek Mythology and Pattern! 2026-04-05 22:54:21 +03:00
Sylvessa c2ea1fa62b
optimization: remove redundant lastTime setter (#1479) 2026-04-05 12:51:37 -05:00
piebot 3fd6d53e76 fix CI 2026-04-05 18:38:23 +03:00
neoapps-dev 9910d6f3d2 fix 2026-04-05 16:46:22 +02:00
SevenToaster509 546a279cc9 Book & Quill - Initial Commit
Implement Book & Quill:
- IUIScene_WritingBookMenu and UIScene_BookAndQuillMenu for UI
- Edited UIControl_Label to add direct editing (quite hardcoded to my needs right now)
- Reimplement scrapped custom payload packets for books and signing
- Other misc changes

TODO:
- Coloured and scambled text
- Book copying
- Clean up code
2026-04-05 15:05:03 +01:00
Sylvessa a4e689095c
fix: wither and ender dragon custom names (#1472) 2026-04-04 22:04:02 -05:00
ItzSonicFaner 8696a07021 Changed from getCustomSkin to getPlayerDefaultSkin 2026-04-03 19:05:23 +02:00
Sylvessa 8bf0343544
fix: boat plr height & sneak height (#1459) 2026-04-02 17:16:31 -05:00
neoapps-dev 7cc9ae857a feat: festive DLCs 2026-04-02 18:50:05 +03:00
Lord_Cambion 128a862b92 Merge branch 'main' of https://codeberg.org/piebot/LegacyEvolved
* 'main' of https://codeberg.org/piebot/LegacyEvolved:
  feat: Ctrl+Q to drop all stack
2026-04-02 14:45:51 +02:00
Lord_Cambion e5a8abd2ac herobrine removed 2026-04-02 14:45:46 +02:00
neoapps-dev 3fb20049b9 feat: Ctrl+Q to drop all stack 2026-04-02 15:25:12 +03:00
itsRevela 463bf2b93f fix: player list no longer limited by render distance
The previous IQNet cleanup in handleRemoveEntity fired on every entity
despawn, which happens both when a player goes out of tracking range
and when they disconnect.  This caused players to vanish from the Tab
list whenever they moved beyond render distance.

Introduce two custom payload channels (MC|ForkHello, MC|ForkPLeave) so
the client can distinguish "out of range" from "actually left":

- Server sends MC|ForkHello during login to identify itself as a fork
- Server sends MC|ForkPLeave with the player's gamertag on disconnect
- Client skips IQNet cleanup in handleRemoveEntity on fork servers
- Client cleans up IQNet only when MC|ForkPLeave arrives

Fully backwards-compatible: no existing packet wire formats changed.
Upstream clients ignore the unknown channels, fork clients on upstream
servers fall back to the old entity-tracking-based cleanup.
2026-04-01 16:01:56 -05:00
Lord_Cambion bd7a02fe3b Aggiorna Minecraft.Client/CMakeLists.txt 2026-04-01 22:32:25 +02:00
Lord_Cambion 4ee0e9e5e9 Carica file su "Minecraft.Client" 2026-04-01 22:20:13 +02:00
Lord_Cambion cc2c020af9 Carica file su "Minecraft.Client" 2026-04-01 21:58:31 +02:00
Lord_Cambion 0922d8a872 Carica file su "Minecraft.Client/cmake/sources" 2026-04-01 21:37:37 +02:00
itsRevela 8e2b475317 removed backup arc file 2026-04-01 03:50:21 -05:00
itsRevela a017579bc3 fix: graphics menu navigation, layout, render distance cap, skin anim speed
Rewire the SWF focus chain via Iggy so VSync, Fullscreen, and Render
Distance are reachable with keyboard/gamepad navigation.

Cap render distance slider at 16 chunks. Shift graphics menu layout
up 60px for better centering.

Fix skin preview walk/attack animations running too fast with VSync
off by scaling per-frame increments by delta time relative to 60fps.
2026-04-01 03:43:28 -05:00
itsRevela 2cc03476b3 fix: skin preview animations too fast with VSync off
The walking and attack animations in the Change Skin menu were
frame-rate-dependent, advancing per render call with no delta time
scaling. With uncapped FPS they ran proportionally too fast.

Add time-based scaling relative to a 60fps baseline. The scale is
computed once per frame (cached for 0.5ms) so multiple skin previews
rendered in the same frame all animate at the correct speed.
2026-04-01 02:24:45 -05:00
itsRevela 9372b2d2ea fix: move async save commit off game thread to prevent disk I/O stall
StorageManager.SaveSaveData() blocks until the disk write completes.
Calling it from the game thread caused 2.5s freezes. Now it only runs
from TickCoreSystems() on the ServerMain thread, which operates
independently of the game tick loop.
2026-04-01 01:49:58 -05:00
itsRevela 68521f8c92 fix: async autosave thread safety and commit path
Move StorageManager.AllocateSaveData() back under the save lock (called
on the game thread before releasing). Background thread now only does
pure zlib compression with no StorageManager calls.

Add CommitPendingAsyncSave() to both the game thread tick and
TickCoreSystems() to ensure saves commit during bootstrap, normal
gameplay, and shutdown.
2026-04-01 01:23:50 -05:00
itsRevela 073a511217 perf: async autosave for dedicated server
Autosave previously froze the main thread for 2-6 seconds while
compressing the entire save file with zlib. Now the save buffer is
snapshotted under the lock (~18ms), then compression runs on a
background thread. The compressed data is committed to StorageManager
on the next main-thread tick via CommitPendingAsyncSave().

Also skip redundant full chunk saves during autosave on the dedicated
server -- chunks are already persisted by the per-tick trickle save.
Only entity data is flushed, matching Xbox/Orbis behavior.

Added per-step timing to the autosave handler for diagnostics.
2026-03-31 23:33:21 -05:00
itsRevela ea15409bb9 perf: skip split-screen system-mate checks on dedicated server
The EntityTracker and TrackedEntity classes have O(players^2 * entities)
loops that check IsSameSystem() for split-screen couch co-op visibility
expansion. On the dedicated server, all players are remote so
IsSameSystem() always returns false, making these loops pure overhead.

Skip them entirely when g_Win64DedicatedServer is true. The original
split-screen logic is preserved for game client LAN hosting.
2026-03-31 22:07:41 -05:00
itsRevela aecef7f10d fix: move security gate close after login sequence to prevent high-latency crashes
The security gate was closed before LoginPacket was sent in placeNewPlayer,
causing all login setup packets to be buffered behind the cipher handshake.
Under high-latency connections, the flushed data arrived before the player
object was initialized, causing a null pointer crash. The gate now closes
after the login sequence and MC|CKey are sent.
2026-03-31 17:28:03 -05:00
Lord_Cambion 7e8ecc88e3 bug fixed 2026-03-31 19:50:27 +02:00
Lord_Cambion 138c7ab028 bug fixes 2026-03-31 18:00:31 +02:00
itsRevela 383c710833 feat: uncapped FPS when VSync off, fix graphics settings bitmask collision
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).
2026-03-30 15:36:08 -05:00
itsRevela 9f08612f25 fix: graphics settings layout broken by removeControl on Windows64
BedrockFog removal via removeControl with centreScene=true triggered
Flash-side repositioning that didn't account for the tool-added VSync
and Fullscreen checkboxes, creating a gap after CustomSkinAnim and
causing RenderDistance to render behind Gamma.

On Windows64 (single player per client), the console splitscreen
host-check that removed BedrockFog/CustomSkinAnim is unnecessary.
Gate it behind #ifndef _WINDOWS64 so all controls stay visible.
2026-03-30 14:10:50 -05:00
itsRevela 4e323c8365 merge: upstream fix for world seeds not saving correctly (#1119) 2026-03-30 13:53:17 -05:00
itsRevela 3aa2d23fa9 feat: implement hardcore hearts with game mode lock
Display hardcore heart textures when a world is in hardcore mode,
matching Java Edition behavior. Hearts switch between normal/hardcore
across all states (poison, wither, flash) and all HUD resolutions.

C++ changes:
- IUIScene_HUD: check isHardcore() and call SetHardcoreMode() each tick
- UIScene_HUD: send hardcore boolean to Flash via Iggy, invalidate
  SetHealth dirty check on state change to force heart redraw
- CreateWorldMenu/LoadMenu: lock game mode to Survival when hardcore
- MinecraftServer: gate server.properties hardcore override behind
  MINECRAFT_SERVER_BUILD so offline worlds preserve their saved flag

SWF changes (via new Java tools):
- AddHardcoreBitmaps: adds 10 hardcore heart bitmaps to graphics SWFs
- AddHardcoreHearts: adds 10 new frames (15-24) to health sprite
- PatchHudABC: patches HUD ActionScript bytecode with SetHardcore
  method and frame offset logic (+14 normal/poison, +6 wither)

Also updates README changelog styling with consistent ### headings.
2026-03-30 13:50:29 -05:00
piebot 8cb7c5d507 Compiler Fix 2026-03-30 19:46:52 +03:00
piebot 9713d5cdc9 Fix commit (2be90366ba) 2026-03-30 19:45:45 +03:00
ItzSonicFaner 2be90366ba Patch 3 2026-03-30 17:30:26 +03:00
piebot a38abd4e8d Merge changes from upstream. 2026-03-30 14:28:57 +03:00
blongm d3412aaae7
Fixed issue with world seeds not saving correctly (#1119)
## Description
Fix issue where typing in a short seed on world creation doesn't save the seed correctly

## Changes

### Previous Behavior
Typing in a seed on the world creation menu that's less than 8 characters long will result in garbage data being saved as the seed. Happens with controller and KBM.
You can see this in-game - if you exit the world options menu and go back in, the seed will show up as boxes □□□.
Weirdly, if you type a seed again, it behaves as expected.

### Root Cause
For some reason, assigning `m_params->seed` to the seed text points it to garbage data, when it's 7 characters or less.

### New Behavior
Seed entry behaves as expected.

### Fix Implementation
- Added `static_cast<wstring>` before assignment to `m_params->seed`.
- Also replaced `(wchar_t *)` with `reinterpret_cast<wchar_t*>` in the functions.

### AI Use Disclosure
No AI was used
2026-03-30 06:05:32 -05:00
piebot ba460f3956 Update Coarse Dirt and Podzol locations in Creative Menu 2026-03-30 13:34:41 +03:00
itsRevela 967adf1e54 feat: make F2 screenshot work in any context
Move screenshot capture from Minecraft::tick() (which requires an
active player) to the Windows64 main loop alongside other global
key handlers (F1/F3/F11). F2 now works from the main menu, pause
menu, settings, inventory, crafting, and all other screens. Chat
message still shown when in-game.
2026-03-29 19:30:00 -05:00
itsRevela f2434a8ea8 feat: use full-size LCRE logo shifted up 10px
Replace the 80% scaled approach with full-size logo bitmaps and
shift the ComponentLogo SWF placements up by 10px (proportionally
scaled for lower resolutions) to avoid occlusion by the load/join
menu. Add ShiftLogo.java tool for adjusting SWF placement offsets.
2026-03-29 19:10:14 -05:00
itsRevela 4a8291f6cc feat: replace Minecraft logo with LCRE logo at 80% scale
Replace MenuTitle and MenuTitleSmall bitmaps in skinHDWin.swf and
skinWin.swf with the custom LCRE (Legacy Console Edition Revelations)
logo, scaled to 80% within the original bitmap canvas to avoid
occlusion by the load/join menu.

Add ReplaceLogo.java and ExtractFromArc.java tools for SWF bitmap
replacement and arc file extraction. Keep original arc as .bak.
2026-03-29 19:00:50 -05:00
itsRevela e706466f42 Send AddPlayerPacket for all players on join and RemoveEntitiesPacket on disconnect
Players now appear in each other's Tab list immediately on join,
regardless of render distance. Previously, players only appeared when
they entered entity tracking range because AddPlayerPacket was only
sent through the TrackedEntity system.

On disconnect, a RemoveEntitiesPacket is broadcast to all clients so
players added via the join broadcast are properly cleaned up, not just
those within tracking range.
2026-03-29 20:30:12 +03:00
itsRevela 0ebdbac933 Fix player list map icon colors to match map markers
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.
2026-03-29 20:30:12 +03:00
itsRevela 618dc78008 Fix player list not showing all players on dedicated servers
Register remote players in the client's IQNet array when their
AddPlayerPacket arrives, so they appear in the Tab player list.
Previously only the host and local player were registered.

Also filter the dedicated server's phantom host entry (slot 0, empty
gamertag) from the UI, fix tick() to update entries by smallId instead
of sequential index, and fix player removal to use gamertag matching
since XUIDs are 0 on dedicated servers.
2026-03-29 20:30:11 +03:00
neoapps-dev 48a5e882e3 omg i forgot to track the stb image write file lol 2026-03-29 18:52:59 +03:00
neoapps-dev 1028ee2e6d fix: stb import 2026-03-29 18:29:04 +03:00
neoapps-dev d717f18628 feat: F2 for screenshotting
some code used from MLRE
2026-03-29 18:22:45 +03:00
irice7 e8ac5b16ea Add cancel join
Adds the Cancel Join tooltip to the "Connecting to host"
progress bar
2026-03-29 17:03:12 +03:00
itsRevela 245da783b3 feat: upgrade stream cipher from XOR to AES-128-CTR
Replace the XOR obfuscation cipher with AES-128-CTR using the Windows
BCrypt API. Key material grows from 16 to 32 bytes (16 AES key + 16 IV).
All callers auto-adjust via StreamCipher::KEY_SIZE. No handshake or
protocol changes needed beyond the larger MC|CKey payload.
2026-03-28 21:03:45 -05:00
Revela 1036c360dc
Merge branch 'smartcmd:main' into main 2026-03-28 19:19:42 -05:00
itsRevela ba3ebe666c feat: dedicated server security hardening
Comprehensive security system to protect against packet-sniffing attacks,
XUID harvesting, privilege escalation, bot flooding, and XUID impersonation.

- Stream cipher: per-session XOR cipher with 4-message handshake via
  CustomPayloadPacket (MC|CKey, MC|CAck, MC|COn). Negotiated per-connection,
  backwards compatible (old clients/servers fall back to plaintext).
- Security gate: buffers all game data until cipher handshake completes,
  preventing unsecured clients from receiving any XUIDs or game state.
- Cipher handshake enforcer: kicks clients that don't complete the handshake
  within 5 seconds (configurable via require-secure-client).
- Identity tokens: persistent per-XUID tokens in identity-tokens.json,
  issued over the encrypted channel, verified on reconnect. Prevents XUID
  replay attacks. Client stores server-specific tokens.
- PROXY protocol v1: parses real client IPs from playit.gg tunnel headers
  so rate limiting, IP bans, and XUID spoof detection work per-player.
- Rate limiting: per-IP sliding window (default 5 connections/30s) with
  pending connection cap (default 10).
- Privilege hardening: OP requires ops.json, live checks on every command
  and privilege packet. Host-only server settings changes.
- XUID stripping: PreLoginPacket response sends INVALID_XUID placeholders.
- Packet validation: readUtf global string cap, reduced max packet size,
  stream desync protection on oversized strings.
- OpManager: persistent ops.json with XUID-based OP list.
- Whitelist improvements: whitelist add accepts player names with ambiguity
  detection, XUID cache from login attempts.
- revoketoken command: revoke identity tokens for players who lost theirs.
- server.log: persistent log file written alongside console output with
  flush-per-write to survive crashes.
- CLI security logging: consolidated per-join security summary with cipher
  status, token status, XUID, and real IP. Security warnings for kicks,
  spoofing, and unauthorized commands.
2026-03-28 19:18:06 -05:00
Botch 277d74716e
Render custom skin boxes on viewmodel (#1415)
* Update PlayerRenderer.cpp

* Fix fatal bug where skins with no additional boxes would crash the game
2026-03-28 14:44:27 -05:00
Lord_Cambion 6fe251b2ec minecart tnt fix 2026-03-28 14:44:56 +01:00
piebot 3b5a7e1fe6 Revert adding TU25 DLCs 2026-03-28 14:03:38 +03:00
piebot ac259ee94d Fix PlayerRenderer.h 2026-03-28 12:14:03 +03:00
Revela ed3fffcc6a
Merge branch 'smartcmd:main' into main 2026-03-27 16:42:40 -05:00
ItzSonicFaner a0082658a5 Skins 2026-03-27 23:33:33 +02:00
Sestain 7447fabe0d
Fix game crashing if DLC has XMLVERSION paramater (#1285)
* Fix game crashing if DLC has XMLVERSION paramater

* Better implementation of XMLVersion check

* Forgot to add type name to the list

* Removed extra newline
2026-03-27 15:11:27 -05:00
Sestain 3c1166c45e
Added support for Big-Endian DLCs (#1291)
* Added support for Big-Endian DLCs

* Remove unused variable

* Remove the things made for other PR
2026-03-27 15:59:35 -04:00
piebot 9f148e8d3b Properly add the TU25 DLCs 2026-03-27 22:30:10 +03:00
piebot 274b4575e3 Add TU25 DLCs 2026-03-27 21:33:24 +03:00
ItzSonicFaner 84c228e80f Skins (#1)
Check if skin texture height is 64 or 32, slim skins, better slim skins parameters, zombie villager fix.

Co-authored-by: ItzSonicFaner <165782267+ItzSonicFaner@users.noreply.github.com>
Reviewed-on: https://codeberg.org/piebot/LegacyEvolved/pulls/1
Co-authored-by: ItzSonicFaner <itzsonicfaner@noreply.codeberg.org>
Co-committed-by: ItzSonicFaner <itzsonicfaner@noreply.codeberg.org>
2026-03-27 15:35:15 +01:00
piebot b3ac4411fe Merge branch 'pr-1403' 2026-03-27 13:11:58 +03:00
itsRevela f1ec7a0d20 Send AddPlayerPacket for all players on join and RemoveEntitiesPacket on disconnect
Players now appear in each other's Tab list immediately on join,
regardless of render distance. Previously, players only appeared when
they entered entity tracking range because AddPlayerPacket was only
sent through the TrackedEntity system.

On disconnect, a RemoveEntitiesPacket is broadcast to all clients so
players added via the join broadcast are properly cleaned up, not just
those within tracking range.
2026-03-26 23:55:02 -05:00
itsRevela 1b423e48d3 Fix player list map icon colors to match map markers
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.
2026-03-26 22:22:13 -05:00
itsRevela 35fbc7af17 Fix Ender Dragon damage, End portal transition, and End Poem crash
Dragon melee damage: reassign sub-entity IDs to be sequential from
the parent entity ID in ServerLevel::entityAdded(), so the client's
offset-based ID calculation matches the server. Previously the server's
smallId pool allocated non-sequential IDs, causing melee attacks to
target entity IDs the server didn't recognize.

End portal transition: ensure the player entity is always added to the
new level when transitioning from The End, not just for non-End
dimensions. The addEntity call was previously gated behind a
lastDimension != 1 check that also excluded it from End exits.

End Poem crash: bounds-check the WIN_GAME event's player index before
accessing localplayers[], with a fallback to prevent null dereference
when the server sends an out-of-range index.
2026-03-26 19:46:58 -05:00
itsRevela 2e75441355 Merge upstream: fix redstone tick persistence on chunk unload 2026-03-26 18:22:04 -05:00
itsRevela 6a21637e75 Fix player list not showing all players on dedicated servers
Register remote players in the client's IQNet array when their
AddPlayerPacket arrives, so they appear in the Tab player list.
Previously only the host and local player were registered.

Also filter the dedicated server's phantom host entry (slot 0, empty
gamertag) from the UI, fix tick() to update entries by smallId instead
of sequential index, and fix player removal to use gamertag matching
since XUIDs are 0 on dedicated servers.
2026-03-26 18:20:01 -05:00
666uvu 73d713878c
fix redstone tick persistence on chunk unload (#1423) 2026-03-26 16:55:56 -05:00
itsRevela fbe14e7755 Add SRV record support for server connections
Resolve _minecraft._tcp.<hostname> SRV records before connecting,
matching Java Edition behavior. Players can connect using just a domain
name and the client will look up the actual server address and port
from DNS. Falls back to the original hostname/port if no SRV record
exists or the address is a numeric IP.
2026-03-26 15:45:24 -05:00
Lord Cambion 10b7fc36d3 Biome Update! 2026-03-26 20:37:51 +01:00
piebot 74c197cc15 apparently the commits i did for glass pane didnt apply so 2026-03-26 20:41:29 +03:00
itsRevela f1310abe08 Refactor async server joining with eJoinState enum and dedicated progress UI
Replace the boolean-flag-based async join system with a clean state machine
(eJoinState enum) and move connection progress handling from UIScene_JoinMenu
into UIScene_ConnectingProgress as a dedicated UI class.

Combines the best of two approaches: non-blocking sockets with select()
timeout and SO_RCVTIMEO clearing (prevents random disconnects) with the
upstream's state enum, FinalizeJoin separation, and ConnectingProgress UI.

JoinGame() now returns JOINGAME_PENDING on Win64, and
PlatformNetworkManagerStub::DoWork() polls the join state to finalize
the connection when the background thread succeeds.
2026-03-26 11:51:17 -05:00
piebot 87348a7e16 Fix Github Actions compile error 2026-03-26 19:09:04 +03:00
Sylvessa 1ae70176d4 fix splitscreen xuids (#1413) 2026-03-26 11:07:30 -05:00
piebot d73ae8fd5c Fix Commit "Implement LCERenewed Changes"
This fixes commit cf0472117c.
2026-03-26 17:57:03 +03:00
Sylvessa c96a8ee524
fix splitscreen xuids (#1413) 2026-03-26 10:19:20 -04:00
Sylvessa 1a50770647
Add asynchronous server joining (#1408) 2026-03-26 10:15:11 -04:00
piebot cf0472117c Implement LCERenewed Changes 2026-03-26 14:14:42 +03:00
piebot 0e56730255 Update logo 2026-03-26 11:36:31 +03:00
Loki Rautio dee559bd16 Revert "Memory leak fix: Make chunks unload properly (#1406)"
This reverts commit a24318eedc.
This fix introduces broken behavior for dedicated servers. It will be
merged back in once the related issue is fixed
2026-03-26 01:37:23 -05:00
itsRevela 6d28177e4c Fix client disconnect from leftover socket recv timeout
Clear the 5-second SO_RCVTIMEO that was set during the connection
handshake but never removed. The timeout persisted into the game
session, causing the client to disconnect whenever the server paused
for longer than 5 seconds (e.g. autosave, chunk I/O).

Also update README with chunk unloading and connection stability fixes.
2026-03-25 23:54:52 -05:00
itsRevela c264262b66 Fix chunk unloading regression from upstream merge
Commit a24318ee changed drop() to immediately remove chunks from cache,
bypassing the deferred m_toDrop save/unload pipeline. This caused missing
chunks on dedicated servers, iterator invalidation in dropAll() and
ServerLevel::save(), and entity duplication (item frames) from chunks
being reloaded without their entities first being removed from the level.

- ServerChunkCache::drop(): restore m_toDrop queue instead of immediate
  cache removal, so tick() can save/unload/move to unloadedCache safely
- MultiPlayerChunkCache::drop(): restore soft-unload (keep chunk in cache
  with loaded=true) instead of nulling cache and hasData
- PlayerChunkMap::setRadius(): remove dropAll() call when reducing radius,
  the per-chunk removal loop already handles out-of-range chunks
2026-03-25 19:57:35 -05:00
Lord Cambion ae273c75fa Name Fixes 2026-03-26 00:40:52 +01:00
piebot 2d04127cae fix arc file 2026-03-26 00:04:11 +03:00
piebot e14ba14e68 a bunch of shit lmaoo 2026-03-25 21:41:35 +03:00
Revela 3a8106593f
Merge branch 'smartcmd:main' into main 2026-03-25 10:58:16 -05:00
ModMaker101 a24318eedc
Memory leak fix: Make chunks unload properly (#1406)
* Fix chunk unload and cleanup logic, fixes #1347

* Applying formatting to code I edited 😝
2026-03-24 23:25:18 -05:00
Revela 4c7f1a6385
Merge branch 'smartcmd:main' into main 2026-03-24 13:59:56 -05:00