diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 6a0d9ee5..678879d0 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -89,76 +89,112 @@ jobs: with: name: client-build path: staging/* - build-server: name: Build Server runs-on: windows-latest steps: - - name: Checkout - uses: actions/checkout@v6 + - name: Checkout + uses: actions/checkout@v6 - - name: Setup MSVC - uses: ilammy/msvc-dev-cmd@v1 + - name: Setup MSVC + uses: ilammy/msvc-dev-cmd@v1 - - name: Setup CMake - uses: lukka/get-cmake@latest + - name: Setup CMake + uses: lukka/get-cmake@latest - - name: Run CMake - uses: lukka/run-cmake@v10 - env: - VCPKG_ROOT: "" - with: - configurePreset: windows64 - buildPreset: windows64-release - buildPresetAdditionalArgs: "['--target', 'Minecraft.Server']" + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + global-json-file: global.json - - name: Zip Build - shell: pwsh - run: | - $source = "./build/windows64/Minecraft.Server/Release" - $zip = "neoLegacyServerWindows64.zip" - $topLevel = "neoLegacyServerWindows64" - - $files = Get-ChildItem -Path $source -Recurse -File | - Where-Object { $_.Extension -notin '.pch', '.zip', '.ipdb', '.iobj' } - - Add-Type -AssemblyName System.IO.Compression - Add-Type -AssemblyName System.IO.Compression.FileSystem - - $basePath = (Resolve-Path $source).Path - $fs = [System.IO.File]::Open($zip, [System.IO.FileMode]::Create) + - name: Run CMake + uses: lukka/run-cmake@v10 + env: + VCPKG_ROOT: "" + with: + configurePreset: windows64 + buildPreset: windows64-release + buildPresetAdditionalArgs: "['--target', 'Minecraft.Server', '--target', 'Minecraft.Server.FourKit']" + + - name: Zip Build (vanilla) + shell: pwsh + run: | + $source = "./build/windows64/Minecraft.Server/Release" + $zip = "neoLegacyServerWindows64.zip" + $topLevel = "neoLegacyServerWindows64" + $files = Get-ChildItem -Path $source -Recurse -File | + Where-Object { $_.Extension -notin '.pch', '.zip', '.ipdb', '.iobj' } + + Add-Type -AssemblyName System.IO.Compression + Add-Type -AssemblyName System.IO.Compression.FileSystem + $basePath = (Resolve-Path $source).Path + $fs = [System.IO.File]::Open($zip, [System.IO.FileMode]::Create) + try { + $archive = New-Object System.IO.Compression.ZipArchive($fs, [System.IO.Compression.ZipArchiveMode]::Create) try { - $archive = New-Object System.IO.Compression.ZipArchive($fs, [System.IO.Compression.ZipArchiveMode]::Create) - try { - Get-ChildItem -Path $basePath -Recurse -Directory | ForEach-Object { - $rel = $_.FullName.Substring($basePath.Length).TrimStart('\', '/') - $archive.CreateEntry("$topLevel/$($rel -replace '\\','/')/") | Out-Null - } - foreach ($file in $files) { - $rel = $file.FullName.Substring($basePath.Length).TrimStart('\', '/') - $entryName = "$topLevel/$($rel -replace '\\','/')" - [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile( - $archive, $file.FullName, $entryName, - [System.IO.Compression.CompressionLevel]::Optimal - ) | Out-Null - } - } finally { $archive.Dispose() } - } finally { $fs.Dispose() } - - Write-Host "Created $zip" + Get-ChildItem -Path $basePath -Recurse -Directory | ForEach-Object { + $rel = $_.FullName.Substring($basePath.Length).TrimStart('\', '/') + $archive.CreateEntry("$topLevel/$($rel -replace '\\','/')/") | Out-Null + } + foreach ($file in $files) { + $rel = $file.FullName.Substring($basePath.Length).TrimStart('\', '/') + $entryName = "$topLevel/$($rel -replace '\\','/')" + [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile( + $archive, $file.FullName, $entryName, + [System.IO.Compression.CompressionLevel]::Optimal + ) | Out-Null + } + } finally { $archive.Dispose() } + } finally { $fs.Dispose() } - - name: Stage artifacts - shell: pwsh - run: | - New-Item -ItemType Directory -Force -Path staging - Copy-Item neoLegacyServerWindows64.zip staging/ + Write-Host "Created $zip" - - name: Upload artifacts - uses: actions/upload-artifact@v6 - with: - name: server-build - path: staging/* + - name: Zip Build (FourKit) + shell: pwsh + run: | + $source = "./build/windows64/Minecraft.Server.FourKit/Release" + $zip = "neoLegacyServerWindows64-FourKit.zip" + $topLevel = "neoLegacyServerWindows64-FourKit" + $files = Get-ChildItem -Path $source -Recurse -File | + Where-Object { $_.Extension -notin '.pch', '.zip', '.ipdb', '.iobj' } + + Add-Type -AssemblyName System.IO.Compression + Add-Type -AssemblyName System.IO.Compression.FileSystem + $basePath = (Resolve-Path $source).Path + $fs = [System.IO.File]::Open($zip, [System.IO.FileMode]::Create) + try { + $archive = New-Object System.IO.Compression.ZipArchive($fs, [System.IO.Compression.ZipArchiveMode]::Create) + try { + Get-ChildItem -Path $basePath -Recurse -Directory | ForEach-Object { + $rel = $_.FullName.Substring($basePath.Length).TrimStart('\', '/') + $archive.CreateEntry("$topLevel/$($rel -replace '\\','/')/") | Out-Null + } + foreach ($file in $files) { + $rel = $file.FullName.Substring($basePath.Length).TrimStart('\', '/') + $entryName = "$topLevel/$($rel -replace '\\','/')" + [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile( + $archive, $file.FullName, $entryName, + [System.IO.Compression.CompressionLevel]::Optimal + ) | Out-Null + } + } finally { $archive.Dispose() } + } finally { $fs.Dispose() } + + Write-Host "Created $zip" + + - name: Stage artifacts + shell: pwsh + run: | + New-Item -ItemType Directory -Force -Path staging + Copy-Item neoLegacyServerWindows64.zip staging/ + Copy-Item neoLegacyServerWindows64-FourKit.zip staging/ + + - name: Upload artifacts + uses: actions/upload-artifact@v6 + with: + name: server-build + path: staging/* release-server: name: Release Server @@ -166,52 +202,57 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v6 + - name: Checkout + uses: actions/checkout@v6 - - name: Download server artifacts - uses: actions/download-artifact@v7 - with: - name: server-build - path: artifacts + - name: Download server artifacts + uses: actions/download-artifact@v7 + with: + name: server-build + path: artifacts - - name: Attest artifacts - uses: actions/attest-build-provenance@v2 - with: - subject-path: | - artifacts/neoLegacyServerWindows64.zip + - name: Attest artifacts + uses: actions/attest-build-provenance@v2 + with: + subject-path: | + artifacts/neoLegacyServerWindows64.zip + artifacts/neoLegacyServerWindows64-FourKit.zip - - name: Get short SHA - id: sha - run: echo "short=$(echo '${{ github.sha }}' | cut -c1-7)" >> "$GITHUB_OUTPUT" + - name: Get short SHA + id: sha + run: echo "short=$(echo '${{ github.sha }}' | cut -c1-7)" >> "$GITHUB_OUTPUT" - - name: Delete old release - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: gh release delete Nightly-Dedicated-Server --yes || true + - name: Delete old release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh release delete Nightly-Dedicated-Server --yes || true - - name: Delete old tag - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: gh api repos/${{ github.repository }}/git/refs/tags/Nightly-Dedicated-Server --method DELETE || true + - name: Delete old tag + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh api repos/${{ github.repository }}/git/refs/tags/Nightly-Dedicated-Server --method DELETE || true - - name: Create tag - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git tag -f Nightly-Dedicated-Server -m "Nightly server release ${{ steps.sha.outputs.short }}" - git push origin Nightly-Dedicated-Server --force + - name: Create tag + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git tag -f Nightly-Dedicated-Server -m "Nightly server release ${{ steps.sha.outputs.short }}" + git push origin Nightly-Dedicated-Server --force - - name: Create release - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - gh release create Nightly-Dedicated-Server artifacts/* \ - --title "Server: ${{ steps.sha.outputs.short }}" \ - --notes "Dedicated Server runtime for Windows64. - - Download \`neoLegacyServerWindows64.zip\` and extract it to a folder where you'd like to keep the server runtime." \ - --latest=false + - name: Create release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release create Nightly-Dedicated-Server artifacts/* \ + --title "Server: ${{ steps.sha.outputs.short }}" \ + --notes "Dedicated Server runtime for Windows64. + + Two flavours are attached: + - \`neoLegacyServerWindows64.zip\`: vanilla server, no plugin support, smallest download. + - \`neoLegacyServerWindows64-FourKit.zip\`: server with the FourKit plugin host, bundled .NET 10 runtime, and an empty \`plugins/\` folder ready for plugin authors to drop DLLs into. + + Pick the flavour you want and extract it to a folder where you'd like to keep the server runtime." \ + --latest=false release-client: name: Release Client @@ -249,7 +290,7 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: gh api repos/${{ github.repository }}/git/refs/tags/Nightly --method DELETE || true - - name: Create signed tag + - name: Create tag run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" diff --git a/Minecraft.Client/Gui.cpp b/Minecraft.Client/Gui.cpp index 88d06e42..c70fac40 100644 --- a/Minecraft.Client/Gui.cpp +++ b/Minecraft.Client/Gui.cpp @@ -1073,6 +1073,7 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) if (minecraft->options->renderDebug && minecraft->player != nullptr && minecraft->level != nullptr) { + lines.push_back(std::wstring(VER_BRANCHVERSION_STR_W) + L"/" + std::wstring(VER_PRODUCTVERSION_STR_W)); lines.push_back(minecraft->fpsString); lines.push_back(L"E: " + std::to_wstring(minecraft->level->getAllEntities().size())); int renderDistance = app.GetGameSettings(iPad, eGameSetting_RenderDistance); diff --git a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp index c1b113be..b56c1af1 100644 --- a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp +++ b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp @@ -2053,6 +2053,16 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, f3ComboUsed = true; } break; + case 'B': + std::wstring version = std::wstring(VER_BRANCHVERSION_STR_W) + L"/" + std::wstring(VER_PRODUCTVERSION_STR_W); + Screen::setClipboard(version); + if (pMinecraft->gui && app.GetGameStarted()) + { + const int primaryPad = ProfileManager.GetPrimaryPad(); + pMinecraft->gui->addMessage(L"Copied version to clipboard", primaryPad); + } + f3ComboUsed = true; + break; } } diff --git a/README.md b/README.md index 284607ec..2528b229 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,6 @@ Huge thanks to the following projects: - [Patoke/LCERenewed](https://github.com/Patoke/LCERenewed) - for some of the patches that required deep decompilation - [itsRevela/LCE-Revelations](https://github.com/itsRevela/LCE-Revelations) - for providing a stable project for neoLegacy to continue with -- [Legacy Minigame Restoration Project](https://discord.gg/bg2kmbzFzv) - for their immense help with our project's deep decompilation work # Build & Run diff --git a/cmake/ServerTarget.cmake b/cmake/ServerTarget.cmake index 6d9684f1..2524d6ba 100644 --- a/cmake/ServerTarget.cmake +++ b/cmake/ServerTarget.cmake @@ -35,9 +35,9 @@ function(configure_lce_server_target target) "${CMAKE_SOURCE_DIR}/Minecraft.Client/Common/res" "Common/res" "${CMAKE_SOURCE_DIR}/Minecraft.Client/Common/Media/MediaWindows64" "Common/Media/MediaWindows64" ) - set(_asset_files_pairs - "${CMAKE_SOURCE_DIR}/Minecraft.Client/Common/Media/MediaWindows64.arc" "Common/Media/" - ) +# set(_asset_files_pairs +# "${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") @@ -118,7 +118,7 @@ function(configure_lce_server_target target) # named after the parent (e.g. AssetFileCopy_${target}) which is why each # server flavour has its own set in the VS Solution Explorer. setup_asset_folder_copy(${target} "${_asset_folder_pairs}") - setup_asset_file_copy(${target} "${_asset_files_pairs}") + #setup_asset_file_copy(${target} "${_asset_files_pairs}") if(PLATFORM_NAME STREQUAL "Windows64") add_custom_target(AssetLocalizationCopy_${target} ALL