From a44ea00a54c048630f5d0270ff6e527f9d16f908 Mon Sep 17 00:00:00 2001 From: Fireblade <3+fireblade@noreply.neolegacy.dev> Date: Tue, 14 Jul 2026 01:57:47 -0400 Subject: [PATCH 1/4] fix: builds on linux and incorrect map colors --- CMakeLists.txt | 16 +----- Minecraft.Client/CMakeLists.txt | 50 ++++++------------- .../Common/res/TitleUpdate/res/colours.xml | 2 +- build-linux.sh | 25 +++++++--- cmake/ServerTarget.cmake | 49 ++++++------------ 5 files changed, 50 insertions(+), 92 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fb25a2a7..a56f9331 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,4 @@ cmake_minimum_required(VERSION 3.24) -cmake_policy(SET CMP0057 NEW) project(LCE-Revelations LANGUAGES C CXX RC ASM_MASM) set(CMAKE_CXX_STANDARD 17) @@ -14,11 +13,6 @@ if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8) message(FATAL_ERROR "Use a 64-bit generator/toolchain (x64).") endif() -set(LCE_XWIN_CROSS_DEBUG_COMPAT OFF) -if(CMAKE_CROSSCOMPILING AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(LCE_XWIN_CROSS_DEBUG_COMPAT ON) -endif() - set(CMAKE_CONFIGURATION_TYPES "Debug" "Release" @@ -26,11 +20,7 @@ set(CMAKE_CONFIGURATION_TYPES ) if(NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) - if(CMAKE_CROSSCOMPILING AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") - else() - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") - endif() + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") endif() function(configure_compiler_target target) @@ -82,9 +72,7 @@ endfunction() set(MINECRAFT_SHARED_DEFINES _LARGE_WORLDS _DEBUG_MENUS_ENABLED - $<$,$>>:_DEBUG> - $<$,$>:_ITERATOR_DEBUG_LEVEL=0> - $<$,$>:_HAS_ITERATOR_DEBUGGING=0> + $<$:_DEBUG> _CRT_NON_CONFORMING_SWPRINTFS _CRT_SECURE_NO_WARNINGS _HAS_STD_BYTE=0 diff --git a/Minecraft.Client/CMakeLists.txt b/Minecraft.Client/CMakeLists.txt index c29cbdbf..bec4fef7 100644 --- a/Minecraft.Client/CMakeLists.txt +++ b/Minecraft.Client/CMakeLists.txt @@ -75,46 +75,25 @@ if(PLATFORM_NAME STREQUAL "Windows64") target_link_options(Minecraft.Client PRIVATE $<$:/DEBUG /OPT:REF /OPT:ICF>) endif() -set(MINECRAFT_CLIENT_USE_4J_DEBUG_LIBS TRUE) -if(CMAKE_CROSSCOMPILING AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(MINECRAFT_CLIENT_USE_4J_DEBUG_LIBS FALSE) -endif() - set_target_properties(Minecraft.Client PROPERTIES OUTPUT_NAME "Minecraft.Client" VS_DEBUGGER_WORKING_DIRECTORY "$" ) -if(MINECRAFT_CLIENT_USE_4J_DEBUG_LIBS) - target_link_libraries(Minecraft.Client PRIVATE - Minecraft.World - d3d11 - dxgi - d3dcompiler - XInput9_1_0 - wsock32 - dbghelp - legacy_stdio_definitions - 4JLibs.${PLATFORM_NAME}.Input - 4JLibs.${PLATFORM_NAME}.Profile - 4JLibs.${PLATFORM_NAME}.Storage - 4JLibs.${PLATFORM_NAME}.Render - ) -else() - target_link_libraries(Minecraft.Client PRIVATE - Minecraft.World - d3d11 - dxgi - d3dcompiler - XInput9_1_0 - wsock32 - dbghelp - legacy_stdio_definitions - "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Input.lib" - "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Storage.lib" - "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}/4JLibs/libs/4J_Render_PC.lib" - ) -endif() +target_link_libraries(Minecraft.Client PRIVATE + Minecraft.World + d3d11 + dxgi + d3dcompiler + XInput9_1_0 + wsock32 + dbghelp + legacy_stdio_definitions + 4JLibs.${PLATFORM_NAME}.Input + 4JLibs.${PLATFORM_NAME}.Profile + 4JLibs.${PLATFORM_NAME}.Storage + 4JLibs.${PLATFORM_NAME}.Render +) # Iggy libs foreach(lib IN LISTS IGGY_LIBS) @@ -172,4 +151,3 @@ add_copyredist_target(Minecraft.Client) if(PLATFORM_NAME STREQUAL "Windows64") add_gamehdd_target(Minecraft.Client) endif() - diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml b/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml index 9aaf82ea..c0d89fb8 100644 --- a/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml +++ b/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml @@ -309,7 +309,7 @@ if __name__=="__main__": notecolors() - + diff --git a/build-linux.sh b/build-linux.sh index 8b2d238b..98cc262f 100755 --- a/build-linux.sh +++ b/build-linux.sh @@ -31,14 +31,20 @@ check_deps() { fetch_winsdk() { local splat_dir="$XWIN_CACHE/splat" + if [[ -d "$splat_dir" ]]; then - info "Using cached Windows SDK at $splat_dir" - return + if [[ -f "$splat_dir/sdk/lib/ucrt/x86_64/libucrtd.lib" ]]; then + info "Using cached Windows SDK at $splat_dir" + return + else + warn "Cached Windows SDK at $splat_dir is missing debug CRT libs, re-fetching..." + rm -rf "$splat_dir" + fi fi info "Downloading Windows SDK and CRT via xwin..." mkdir -p "$XWIN_CACHE" - xwin --accept-license splat --output "$splat_dir" + xwin --accept-license splat --include-debug-libs --output "$splat_dir" success "Windows SDK downloaded" } @@ -78,7 +84,14 @@ do_cmake_configure() { local winsdk="$XWIN_CACHE/splat" local toolchain toolchain="$(write_toolchain)" - local c_flags="/MT -w -Wno-non-pod-varargs -fms-compatibility -fms-extensions --target=x86_64-pc-windows-msvc \ + local crt_flag="/MT" + local msvc_runtime="MultiThreaded" + if [[ "$BUILD_TYPE" == "Debug" ]]; then + crt_flag="/MTd" + msvc_runtime="MultiThreadedDebug" + fi + + local c_flags="$crt_flag -Wno-non-pod-varargs -fms-compatibility -fms-extensions --target=x86_64-pc-windows-msvc \ -imsvc $winsdk/crt/include \ -imsvc $winsdk/sdk/include/ucrt \ -imsvc $winsdk/sdk/include/um \ @@ -107,7 +120,7 @@ do_cmake_configure() { -DPLATFORM_NAME="Windows64" \ -DIGGY_LIBS="iggy_w64.lib;iggyperfmon_w64.lib;iggyexpruntime_w64.lib" \ -DCMAKE_SYSTEM_NAME=Windows \ - -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded \ + -DCMAKE_MSVC_RUNTIME_LIBRARY="$msvc_runtime" \ -DCMAKE_C_FLAGS="$c_flags" \ -DCMAKE_CXX_FLAGS="$c_flags" \ -DCMAKE_ASM_MASM_FLAGS="-m64" \ @@ -264,7 +277,7 @@ LAUNCHER } main() { - BUILD_DIR="$SOURCE_DIR/build/windows64-clang" + BUILD_DIR="$SOURCE_DIR/build/windows64-clang-${BUILD_TYPE,,}" mkdir -p "$BUILD_DIR" info "LegacyEvolved LCE v$VERSION build script" info "Source: $SOURCE_DIR | Type: $BUILD_TYPE" diff --git a/cmake/ServerTarget.cmake b/cmake/ServerTarget.cmake index 8fb7d283..ed9ef407 100644 --- a/cmake/ServerTarget.cmake +++ b/cmake/ServerTarget.cmake @@ -39,11 +39,6 @@ function(configure_lce_server_target target) # "${CMAKE_SOURCE_DIR}/Minecraft.Client/Common/Media/MediaWindows64.arc" "Common/Media/" # ) - set(_use_debug_4j_libs TRUE) - if(CMAKE_CROSSCOMPILING AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(_use_debug_4j_libs FALSE) - endif() - target_include_directories(${target} PRIVATE "${CMAKE_BINARY_DIR}/generated/" # Generated BuildVer.h "${CMAKE_SOURCE_DIR}/Minecraft.Client/" @@ -75,36 +70,20 @@ function(configure_lce_server_target target) VS_DEBUGGER_COMMAND_ARGUMENTS "-port 25565 -bind 0.0.0.0 -name DedicatedServer" ) - if(_use_debug_4j_libs) - target_link_libraries(${target} PRIVATE - Minecraft.World - d3d11 - dxgi - d3dcompiler - XInput9_1_0 - wsock32 - dbghelp - legacy_stdio_definitions - 4JLibs.${PLATFORM_NAME}.Input - 4JLibs.${PLATFORM_NAME}.Profile - 4JLibs.${PLATFORM_NAME}.Storage - 4JLibs.${PLATFORM_NAME}.Render - ) - else() - target_link_libraries(${target} PRIVATE - Minecraft.World - d3d11 - dxgi - d3dcompiler - XInput9_1_0 - wsock32 - dbghelp - legacy_stdio_definitions - "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Input.lib" - "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Storage.lib" - "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/4JLibs/libs/4J_Render_PC.lib" - ) - endif() + target_link_libraries(${target} PRIVATE + Minecraft.World + d3d11 + dxgi + d3dcompiler + XInput9_1_0 + wsock32 + dbghelp + legacy_stdio_definitions + 4JLibs.${PLATFORM_NAME}.Input + 4JLibs.${PLATFORM_NAME}.Profile + 4JLibs.${PLATFORM_NAME}.Storage + 4JLibs.${PLATFORM_NAME}.Render + ) foreach(lib IN LISTS IGGY_LIBS) target_link_libraries(${target} PRIVATE "${CMAKE_SOURCE_DIR}/Minecraft.Client/${PLATFORM_NAME}/Iggy/lib/${lib}") From f583a53f7f9f7dc58b4392d5750688361f3b0041 Mon Sep 17 00:00:00 2001 From: DrPerkyLegit <116128211+DrPerkyLegit@users.noreply.github.com> Date: Tue, 14 Jul 2026 20:01:44 -0400 Subject: [PATCH 2/4] read the values in the same way as we write --- Minecraft.World/TextureAndGeometryPacket.cpp | 39 +++++++++++--------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/Minecraft.World/TextureAndGeometryPacket.cpp b/Minecraft.World/TextureAndGeometryPacket.cpp index 44309caa..ec121ab2 100644 --- a/Minecraft.World/TextureAndGeometryPacket.cpp +++ b/Minecraft.World/TextureAndGeometryPacket.cpp @@ -184,7 +184,6 @@ void TextureAndGeometryPacket::read(DataInputStream *dis) //throws IOException uiAnimOverrideBitmask = dis->readInt(); short rawBoxC = dis->readShort(); - short rawOffsetC = dis->readShort(); if (rawBoxC <= 0) { dwBoxC = 0; @@ -197,27 +196,12 @@ void TextureAndGeometryPacket::read(DataInputStream *dis) //throws IOException dwBoxC = 0; // sane limit for skin boxes } } - if (rawOffsetC <= 0) - { - dwOffsetC = 0; - } - else - { - dwOffsetC = (DWORD)(unsigned short)rawOffsetC; - if (dwOffsetC > 256) - { - dwOffsetC = 0; // sane limit for skin offsets - } - } + if(dwBoxC>0) { this->BoxDataA= new SKIN_BOX [dwBoxC]; } - if(dwOffsetC>0) - { - this->OffsetDataA= new SKIN_OFFSET [dwOffsetC]; - } for(DWORD i=0;iBoxDataA[i].fM = dis->readFloat(); this->BoxDataA[i].fS = dis->readFloat(); } + + short rawOffsetC = dis->readShort(); + + if (rawOffsetC <= 0) + { + dwOffsetC = 0; + } + else + { + dwOffsetC = (DWORD)(unsigned short)rawOffsetC; + if (dwOffsetC > 256) + { + dwOffsetC = 0; // sane limit for skin offsets + } + } + + if (dwOffsetC > 0) + { + this->OffsetDataA = new SKIN_OFFSET[dwOffsetC]; + } + for(DWORD i=0;iOffsetDataA[i].ePart = static_cast(dis->readShort()); From 8e0983ad4e58c9bb273d055cfb9d327a011dd393 Mon Sep 17 00:00:00 2001 From: SevenToaster509 Date: Wed, 15 Jul 2026 11:12:21 +0100 Subject: [PATCH 3/4] fix: banner names being incorrect --- Minecraft.World/BannerItem.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Minecraft.World/BannerItem.cpp b/Minecraft.World/BannerItem.cpp index 162ed802..01de6e81 100644 --- a/Minecraft.World/BannerItem.cpp +++ b/Minecraft.World/BannerItem.cpp @@ -10,22 +10,22 @@ const unsigned int BannerItem::COLOR_DESCS[16] = { - IDS_TILE_BANNER_WHITE, - IDS_TILE_BANNER_ORANGE, - IDS_TILE_BANNER_MAGENTA, - IDS_TILE_BANNER_LIGHT_BLUE, - IDS_TILE_BANNER_YELLOW, - IDS_TILE_BANNER_LIME, - IDS_TILE_BANNER_PINK, - IDS_TILE_BANNER_GRAY, - IDS_TILE_BANNER_SILVER, - IDS_TILE_BANNER_CYAN, - IDS_TILE_BANNER_PURPLE, - IDS_TILE_BANNER_BLUE, - IDS_TILE_BANNER_BROWN, - IDS_TILE_BANNER_GREEN, - IDS_TILE_BANNER_RED, IDS_TILE_BANNER_BLACK, + IDS_TILE_BANNER_RED, + IDS_TILE_BANNER_GREEN, + IDS_TILE_BANNER_BROWN, + IDS_TILE_BANNER_BLUE, + IDS_TILE_BANNER_PURPLE, + IDS_TILE_BANNER_CYAN, + IDS_TILE_BANNER_SILVER, + IDS_TILE_BANNER_GRAY, + IDS_TILE_BANNER_PINK, + IDS_TILE_BANNER_LIME, + IDS_TILE_BANNER_YELLOW, + IDS_TILE_BANNER_LIGHT_BLUE, + IDS_TILE_BANNER_MAGENTA, + IDS_TILE_BANNER_ORANGE, + IDS_TILE_BANNER_WHITE, }; BannerItem::BannerItem(int id) : Item(id) From 1399ff5a04b4b274fb09b2065ea238744a5cf333 Mon Sep 17 00:00:00 2001 From: SevenToaster509 Date: Wed, 15 Jul 2026 11:12:56 +0100 Subject: [PATCH 4/4] fix: crafting table orientation crafting table was shown in the wrong rotation compared to how it appeared in actual LCE (in the UI) --- Minecraft.Client/ItemRenderer.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Minecraft.Client/ItemRenderer.cpp b/Minecraft.Client/ItemRenderer.cpp index 36bda853..fab05391 100644 --- a/Minecraft.Client/ItemRenderer.cpp +++ b/Minecraft.Client/ItemRenderer.cpp @@ -419,7 +419,7 @@ void ItemRenderer::renderGuiItem(Font *font, Textures *textures, shared_ptrrenderBannerForGui(x, y, fScaleX, fScaleY, fAlpha, baseColor); return; } - + if ((item->getIconType() == Icon::TYPE_TERRAIN && TileRenderer::canRender(Tile::tiles[itemId]->getRenderShape())) && itemId != Tile::barrier_Id) { PIXBeginNamedEvent(0,"3D gui item render %d\n",itemId); @@ -447,6 +447,9 @@ void ItemRenderer::renderGuiItem(Font *font, Textures *textures, shared_ptrid == Tile::crafting_table_Id) { + glRotatef(180, 0, 1, 0); + } #endif // 4J-PB - pass the alpha value in - the grass block render has the top surface coloured differently to the rest of the block glRotatef(-90.0f, 0.0f, 1.0f, 0.0f);