diff --git a/.github/workflows/nightly-server.yml b/.github/workflows/nightly-server.yml new file mode 100644 index 00000000..5450de9a --- /dev/null +++ b/.github/workflows/nightly-server.yml @@ -0,0 +1,167 @@ +name: Nightly Server Release + +on: + workflow_dispatch: + push: + branches: + - 'main' + paths-ignore: + - '.gitignore' + - '*.md' + - '.github/**' + - '!.github/workflows/nightly-server.yml' + +permissions: + contents: write + packages: write + +concurrency: + group: nightly-server + cancel-in-progress: true + +jobs: + build: + runs-on: windows-latest + + strategy: + matrix: + platform: [Windows64] + + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Set platform lowercase + run: echo "MATRIX_PLATFORM=$('${{ matrix.platform }}'.ToLower())" >> $env:GITHUB_ENV + + - name: Setup MSVC + uses: ilammy/msvc-dev-cmd@v1 + + - name: Setup CMake + uses: lukka/get-cmake@latest + + - name: Run CMake + uses: lukka/run-cmake@v10 + env: + VCPKG_ROOT: "" # Disable vcpkg for CI builds + with: + configurePreset: ${{ env.MATRIX_PLATFORM }} + buildPreset: ${{ env.MATRIX_PLATFORM }}-release + buildPresetAdditionalArgs: "['--target', 'Minecraft.Server']" + + - name: Zip Build + run: 7z a -r LCEServer${{ matrix.platform }}.zip ./build/${{ env.MATRIX_PLATFORM }}/Minecraft.Server/Release/* "-x!*.ipdb" "-x!*.iobj" + + - name: Stage artifacts + run: | + New-Item -ItemType Directory -Force -Path staging + Copy-Item LCEServer${{ matrix.platform }}.zip staging/ + + - name: Stage exe and pdb + if: matrix.platform == 'Windows64' + run: | + Copy-Item ./build/${{ env.MATRIX_PLATFORM }}/Minecraft.Server/Release/Minecraft.Server.exe staging/ + + - name: Upload artifacts + uses: actions/upload-artifact@v6 + with: + name: build-${{ matrix.platform }} + path: staging/* + + release: + needs: build + runs-on: ubuntu-latest + + steps: + - name: Download all artifacts + uses: actions/download-artifact@v7 + with: + path: artifacts + merge-multiple: true + + - name: Update release + uses: andelf/nightly-release@main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: nightly-dedicated-server + name: Nightly Dedicated Server Release + body: | + Dedicated Server runtime for Windows64. + + Download `LCEServerWindows64.zip` and extract it to a folder where you'd like to keep the server runtime. + files: | + artifacts/* + + docker: + name: Build and Push Docker Image + runs-on: ubuntu-latest + needs: build + + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Download dedicated server runtime from artifacts + uses: actions/download-artifact@v4 + with: + name: build-Windows64 + path: .artifacts/ + + - name: Prepare Docker runtime directory + shell: bash + run: | + set -euo pipefail + + rm -rf runtime + mkdir -p runtime + unzip .artifacts/LCEServerWindows64.zip -d runtime + + - name: Compute image name + id: image + shell: bash + run: | + owner="$(echo "${{ vars.CONTAINER_REGISTRY_OWNER || github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" + image_tag="nightly" + # if [[ "${{ github.ref }}" != "refs/heads/main" ]]; then + # image_tag="nightly-test" + # fi + echo "owner=$owner" >> "$GITHUB_OUTPUT" + echo "image=ghcr.io/$owner/minecraft-lce-dedicated-server" >> "$GITHUB_OUTPUT" + echo "image_tag=$image_tag" >> "$GITHUB_OUTPUT" + + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ steps.image.outputs.image }} + tags: | + type=raw,value=${{ steps.image.outputs.image_tag }} + + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ secrets.GHCR_USERNAME || github.actor }} + password: ${{ secrets.GHCR_TOKEN || secrets.GITHUB_TOKEN }} + + - name: Build and push image + uses: docker/build-push-action@v6 + with: + context: . + file: docker/dedicated-server/Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + MC_RUNTIME_DIR=runtime + + cleanup: + needs: [build, release, docker] + if: always() + runs-on: ubuntu-latest + steps: + - name: Cleanup artifacts + uses: geekyeggo/delete-artifact@v5 + with: + name: build-* diff --git a/BACKPORTING.md b/BACKPORTING.md new file mode 100644 index 00000000..484fb3d2 --- /dev/null +++ b/BACKPORTING.md @@ -0,0 +1,15 @@ +# Approach to Backported Features +All backported features incorperated into MinecraftConsoles should be, when merged, functionally identical to their state in the version of the game we're currently targeting. This should be in reference to a known 4J build of LCE. Verification can either be done by doing a decompilation based match of the implementation or, alternatively, all functionality and limitations of the given feature should be compared against the version of LCE we're targeting. + +# Approach to Bugfixes +Anything that does not behave in an "expected" manner, especially if its behavior is not widely accepted as a gameplay mechanic, is valid for fixing in our repository. This includes bugfixes that were made in versions past the version we target, but excludes any visual changes that may not have been included at the build we're targeting. + +If you provide a visual bugfix that fixes a distinctive quirk of the LCE renderer, it should be provided in an "off by default" state that can be toggled on in-game by the user. There is no guarantee that we will merge it. + +If your visual bugfix is a fix added in a future version of LCE than the one we're targeting, it should also be put behind a toggle or equivalent system for keeping it off by default. + +# Targeted Version +We are currently accepting backports for up to and including TU24. Feature backports from TU25 and above will not be accepted. + +# Original Codebase +MinecraftConsoles is based on a WIP build of TU19, built on top of the December 2014 codebase. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 855491da..fd5d7f03 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,9 @@ # Scope of Project At the moment, this project's scope is generally limited outside of adding new content to the game (blocks, mobs, items). We are currently prioritizing stability, quality of life, and platform support over these things. +## Backporting +If you're backporting a feature, please read [BACKPORTING.md](./BACKPORTING.md) + ## Parity We are attempting to keep our version of LCE as close to visual and experience parity with the original console experience of LCE as possible. This means that we will not be accepting changes that... - Backport things from Java Edition that did not ever exist in LCE diff --git a/Minecraft.World/ConsoleSaveFileOriginal.cpp b/Minecraft.World/ConsoleSaveFileOriginal.cpp index 5819dc0c..e47925fd 100644 --- a/Minecraft.World/ConsoleSaveFileOriginal.cpp +++ b/Minecraft.World/ConsoleSaveFileOriginal.cpp @@ -34,6 +34,7 @@ static BackgroundSaveResult s_bgResult; + #ifdef _XBOX #define RESERVE_ALLOCATION MEM_RESERVE | MEM_LARGE_PAGES #define COMMIT_ALLOCATION MEM_COMMIT | MEM_LARGE_PAGES