Compare commits
160 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d35927cf5b | ||
|
|
580a6bc7eb | ||
|
|
ff1958614c | ||
|
|
b70fa735a2 | ||
|
|
42b3cf62e5 | ||
|
|
0e1c9250bf | ||
|
|
116fda9c27 | ||
|
|
b4daee985a | ||
|
|
e8dd728c48 | ||
|
|
d6f622c913 | ||
|
|
816997803a | ||
|
|
51a95949ad | ||
|
|
d536a6590b | ||
|
|
cb684177fe | ||
|
|
19380b0585 | ||
|
|
962979c70e | ||
|
|
8da6a217bc | ||
|
|
4a561a0c78 | ||
|
|
b164a52bf8 | ||
|
|
1c65b48958 | ||
|
|
9cf05611a3 | ||
|
|
0d316a6518 | ||
|
|
5f04f26eb8 | ||
|
|
0a32333019 | ||
|
|
0594d330be | ||
|
|
e8038f3c3e | ||
|
|
124bbad12c | ||
|
|
034fbf5737 | ||
|
|
f46453f1cd | ||
|
|
b8c448dab8 | ||
|
|
dd3048b88c | ||
|
|
7124b4a316 | ||
|
|
ecf3ca084f | ||
|
|
f7177b43bd | ||
|
|
5238a9de4e | ||
|
|
d9441c9a52 | ||
|
|
121a0bf4cf | ||
|
|
2e8e6cdec3 | ||
|
|
d7eca9ea60 | ||
|
|
58581203e0 | ||
|
|
3842bee2ab | ||
|
|
9b4d7c7167 | ||
|
|
074c1e50b9 | ||
|
|
b5667532ca | ||
|
|
a94e4ec758 | ||
|
|
92bd9c6f2a | ||
|
|
e2459777b2 | ||
|
|
e2a58ab948 | ||
|
|
62b81e5145 | ||
|
|
98f92c3173 | ||
|
|
85855ac4af | ||
|
|
2e57576200 | ||
|
|
0459370846 | ||
|
|
ef2dbc085f | ||
|
|
4e5a0ebb12 | ||
|
|
a1558b6693 | ||
|
|
5d7d2148cc | ||
|
|
e65ea4e06a | ||
|
|
d90c95da7f | ||
|
|
587d1983b8 | ||
|
|
b3162d4e02 | ||
|
|
4dc55c918a | ||
|
|
b7c8ef7e86 | ||
|
|
9f617d4b40 | ||
|
|
7d272115a7 | ||
|
|
1c2c73b95c | ||
|
|
6ae2932f6f | ||
|
|
a89bab677a | ||
|
|
84e13e31a8 | ||
|
|
aaeb2bea47 | ||
|
|
1b4d6f590b | ||
|
|
04bd863d8e | ||
|
|
6e2f5d1bf2 | ||
|
|
a401cffb6b | ||
|
|
3483ad6b2f | ||
|
|
8b707dfc1b | ||
|
|
38fca607fd | ||
|
|
6312fb4540 | ||
|
|
6418528da9 | ||
|
|
6f64b43358 | ||
|
|
49e7f823ce | ||
|
|
dbe68e4c6c | ||
|
|
25bc6754d7 | ||
|
|
1b0150b719 | ||
|
|
ffd4e22d4a | ||
|
|
55844ea118 | ||
|
|
583dc5a427 | ||
|
|
879d4a0a2d | ||
|
|
d436483cb2 | ||
|
|
0f3ddae8c7 | ||
|
|
8e27a4bed1 | ||
|
|
e105686b23 | ||
|
|
bc7c029675 | ||
|
|
cfcdb74606 | ||
|
|
eecd6dc506 | ||
|
|
31dc2b2548 | ||
|
|
1740975b3c | ||
|
|
a05dd01c69 | ||
|
|
8bf6116b05 | ||
|
|
495e82e8d6 | ||
|
|
4c146626be | ||
|
|
5ac10e216a | ||
|
|
c0df824b64 | ||
|
|
b6db45b159 | ||
|
|
fa7e97bc1f | ||
|
|
8bf7502c44 | ||
|
|
4675b2e5b5 | ||
|
|
aa84a6a148 | ||
|
|
14d222e656 | ||
|
|
b49cc294bc | ||
|
|
9d76b02bd1 | ||
|
|
a60567613b | ||
|
|
c01b745063 | ||
|
|
98e28154a2 | ||
|
|
88956902a8 | ||
|
|
c6b26454e7 | ||
|
|
bd632e7e0b | ||
|
|
b76e0c305d | ||
|
|
d10c4f6876 | ||
|
|
7baa96c798 | ||
|
|
5a01c5fcd3 | ||
|
|
04073b5ef9 | ||
|
|
c7877db61c | ||
|
|
377f093e47 | ||
|
|
49220c99e9 | ||
|
|
41cbd20fbb | ||
|
|
798b037920 | ||
|
|
4356db0996 | ||
|
|
d70ab4a128 | ||
|
|
91b633d575 | ||
|
|
3bb6a9d5fd | ||
|
|
0c1b2beced | ||
|
|
3525bd6523 | ||
|
|
c3c3abb2e3 | ||
|
|
e1a49069f0 | ||
|
|
114e775b2a | ||
|
|
3a7335f43d | ||
|
|
f85829c88c | ||
|
|
a647f0c7dc | ||
|
|
736376dc04 | ||
|
|
043d8445f2 | ||
|
|
2168031ac3 | ||
|
|
9997bbb292 | ||
|
|
1c88642e5c | ||
|
|
0e0b8ff77d | ||
|
|
e6d88173d6 | ||
|
|
773da39fe1 | ||
|
|
8bb20a072d | ||
|
|
7107161dc1 | ||
|
|
d85c9b2a2c | ||
|
|
9abc4756b7 | ||
|
|
1db0ac797e | ||
|
|
f43698aea4 | ||
|
|
66628c4bd2 | ||
|
|
c2fb9ece72 | ||
|
|
45b69acb9b | ||
|
|
558878f9df | ||
|
|
be910f2334 | ||
|
|
46e04a7c4b | ||
|
|
e29fd4da6f |
152
.github/workflows/experimental.yml
vendored
|
|
@ -55,7 +55,7 @@ jobs:
|
|||
run: pnpm install
|
||||
|
||||
- name: build Tauri app
|
||||
run: pnpm tauri build -- ${{ matrix.args }}
|
||||
run: pnpm run tauri:build -- ${{ matrix.args }}
|
||||
env:
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
|
|
@ -65,23 +65,27 @@ jobs:
|
|||
run: |
|
||||
mkdir -p pkg_temp/scripts
|
||||
cp scripts/postinstall.sh pkg_temp/scripts/
|
||||
APP_PATH=$(find src-tauri/target/release/bundle/macos/ -name "*.app" | head -1)
|
||||
MACOS_BUNDLE_DIR=$(find src-tauri/target -path "*/release/bundle/macos" -type d | head -n 1)
|
||||
APP_PATH=$(find "$MACOS_BUNDLE_DIR" -name "*.app" -type d | head -n 1)
|
||||
if [ -z "$APP_PATH" ]; then
|
||||
echo "No .app found in $MACOS_BUNDLE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
APP_NAME=$(basename "$APP_PATH")
|
||||
pkgbuild --root "$APP_PATH/.." \
|
||||
--install-location /Applications \
|
||||
--scripts pkg_temp/scripts \
|
||||
--identifier "com.emerald.legacy" \
|
||||
--version "1.0.0" \
|
||||
--install-location "/Applications" \
|
||||
--root "$APP_PATH" \
|
||||
"Emerald-Legacy-Launcher.pkg"
|
||||
mv "Emerald-Legacy-Launcher.pkg" src-tauri/target/release/bundle/macos/
|
||||
mv "Emerald-Legacy-Launcher.pkg" "$MACOS_BUNDLE_DIR/"
|
||||
|
||||
- name: upload build artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.artifact-name }}
|
||||
path: src-tauri/target/release/bundle/
|
||||
path: |
|
||||
src-tauri/target/**/release/bundle/**/*
|
||||
|
||||
build-flatpak:
|
||||
runs-on: ubuntu-latest
|
||||
|
|
@ -104,3 +108,139 @@ jobs:
|
|||
with:
|
||||
name: flatpak
|
||||
path: Emerald.Legacy.Launcher.flatpak
|
||||
|
||||
build-appimage:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: archlinux:latest
|
||||
steps:
|
||||
- name: Bootstrap keyring and git
|
||||
run: |
|
||||
pacman -Syu --noconfirm archlinux-keyring
|
||||
pacman -S --noconfirm --needed git
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
src-tauri/target
|
||||
node_modules
|
||||
/var/cache/pacman/pkg
|
||||
key: arch-${{ hashFiles('src-tauri/Cargo.lock', 'pnpm-lock.yaml') }}
|
||||
restore-keys: arch-
|
||||
|
||||
- name: Install build dependencies
|
||||
run: |
|
||||
pacman -S --noconfirm --needed \
|
||||
base-devel wget zsync nodejs patchelf \
|
||||
cargo cargo-tauri \
|
||||
gtk3 libayatana-appindicator webkit2gtk-4.1 glib-networking librsvg \
|
||||
xorg-server-xvfb
|
||||
|
||||
- name: setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Build deb with tauri
|
||||
run: |
|
||||
pnpm install
|
||||
cargo-tauri build --bundles deb --config '{"bundle":{"createUpdaterArtifacts":false},"build":{"beforeBuildCommand":"pnpm build"}}'
|
||||
|
||||
- name: Extract deb into /usr
|
||||
run: |
|
||||
cd src-tauri/target/release/bundle/deb
|
||||
ar x ./*.deb
|
||||
tar -xf data.tar.*
|
||||
cp -a usr/. /usr/
|
||||
|
||||
- name: Build AppImage
|
||||
run: |
|
||||
cd pkg/AppImage
|
||||
chmod +x ./AppImage.sh
|
||||
./AppImage.sh
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: appimage
|
||||
path: pkg/AppImage/dist/*.AppImage
|
||||
|
||||
build-android:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
- name: setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
- name: setup node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: "pnpm"
|
||||
|
||||
- name: setup Java 17
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: "17"
|
||||
|
||||
- name: setup Android SDK
|
||||
uses: android-actions/setup-android@v4
|
||||
- name: install Android SDK components
|
||||
run: |
|
||||
sdkmanager --install "platforms;android-36" "build-tools;36.0.0" "ndk;28.2.13676358"
|
||||
yes | sdkmanager --licenses
|
||||
sudo apt-get install -y glslang-tools
|
||||
|
||||
- name: install Rust stable with android target
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
targets: aarch64-linux-android
|
||||
|
||||
- name: Rust cache
|
||||
uses: swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: "./src-tauri -> target"
|
||||
|
||||
- name: install frontend dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: download android bundled assets
|
||||
run: pnpm android:assets
|
||||
|
||||
- name: restore gradle wrapper jar
|
||||
run: |
|
||||
VER=$(sed -n 's/.*gradle-\([0-9][0-9.]*\)-bin\.zip.*/\1/p' src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties)
|
||||
curl -fL -o src-tauri/gen/android/gradle/wrapper/gradle-wrapper.jar \
|
||||
"https://raw.githubusercontent.com/gradle/gradle/v${VER}/gradle/wrapper/gradle-wrapper.jar"
|
||||
|
||||
- name: set up android signing keystore
|
||||
env:
|
||||
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
|
||||
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
|
||||
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
||||
run: |
|
||||
printf '%s' "$ANDROID_KEYSTORE_BASE64" | base64 -d > src-tauri/gen/android/app/release.keystore
|
||||
cat > src-tauri/gen/android/app/key.properties <<EOF
|
||||
keyAlias=$ANDROID_KEY_ALIAS
|
||||
keyPassword=$ANDROID_KEYSTORE_PASSWORD
|
||||
storeFile=release.keystore
|
||||
storePassword=$ANDROID_KEYSTORE_PASSWORD
|
||||
EOF
|
||||
|
||||
- name: build Android APK
|
||||
env:
|
||||
ANDROID_NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/28.2.13676358
|
||||
NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/28.2.13676358
|
||||
run: npx tauri android build --target aarch64
|
||||
- name: upload APK
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: android-apk
|
||||
path: src-tauri/gen/android/app/build/outputs/apk/universal/release/*.apk
|
||||
|
|
|
|||
112
.github/workflows/nightly.yml
vendored
|
|
@ -1,112 +0,0 @@
|
|||
name: 'nightly'
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 17 * * *' #neo: 5PM UTC
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
nightly-tauri:
|
||||
permissions:
|
||||
contents: write
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- platform: 'macos-latest'
|
||||
args: '--target aarch64-apple-darwin'
|
||||
- platform: 'macos-latest'
|
||||
args: '--target x86_64-apple-darwin'
|
||||
- platform: 'ubuntu-22.04'
|
||||
args: ''
|
||||
- platform: 'windows-latest'
|
||||
args: ''
|
||||
|
||||
runs-on: ${{ matrix.platform }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: install dependencies (ubuntu only)
|
||||
if: matrix.platform == 'ubuntu-22.04'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libudev-dev
|
||||
|
||||
- name: setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
- name: setup node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: install Rust stable
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
|
||||
|
||||
- name: Rust cache
|
||||
uses: swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: './src-tauri -> target'
|
||||
|
||||
- name: install frontend dependencies
|
||||
run: pnpm install
|
||||
- name: build and fix macOS
|
||||
if: matrix.platform == 'macos-latest'
|
||||
run: |
|
||||
pnpm tauri build ${{ matrix.args }}
|
||||
pnpm run post-build:macos
|
||||
- uses: tauri-apps/tauri-action@v0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tagName: nightly
|
||||
releaseName: 'Emerald Nightly'
|
||||
releaseBody: |
|
||||
# Emerald Legacy Launcher (Nightly)
|
||||
# What to download?
|
||||
- `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
|
||||
- `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
|
||||
- `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
|
||||
- `Emerald.Legacy.Launcher-*_x64.dmg` for macOS (Intel)
|
||||
- `Emerald.Legacy.Launcher-*_aarch64.dmg` for macOS (M-series)
|
||||
- `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
|
||||
- `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
|
||||
---
|
||||
# Windows SmartScreen
|
||||
This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
|
||||
|
||||
1. Click the **"More info"** link under the main text.
|
||||
2. Click the **"Run anyway"** button that appears.
|
||||
---
|
||||
# macOS "Damaged" Error Fix
|
||||
The macOS builds now include automatic fixes for Gatekeeper quarantine issues. The app should launch without "application is damaged" errors.
|
||||
|
||||
releaseDraft: false
|
||||
prerelease: true
|
||||
args: ${{ matrix.args }}
|
||||
|
||||
nightly-flatpak:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
container:
|
||||
image: bilelmoussaoui/flatpak-github-actions:freedesktop-23.08
|
||||
options: --privileged
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
|
||||
with:
|
||||
bundle: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
|
||||
manifest-path: flatpak/io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.yml
|
||||
cache-key: flatpak-builder-${{ github.sha }}
|
||||
- uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
files: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
|
||||
tag_name: nightly
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
42
.github/workflows/nix.yml
vendored
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
name: Nix
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write
|
||||
|
||||
concurrency:
|
||||
group: nix-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: DeterminateSystems/nix-installer-action@main
|
||||
|
||||
- uses: DeterminateSystems/magic-nix-cache-action@main
|
||||
|
||||
- name: Build stable package
|
||||
run: nix build .#emerald-legacy-launcher --print-build-logs
|
||||
|
||||
- name: Build git package
|
||||
run: nix build .#emerald-legacy-launcher-git --out-link result-git --print-build-logs
|
||||
|
||||
- name: Flake check
|
||||
run: nix flake check --print-build-logs
|
||||
|
||||
- name: Verify outputs
|
||||
run: |
|
||||
test -x ./result/bin/emerald-legacy-launcher
|
||||
test -x ./result-git/bin/emerald-legacy-launcher
|
||||
nix path-info -Sh ./result ./result-git
|
||||
ls -la ./result/bin/
|
||||
ls -la ./result-git/bin/
|
||||
ls -la ./result/share/applications/ || true
|
||||
248
.github/workflows/publish.yml
vendored
|
|
@ -1,5 +1,4 @@
|
|||
name: 'publish'
|
||||
|
||||
name: "publish"
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
|
|
@ -8,26 +7,32 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
version: ${{ steps.version.outputs.version }}
|
||||
body: ${{ steps.version.outputs.body }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- id: version
|
||||
run: echo "version=$(jq -r .version package.json)" >> $GITHUB_OUTPUT
|
||||
run: |
|
||||
echo "version=$(jq -r .version package.json)" >> $GITHUB_OUTPUT
|
||||
echo "body<<EOF" >> "$GITHUB_OUTPUT"
|
||||
cat RELEASE_NOTES.md >> "$GITHUB_OUTPUT"
|
||||
echo "EOF" >> "$GITHUB_OUTPUT"
|
||||
|
||||
publish-tauri:
|
||||
needs: get-version
|
||||
permissions:
|
||||
contents: write
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- platform: 'macos-latest'
|
||||
args: '--target aarch64-apple-darwin'
|
||||
- platform: 'macos-latest'
|
||||
args: '--target x86_64-apple-darwin'
|
||||
- platform: 'ubuntu-22.04'
|
||||
args: ''
|
||||
- platform: 'windows-latest'
|
||||
args: ''
|
||||
- platform: "macos-latest"
|
||||
args: "--target aarch64-apple-darwin"
|
||||
- platform: "macos-latest"
|
||||
args: "--target x86_64-apple-darwin"
|
||||
- platform: "ubuntu-22.04"
|
||||
args: ""
|
||||
- platform: "windows-latest"
|
||||
args: ""
|
||||
|
||||
runs-on: ${{ matrix.platform }}
|
||||
steps:
|
||||
|
|
@ -47,7 +52,7 @@ jobs:
|
|||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: 'pnpm'
|
||||
cache: "pnpm"
|
||||
|
||||
- name: install Rust stable
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
|
@ -57,72 +62,164 @@ jobs:
|
|||
- name: Rust cache
|
||||
uses: swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: './src-tauri -> target'
|
||||
workspaces: "./src-tauri -> target"
|
||||
|
||||
- name: install frontend dependencies
|
||||
run: pnpm install
|
||||
- name: Create PKG with post-install script
|
||||
if: matrix.platform == 'macos-latest'
|
||||
run: |
|
||||
# Create temporary directory for PKG creation
|
||||
mkdir -p pkg_temp/scripts
|
||||
cp scripts/postinstall.sh pkg_temp/scripts/
|
||||
|
||||
# Build the app first
|
||||
pnpm tauri build -- ${{ matrix.args }}
|
||||
|
||||
# Find the built app
|
||||
APP_PATH=$(find src-tauri/target/release/bundle/macos/ -name "*.app" | head -1)
|
||||
APP_NAME=$(basename "$APP_PATH")
|
||||
|
||||
# Create PKG with post-install script
|
||||
pkgbuild --root "$APP_PATH/.." \
|
||||
--install-location /Applications \
|
||||
--scripts pkg_temp/scripts \
|
||||
--identifier "com.emerald.legacy" \
|
||||
--version "1.0.0" \
|
||||
--install-location "/Applications" \
|
||||
--root "$APP_PATH" \
|
||||
"Emerald-Legacy-Launcher.pkg"
|
||||
|
||||
# Move PKG to bundle directory
|
||||
mkdir -p src-tauri/target/release/bundle/macos/
|
||||
mv "Emerald-Legacy-Launcher.pkg" src-tauri/target/release/bundle/macos/
|
||||
- uses: tauri-apps/tauri-action@v0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
with:
|
||||
uploadPlainBinary: true
|
||||
tagName: v__VERSION__
|
||||
releaseName: 'Emerald v__VERSION__'
|
||||
releaseBody: |
|
||||
# What to download?
|
||||
- `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
|
||||
- `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
|
||||
- `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal, Currently Broken)
|
||||
- `Emerald.Legacy.Launcher-*_x64.dmg` for macOS (Intel)
|
||||
- `Emerald.Legacy.Launcher-*_aarch64.dmg` for macOS (M-series)
|
||||
- `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
|
||||
- `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
|
||||
- `Emerald.Legacy.Launcher.flatpak` for GNU/Linux (Flatpak, Recommended)
|
||||
---
|
||||
# Windows SmartScreen
|
||||
This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
|
||||
|
||||
1. Click the **"More info"** link under the main text.
|
||||
2. Click the **"Run anyway"** button that appears.
|
||||
---
|
||||
# macOS "Damaged" Error Fix
|
||||
The macOS builds now include automatic fixes for Gatekeeper quarantine issues. The app should launch without "application is damaged" errors.
|
||||
|
||||
releaseDraft: false
|
||||
releaseName: "Emerald v__VERSION__"
|
||||
releaseBody: ${{ needs.get-version.outputs.body }}
|
||||
releaseDraft: true
|
||||
prerelease: false
|
||||
uploadUpdaterJson: true
|
||||
args: ${{ matrix.args }}
|
||||
|
||||
build-appimage:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: archlinux:latest
|
||||
steps:
|
||||
- name: Bootstrap keyring and git
|
||||
run: |
|
||||
pacman -Syu --noconfirm archlinux-keyring
|
||||
pacman -S --noconfirm --needed git
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
src-tauri/target
|
||||
node_modules
|
||||
/var/cache/pacman/pkg
|
||||
key: arch-${{ hashFiles('src-tauri/Cargo.lock', 'pnpm-lock.yaml') }}
|
||||
restore-keys: arch-
|
||||
|
||||
- name: Install build dependencies
|
||||
run: |
|
||||
pacman -S --noconfirm --needed \
|
||||
base-devel wget zsync nodejs patchelf \
|
||||
cargo cargo-tauri \
|
||||
gtk3 libayatana-appindicator webkit2gtk-4.1 glib-networking librsvg \
|
||||
xorg-server-xvfb
|
||||
|
||||
- name: setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Build deb with tauri
|
||||
run: |
|
||||
pnpm install
|
||||
cargo-tauri build --bundles deb --config '{"bundle":{"createUpdaterArtifacts":false},"build":{"beforeBuildCommand":"pnpm build"}}'
|
||||
|
||||
- name: Extract deb into /usr
|
||||
run: |
|
||||
cd src-tauri/target/release/bundle/deb
|
||||
ar x ./*.deb
|
||||
tar -xf data.tar.*
|
||||
cp -a usr/. /usr/
|
||||
|
||||
- name: Build AppImage
|
||||
run: |
|
||||
cd pkg/AppImage
|
||||
chmod +x ./AppImage.sh
|
||||
./AppImage.sh
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: appimage
|
||||
path: pkg/AppImage/dist/*.AppImage* #neo: *.AppImage* because .zsync as well
|
||||
|
||||
build-android:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
- name: setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
- name: setup node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: "pnpm"
|
||||
|
||||
- name: setup Java 17
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: "17"
|
||||
|
||||
- name: setup Android SDK
|
||||
uses: android-actions/setup-android@v4
|
||||
|
||||
- name: install Android SDK components
|
||||
run: |
|
||||
sdkmanager --install "platforms;android-36" "build-tools;36.0.0" "ndk;28.2.13676358"
|
||||
yes | sdkmanager --licenses
|
||||
sudo apt-get install -y glslang-tools
|
||||
|
||||
- name: install Rust stable with android target
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
targets: aarch64-linux-android
|
||||
|
||||
- name: Rust cache
|
||||
uses: swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: "./src-tauri -> target"
|
||||
|
||||
- name: install frontend dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: download android bundled assets
|
||||
run: pnpm android:assets
|
||||
|
||||
- name: restore gradle wrapper jar
|
||||
run: |
|
||||
VER=$(sed -n 's/.*gradle-\([0-9][0-9.]*\)-bin\.zip.*/\1/p' src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties)
|
||||
curl -fL -o src-tauri/gen/android/gradle/wrapper/gradle-wrapper.jar \
|
||||
"https://raw.githubusercontent.com/gradle/gradle/v${VER}/gradle/wrapper/gradle-wrapper.jar"
|
||||
|
||||
- name: set up android signing keystore
|
||||
env:
|
||||
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
|
||||
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
|
||||
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
||||
run: |
|
||||
printf '%s' "$ANDROID_KEYSTORE_BASE64" | base64 -d > src-tauri/gen/android/app/release.keystore
|
||||
cat > src-tauri/gen/android/app/key.properties <<EOF
|
||||
keyAlias=$ANDROID_KEY_ALIAS
|
||||
keyPassword=$ANDROID_KEYSTORE_PASSWORD
|
||||
storeFile=release.keystore
|
||||
storePassword=$ANDROID_KEYSTORE_PASSWORD
|
||||
EOF
|
||||
|
||||
- name: build Android APK
|
||||
env:
|
||||
ANDROID_NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/28.2.13676358
|
||||
NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/28.2.13676358
|
||||
run: npx tauri android build --target aarch64
|
||||
|
||||
- name: upload APK
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: android-apk
|
||||
path: src-tauri/gen/android/app/build/outputs/apk/universal/release/*.apk
|
||||
|
||||
publish-flatpak:
|
||||
needs: get-version
|
||||
needs: [get-version, build-appimage, build-android]
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
|
@ -133,16 +230,29 @@ jobs:
|
|||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
- name: sleep for 10 seconds
|
||||
run: sleep 10
|
||||
- name: sleep for 20 seconds
|
||||
run: sleep 20
|
||||
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
|
||||
with:
|
||||
bundle: Emerald.Legacy.Launcher.flatpak
|
||||
bundle: emerald.flatpak
|
||||
manifest-path: flatpak/io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.yml
|
||||
cache-key: flatpak-builder-${{ github.sha }}
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: appimage
|
||||
path: appimage
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: android-apk
|
||||
path: android
|
||||
- uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
body: ${{ needs.get-version.outputs.body }}
|
||||
tag_name: v${{ needs.get-version.outputs.version }}
|
||||
files: Emerald.Legacy.Launcher.flatpak
|
||||
files: |
|
||||
emerald.flatpak
|
||||
appimage/*.AppImage*
|
||||
android/*.apk
|
||||
draft: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
|
|
|||
47
.github/workflows/update-homebrew-stable.yml
vendored
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
name: Update Homebrew Cask (Stable)
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
update-cask:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: main
|
||||
|
||||
- name: Download release assets and update homebrew files
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
TAG="${{ github.event.release.tag_name }}"
|
||||
VERSION="${TAG#v}"
|
||||
echo "Processing tag $TAG (version: $VERSION)"
|
||||
|
||||
mkdir -p dist
|
||||
# Download the Intel dmg, Apple Silicon dmg, and Linux AppImage
|
||||
gh release download "$TAG" --dir dist --pattern "*_x64.dmg" --pattern "*_aarch64.dmg" --pattern "*_amd64.AppImage" -R "${{ github.repository }}"
|
||||
ls -l dist
|
||||
|
||||
# Calculate hashes
|
||||
INTEL_HASH=$(sha256sum dist/*_x64.dmg | cut -d' ' -f1)
|
||||
ARM_HASH=$(sha256sum dist/*_aarch64.dmg | cut -d' ' -f1)
|
||||
LINUX_HASH=$(sha256sum dist/*_amd64.AppImage | cut -d' ' -f1)
|
||||
|
||||
echo "Intel SHA: $INTEL_HASH"
|
||||
echo "ARM SHA: $ARM_HASH"
|
||||
echo "Linux SHA: $LINUX_HASH"
|
||||
|
||||
python3 scripts/update-homebrew.py --type stable --version "$VERSION" --intel-hash "$INTEL_HASH" --arm-hash "$ARM_HASH" --linux-hash "$LINUX_HASH"
|
||||
|
||||
- name: Commit and push changes
|
||||
run: |
|
||||
git config --global user.name "github-actions[bot]"
|
||||
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
git add Casks/ Formula/
|
||||
git diff --quiet && git diff --staged --quiet || (git commit -m "chore: update stable Homebrew casks/formula [skip ci]" && git push origin main)
|
||||
41
.github/workflows/update-nix-stable.yml
vendored
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
name: Update Nix Flake (Stable)
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
update-flake:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: main
|
||||
|
||||
- uses: DeterminateSystems/nix-installer-action@main
|
||||
|
||||
- name: Prefetch release source and update flake.nix
|
||||
run: |
|
||||
TAG="${{ github.event.release.tag_name }}"
|
||||
VERSION="${TAG#v}"
|
||||
echo "Processing tag $TAG (version: $VERSION)"
|
||||
|
||||
BASE32_HASH=$(nix-prefetch-url --unpack \
|
||||
"https://github.com/LCE-Hub/LCE-Emerald-Launcher/archive/refs/tags/${TAG}.tar.gz")
|
||||
SRC_HASH=$(nix hash to-sri --type sha256 "$BASE32_HASH")
|
||||
|
||||
echo "stableSrcHash: $SRC_HASH"
|
||||
python3 scripts/update-nix-stable.py --version "$VERSION" --src-hash "$SRC_HASH"
|
||||
|
||||
- name: Commit and push changes
|
||||
run: |
|
||||
git config --global user.name "github-actions[bot]"
|
||||
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
git add flake.nix
|
||||
git diff --quiet && git diff --staged --quiet || (
|
||||
git commit -m "chore: update Nix stable pin to ${{ github.event.release.tag_name }} [skip ci]" &&
|
||||
git push origin main
|
||||
)
|
||||
12
.gitignore
vendored
|
|
@ -1,5 +1,6 @@
|
|||
# Rust
|
||||
/src-tauri/target/
|
||||
/src-tauri/tests
|
||||
|
||||
# Node
|
||||
/node_modules/
|
||||
|
|
@ -23,6 +24,10 @@
|
|||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Nix
|
||||
/result
|
||||
/result-*
|
||||
|
||||
# Log files
|
||||
*.log
|
||||
|
||||
|
|
@ -30,4 +35,9 @@ Thumbs.db
|
|||
/.flatpak-builder
|
||||
/*.flatpak
|
||||
/emerald-repo
|
||||
/ignore/*
|
||||
/ignore/*
|
||||
|
||||
# Android bundled runtime assets (too large for GitHub; must be present in the working tree)
|
||||
/src-tauri/gen/android/app/src/main/assets/imagefs.tar.zst
|
||||
/src-tauri/gen/android/app/src/main/assets/proton-*.tar.zst
|
||||
|
||||
|
|
|
|||
3
.gitmodules
vendored
|
|
@ -1,3 +1,6 @@
|
|||
[submodule "flatpak/shared-modules"]
|
||||
path = flatpak/shared-modules
|
||||
url = https://github.com/flathub/shared-modules.git
|
||||
[submodule "DiamondRuntime"]
|
||||
path = DiamondRuntime
|
||||
url = https://github.com/LCE-Hub/DiamondRuntime.git
|
||||
|
|
|
|||
15
BUILDING.md
|
|
@ -32,4 +32,17 @@ codesign --force --deep --sign - "/path/to/Emerald\ Legacy\ Launcher.app"
|
|||
|
||||
```sh
|
||||
pnpm flatpak # or npm
|
||||
```
|
||||
```
|
||||
|
||||
## Gentoo
|
||||
|
||||
A Portage overlay lives in [`gentoo/`](gentoo/). See the GNU/Linux installation section in [README.md](README.md).
|
||||
|
||||
## Android
|
||||
|
||||
Building Emerald on Android is pretty easy,
|
||||
|
||||
```sh
|
||||
pnpm android:assets #neo: fetches the rootfs and proton11
|
||||
pnpm tauri android build -t aarch64
|
||||
```
|
||||
|
|
|
|||
18
Casks/lce-emerald-launcher.rb
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
cask "lce-emerald-launcher" do
|
||||
version "1.6.1"
|
||||
sha256 intel: "dd86c3f63088585f71ab94acd7c3e3ec0b535fc06ef71e7770741e08fe60782f",
|
||||
arm: "e2e6c50a5b0b847ed7c857ab8a4ae421fa8666096f3c9fa8bb216f21639dcfd2"
|
||||
|
||||
url "https://github.com/LCE-Hub/LCE-Emerald-Launcher/releases/download/v#{version}/LCE.Emerald.Launcher_#{version}_#{arch}.dmg"
|
||||
name "LCE Emerald Launcher"
|
||||
desc "Minecraft Legacy Console Edition Launcher"
|
||||
homepage "https://github.com/LCE-Hub/LCE-Emerald-Launcher"
|
||||
|
||||
app "LCE Emerald Launcher/LCE Emerald Launcher.app"
|
||||
|
||||
zap trash: [
|
||||
"~/Library/Application Support/com.emerald.legacy",
|
||||
"~/Library/Preferences/com.emerald.legacy.plist",
|
||||
"~/Library/Saved Application State/com.emerald.legacy.savedState",
|
||||
]
|
||||
end
|
||||
1
DiamondRuntime
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit c3f56e880c4c59fe591fa2bf863ea6f247886749
|
||||
19
Formula/lce-emerald-launcher.rb
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
class LceEmeraldLauncher < Formula
|
||||
desc "Minecraft Legacy Console Edition Launcher"
|
||||
homepage "https://github.com/LCE-Hub/LCE-Emerald-Launcher-cask"
|
||||
url "https://github.com/LCE-Hub/LCE-Emerald-Launcher/releases/download/v#{version}/LCE.Emerald.Launcher_#{version}_amd64.AppImage"
|
||||
sha256 "3f135df96014e6bf83ced13a89ba2ec4599532104e60aea97c45d1d246de62f2"
|
||||
version "1.6.1"
|
||||
license "GPL-3.0-only"
|
||||
|
||||
depends_on :linux
|
||||
|
||||
def install
|
||||
# Rename and install the AppImage
|
||||
bin.install "LCE.Emerald.Launcher_#{version}_amd64.AppImage" => "lce-emerald-launcher"
|
||||
end
|
||||
|
||||
test do
|
||||
assert_predicate bin/"lce-emerald-launcher", :exist?
|
||||
end
|
||||
end
|
||||
105
README.md
|
|
@ -3,7 +3,7 @@
|
|||
<h1>LCE Emerald Launcher</h1>
|
||||
<p><strong>FOSS cross-platform launcher for Minecraft Legacy Console Edition</strong></p>
|
||||
<p>
|
||||
<img src="https://img.shields.io/badge/version-1.0.0-blue?style=flat-square" alt="Version">
|
||||
<img src="https://img.shields.io/badge/version-1.6.1-blue?style=flat-square" alt="Version">
|
||||
<img src="https://img.shields.io/badge/license-GPL--3.0-green?style=flat-square" alt="License">
|
||||
<img src="https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20GNU/Linux-lightgrey?style=flat-square" alt="Platforms">
|
||||
</p>
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
<a href="https://ko-fi.com/kayjann">
|
||||
<img src="https://img.shields.io/badge/ko--fi-Donate%20to%20the%20Project-grey?style=for-the-badge&logo=kofi&logoColor=white&labelColor=FF5E5B" alt="Donate to the Project">
|
||||
</a>
|
||||
<a href="https://discord.gg/NPMp9JhGYH">
|
||||
<a href="https://discord.gg/cQVKhQXcCx">
|
||||
<img src="https://img.shields.io/badge/discord-Join%20the%20Community-grey?style=for-the-badge&logo=discord&logoColor=white&labelColor=5865F2" alt="Join the Community">
|
||||
</a>
|
||||
</p>
|
||||
|
|
@ -24,6 +24,9 @@
|
|||
|-------------|---------------|----------|
|
||||
| <img width="1388" height="918" alt="image" src="https://github.com/user-attachments/assets/28269ade-db3b-4bff-ac15-e8a6eb53a69e" /> | <img width="1551" height="997" alt="image" src="https://github.com/user-attachments/assets/dca543ab-94cf-48ce-8e61-dfe92fe278a7" /> | <img width="1551" height="997" alt="image" src="https://github.com/user-attachments/assets/d7bc0ed2-3bf4-4704-83c3-75c716d13a65" /> |
|
||||
|
||||
<a href="https://github.com/LCE-Hub/LCE-Emerald-Launcher/releases/latest">
|
||||
<img src="https://raw.githubusercontent.com/rubenpgrady/get-it-on-github/refs/heads/main/get-it-on-github.png" style="width: 160px">
|
||||
</a>
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -35,7 +38,6 @@
|
|||
- [Windows](#windows)
|
||||
- [macOS](#macos)
|
||||
- [GNU/Linux](#gnulinux)
|
||||
- [Game Versions & Partnerships](#game-versions--partnerships)
|
||||
- [Building from Source](#building-from-source)
|
||||
- [Troubleshooting](#troubleshooting)
|
||||
- [Acknowledgments](#acknowledgments)
|
||||
|
|
@ -55,39 +57,24 @@ LCE Emerald Launcher is the easiest way to play Minecraft Legacy Console Edition
|
|||
|
||||
| Feature | Description |
|
||||
|---------|-------------|
|
||||
| **Automated Setup** | One-click installation for neoLegacy, Revelations, 360 Revived, and Hellish Ends |
|
||||
| **Cross-Platform** | Native support for Windows, macOS (Intel & Apple Silicon), and Linux (Steam Deck is supported !) |
|
||||
| **Automated Setup** | One-click installation for neoLegacy, Revelations, 360 Revived, Hellish Ends and others |
|
||||
| **Cross-Platform** | Native support for Windows, macOS (Intel & Apple Silicon), and Linux (Steam Deck is also supported!) |
|
||||
| **Lightweight** | Very light RAM usage thanks to Rust backend and Tauri framework |
|
||||
| **Easy Configuration** | Built-in settings for username, game parameters, and profiles |
|
||||
| **Skin Viewer** | Interactive skin preview using Three.js with layer support |
|
||||
| **Custom Skins** | Import and manage your own skins with local storage |
|
||||
| **Custom Skins** | Import and manage your own skins and capes |
|
||||
| **Controller Support** | Full gamepad navigation support (keyboard support included) |
|
||||
| **Discord Rich Presence** | Show your current activity and game status on Discord |
|
||||
| **Workshop** | Community content |
|
||||
|
||||
---
|
||||
|
||||
## Game Versions & Partnerships
|
||||
|
||||
LCE Emerald Launcher integrates multiple community-driven builds of Minecraft Legacy Console Edition. Each build brings unique features and improvements to the classic LCE experience.
|
||||
|
||||
### Available Builds
|
||||
|
||||
| Build | Developer | Platform | Description |
|
||||
|-------|-----------|----------|-------------|
|
||||
| **[neoLegacy](https://github.com/pieeebot/neoLegacy)** | [@pieeebot](https://github.com/pieeebot) | GitHub | Backports newer title updates to LCE TU19 base. And Minigames |
|
||||
| **[Revelations](https://github.com/itsRevela/LCE-Revelations)** | [@itsRevela](https://github.com/itsRevela) | GitHub | Enhanced LCE with uncapped FPS, graphics fixes, hardcore hearts, and dedicated server security. Features LAN multiplayer, split-screen, and keyboard & mouse support |
|
||||
| **[360 Revived](https://github.com/BluTac10/360Revived)** | [@BluTac10](https://github.com/BluTac10) | GitHub | PC port of Xbox 360 Edition TU19 with desktop optimizations. Features keyboard & mouse, fullscreen, LAN multiplayer, dedicated server, and split-screen support |
|
||||
| **[Hellish Ends](https://github.com/deadvoxelx/HellishEnds)** | [DeadVoxelx](https://github.com/deadvoxelx) | GitHub | Modded build that overhauls Nether and End |
|
||||
| **Workshop** | Community content like DLCs, Textures, Skins and more |
|
||||
| **Free Multiplayer** | Powered by LCEOnline, Emerald provides a free multiplayer service so you can play with anyone without port forwarding! |
|
||||
| **Developer Tools** | Create and edit 4J's propriatery file formats with ease! |
|
||||
| **World conversion** | Import `.ms` files, Java worlds or even an Xbox 360/PS3 world! |
|
||||
| **Playtime counting** | Count your playtime and see your most active days! |
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
<a href="https://github.com/LCE-Hub/LCE-Emerald-Launcher/releases">
|
||||
<img src="https://raw.githubusercontent.com/rubenpgrady/get-it-on-github/refs/heads/main/get-it-on-github.png" style="width: 160px">
|
||||
</a>
|
||||
|
||||
### Windows
|
||||
|
||||
| Format | Best For |
|
||||
|
|
@ -106,6 +93,7 @@ LCE Emerald Launcher integrates multiple community-driven builds of Minecraft Le
|
|||
|--------|-------------|
|
||||
| `.dmg` (x64) | Intel Macs |
|
||||
| `.dmg` (aarch64) | Apple Silicon (M-series and A-series) |
|
||||
| Homebrew Cask | Intel & Apple Silicon (via tap) |
|
||||
|
||||
**Installation Steps:**
|
||||
1. Download the appropriate DMG for your Mac
|
||||
|
|
@ -114,6 +102,15 @@ LCE Emerald Launcher integrates multiple community-driven builds of Minecraft Le
|
|||
- Right-click the app → **Open** → confirm **Open**
|
||||
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
|
||||
|
||||
**Homebrew:**
|
||||
```bash
|
||||
# Tap the repository
|
||||
brew tap LCE-Hub/lce-emerald-launcher https://github.com/LCE-Hub/LCE-Emerald-Launcher
|
||||
|
||||
# Install stable release
|
||||
brew install --cask lce-emerald-launcher
|
||||
```
|
||||
|
||||
### GNU/Linux
|
||||
|
||||
Multiple distribution formats available:
|
||||
|
|
@ -124,12 +121,66 @@ Multiple distribution formats available:
|
|||
| `.rpm` | RHEL, Fedora, openSUSE |
|
||||
| `.AppImage` | Universal (no installation required) |
|
||||
| `.flatpak` | Universal with sandboxing (recommended over AppImage) |
|
||||
| Nix flake | NixOS and any Linux with [Nix](https://nixos.org/download/) installed |
|
||||
| Homebrew | Any Linux with [Homebrew](https://brew.sh/) installed |
|
||||
|
||||
**AUR:**
|
||||
Special thanks to [AntiApple4life](https://aur.archlinux.org/packages?O=0&SeB=m&K=AntiApple4life) for the AUR packages!
|
||||
```bash
|
||||
# git version
|
||||
paru -S emerald-legacy-launcher-git # or yay
|
||||
|
||||
# stable version
|
||||
paru -S emerald-legacy-launcher # or yay
|
||||
|
||||
# binary stable version
|
||||
paru -S emerald-legacy-launcher-bin # or yay
|
||||
```
|
||||
|
||||
**Nix:**
|
||||
Requires [Nix](https://nixos.org/download/) with flakes enabled (`experimental-features = nix-command flakes` in `nix.conf`).
|
||||
```bash
|
||||
# stable release (default) — tracks https://github.com/LCE-Hub/LCE-Emerald-Launcher/releases
|
||||
nix run github:LCE-Hub/LCE-Emerald-Launcher
|
||||
# or explicitly:
|
||||
nix run github:LCE-Hub/LCE-Emerald-Launcher#emerald-legacy-launcher
|
||||
|
||||
# git / latest main
|
||||
nix run github:LCE-Hub/LCE-Emerald-Launcher#emerald-legacy-launcher-git
|
||||
|
||||
# Install to your user profile
|
||||
nix profile install github:LCE-Hub/LCE-Emerald-Launcher # stable
|
||||
nix profile install github:LCE-Hub/LCE-Emerald-Launcher#emerald-legacy-launcher-git # git
|
||||
```
|
||||
|
||||
On NixOS, add the flake as an input and install `packages.<system>.default` / `emerald-legacy-launcher` (stable) or `emerald-legacy-launcher-git` (main).
|
||||
|
||||
**Gentoo:**
|
||||
This repository includes a local Portage overlay under [`gentoo/`](gentoo/). Point `repos.conf` at that directory, then emerge the package (build fetches Cargo/npm deps over the network; Wine/Proton is needed at runtime to launch games):
|
||||
```bash
|
||||
# /etc/portage/repos.conf/emerald-legacy-launcher.conf
|
||||
[emerald-legacy-launcher]
|
||||
location = /path/to/LCE-Emerald-Launcher/gentoo
|
||||
auto-sync = no
|
||||
|
||||
sudo emerge games-util/emerald-legacy-launcher # 1.6.1
|
||||
# sudo emerge =games-util/emerald-legacy-launcher-9999 # live git
|
||||
```
|
||||
|
||||
**Flatpak Installation:**
|
||||
```bash
|
||||
flatpak install emerald.flatpak
|
||||
```
|
||||
|
||||
**Homebrew:**
|
||||
```bash
|
||||
# Tap the repository
|
||||
brew tap LCE-Hub/lce-emerald-launcher https://github.com/LCE-Hub/LCE-Emerald-Launcher
|
||||
|
||||
# Install stable release
|
||||
brew install lce-emerald-launcher
|
||||
```
|
||||
|
||||
**Dependencies (if building from source):**
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
|
|
@ -186,6 +237,8 @@ sudo apt install --reinstall libwebkit2gtk-4.1-0
|
|||
- **The Emerald Team** - Technical development and maintenance
|
||||
- **4J Studios & Mojang** - Original creators of Legacy Console Edition
|
||||
- **The LCE Community** - Research and foundations for LCE on PC
|
||||
- **Str1k3r** - Original creator of LCEOnline
|
||||
- **DTention** - Original creator of [LCE-Save-Converter](https://github.com/dtentiion/LCE-Save-Converter)
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
BIN
RELEASE_ARTWORK.png
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
25
RELEASE_NOTES.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||

|
||||
|
||||
- Fix title bar and panorama not showing on setup
|
||||
- **Partnership with LapboardMC!**
|
||||
- **Removed LCEOnline Client, LCEOnline functionality is built into Emerald**
|
||||
- Fix audio skipping bug on Windows
|
||||
- Gentoo, Nix flakes and Homebrew support
|
||||
- **Xbox 360, PS3 and Java -> LCE world importing support (beta!)**
|
||||
- Proper Discord RPC shutdown
|
||||
- Remove click effects when disabling animations
|
||||
- **FULL Android Port powered by our own DiamondRuntime for running the game!**
|
||||
- Fix neoLegacy downloading issue
|
||||
- **A lot of UI polish (thanks piebot!)**
|
||||
- Add 2 default capes
|
||||
- Add more default skins
|
||||
- **Emerald Arguments.Schema support!**
|
||||
- **Partnership with Amythest LCE**
|
||||
- Fix Slim skins rendering in-launcher
|
||||
- Randomize splash texts
|
||||
- **Partnership with Project Lost Legacy (soon!)**
|
||||
- Add Player Head to Discord RPC
|
||||
- Make skin face inwards instead of outwards
|
||||
- Game crash log viewer support!
|
||||
- **Intel macOS support**
|
||||
- And more that I forgot!
|
||||
27
flake.lock
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1784120854,
|
||||
"narHash": "sha256-KesHgItiZPgGX740axSiQLcIQ8D24MDqNpkKYWIek8k=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "753cc8a3a87467296ddd1fa93f0cc3e81120ee46",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
107
flake.nix
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
{
|
||||
description = "LCE Emerald Launcher — FOSS cross-platform launcher for Minecraft Legacy Console Edition";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
};
|
||||
|
||||
outputs =
|
||||
{ self, nixpkgs }:
|
||||
let
|
||||
inherit (nixpkgs) lib;
|
||||
systems = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
forAllSystems = lib.genAttrs systems;
|
||||
pkgsFor =
|
||||
system:
|
||||
import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ self.overlays.default ];
|
||||
};
|
||||
|
||||
# Bump these together when packaging a new upstream stable release.
|
||||
stableVersion = "1.6.0";
|
||||
stableSrcHash = "sha256-VlqBCZa42MLmJ1nUNlH7PIcLp/X7mBLCS/hm/ISiHNA=";
|
||||
in
|
||||
{
|
||||
overlays.default = final: _prev: {
|
||||
emerald-legacy-launcher = final.callPackage ./nix/package.nix {
|
||||
version = stableVersion;
|
||||
src = final.fetchFromGitHub {
|
||||
owner = "LCE-Hub";
|
||||
repo = "LCE-Emerald-Launcher";
|
||||
rev = "v${stableVersion}";
|
||||
hash = stableSrcHash;
|
||||
};
|
||||
};
|
||||
|
||||
emerald-legacy-launcher-git = final.callPackage ./nix/package.nix {
|
||||
version = "unstable-${self.shortRev or self.dirtyShortRev or "dirty"}";
|
||||
src = self;
|
||||
};
|
||||
};
|
||||
|
||||
packages = forAllSystems (
|
||||
system:
|
||||
let
|
||||
pkgs = pkgsFor system;
|
||||
in
|
||||
{
|
||||
default = pkgs.emerald-legacy-launcher;
|
||||
emerald-legacy-launcher = pkgs.emerald-legacy-launcher;
|
||||
emerald-legacy-launcher-git = pkgs.emerald-legacy-launcher-git;
|
||||
}
|
||||
);
|
||||
|
||||
apps = forAllSystems (system: {
|
||||
default = {
|
||||
type = "app";
|
||||
program = lib.getExe self.packages.${system}.default;
|
||||
};
|
||||
emerald-legacy-launcher-git = {
|
||||
type = "app";
|
||||
program = lib.getExe self.packages.${system}.emerald-legacy-launcher-git;
|
||||
};
|
||||
});
|
||||
|
||||
checks = forAllSystems (system: {
|
||||
package = self.packages.${system}.default;
|
||||
package-git = self.packages.${system}.emerald-legacy-launcher-git;
|
||||
});
|
||||
|
||||
devShells = forAllSystems (
|
||||
system:
|
||||
let
|
||||
pkgs = pkgsFor system;
|
||||
in
|
||||
{
|
||||
default = pkgs.mkShell {
|
||||
inputsFrom = [ pkgs.emerald-legacy-launcher-git ];
|
||||
packages = with pkgs; [
|
||||
cargo
|
||||
rustc
|
||||
rustfmt
|
||||
clippy
|
||||
cargo-tauri
|
||||
nodejs
|
||||
pnpm_10
|
||||
unzip
|
||||
libarchive
|
||||
python3
|
||||
pkg-config
|
||||
];
|
||||
shellHook = ''
|
||||
echo "Emerald Legacy Launcher dev shell"
|
||||
echo " pnpm install && pnpm tauri dev"
|
||||
'';
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
formatter = forAllSystems (system: (pkgsFor system).nixfmt);
|
||||
};
|
||||
}
|
||||
|
|
@ -1,7 +1,9 @@
|
|||
[Desktop Entry]
|
||||
Name=Emerald Legacy Launcher
|
||||
Comment=FOSS cross-platform launcher for Minecraft Legacy Console Edition
|
||||
Exec=emerald-legacy-launcher
|
||||
Exec=emerald-legacy-launcher %u
|
||||
Icon=io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher
|
||||
Type=Application
|
||||
Categories=Game;
|
||||
Categories=Game;
|
||||
MimeType=x-scheme-handler/emerald;x-scheme-handler/emeraldlauncher;x-scheme-handler/discord-1482504445152460871;
|
||||
StartupNotify=true
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
<url type="homepage">https://github.com</url>
|
||||
<developer_name>Emerald Team</developer_name>
|
||||
<releases>
|
||||
<release version="1.0.0" date="2026-03-19">
|
||||
<release version="1.6.0" date="2026-03-19">
|
||||
<description>
|
||||
<p>Latest stable release of the Emerald Legacy Launcher.</p>
|
||||
</description>
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ sdk-extensions:
|
|||
command: emerald-legacy-launcher
|
||||
finish-args:
|
||||
- --share=network
|
||||
- --share=ipc
|
||||
- --device=input
|
||||
- --socket=x11
|
||||
- --socket=wayland
|
||||
|
|
@ -15,6 +16,9 @@ finish-args:
|
|||
- --filesystem=xdg-data
|
||||
- --socket=pulseaudio
|
||||
- --filesystem=xdg-run/pipewire-0
|
||||
- --socket=session-bus
|
||||
- --talk-name=org.freedesktop.portal.Desktop
|
||||
- --talk-name=org.freedesktop.portal.OpenURI
|
||||
|
||||
modules:
|
||||
- shared-modules/libayatana-appindicator/libayatana-appindicator-gtk3.json
|
||||
|
|
|
|||
1
gentoo/games-util/emerald-legacy-launcher/Manifest
Normal file
|
|
@ -0,0 +1 @@
|
|||
DIST emerald-legacy-launcher-1.5.1.tar.gz 18500442 BLAKE2B 365d9dd36ee6fddb90625719b599c8fc492eba4ce0fb8926c953f2a7d7f4987bf77d91de6a140a489534ba61e8a71bf9e65d8e015a35af31bccb84ca3a023178 SHA512 c713ef81e56d55d7135fa4228f875822a3eee38ace86d8d28a59a8b4afeff28844bf698e9902eb66075b425a0fb71ae72969ae1fe99ce185a005b5f42a4dccc8
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
# Copyright 2026 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit desktop xdg
|
||||
|
||||
DESCRIPTION="FOSS cross-platform launcher for Minecraft Legacy Console Edition"
|
||||
HOMEPAGE="https://github.com/LCE-Hub/LCE-Emerald-Launcher"
|
||||
SRC_URI="https://github.com/LCE-Hub/LCE-Emerald-Launcher/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
|
||||
S="${WORKDIR}/LCE-Emerald-Launcher-${PV}"
|
||||
|
||||
LICENSE="GPL-3"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64"
|
||||
|
||||
# Cargo crates and npm packages are fetched at build time.
|
||||
RESTRICT="network-sandbox"
|
||||
|
||||
RDEPEND="
|
||||
dev-libs/glib:2
|
||||
dev-libs/libayatana-appindicator
|
||||
dev-libs/openssl:=
|
||||
net-libs/libsoup:3.0
|
||||
net-libs/webkit-gtk:4.1
|
||||
x11-libs/cairo
|
||||
x11-libs/gdk-pixbuf:2
|
||||
x11-libs/gtk+:3
|
||||
x11-libs/pango
|
||||
"
|
||||
DEPEND="${RDEPEND}"
|
||||
BDEPEND="
|
||||
|| (
|
||||
>=dev-lang/rust-1.77.0:*
|
||||
>=dev-lang/rust-bin-1.77.0:*
|
||||
)
|
||||
net-libs/nodejs[npm]
|
||||
virtual/pkgconfig
|
||||
"
|
||||
|
||||
# Rust binaries ignore *FLAGS from make.conf.
|
||||
QA_FLAGS_IGNORED="usr/bin/emerald-legacy-launcher"
|
||||
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
# Disable updater artifact signing (no Tauri signing key in distro builds).
|
||||
sed -i \
|
||||
-e 's/"createUpdaterArtifacts": true/"createUpdaterArtifacts": false/' \
|
||||
src-tauri/tauri.conf.json || die
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
local -x CI=true
|
||||
local -x npm_config_audit=false
|
||||
local -x npm_config_fund=false
|
||||
local -x npm_config_update_notifier=false
|
||||
|
||||
npm install || die "npm install failed"
|
||||
npm run tauri -- build --no-bundle || die "tauri build failed"
|
||||
}
|
||||
|
||||
src_install() {
|
||||
dobin src-tauri/target/release/emerald-legacy-launcher
|
||||
|
||||
newicon -s 32 src-tauri/icons/32x32.png emerald-legacy-launcher.png
|
||||
newicon -s 64 src-tauri/icons/64x64.png emerald-legacy-launcher.png
|
||||
newicon -s 128 src-tauri/icons/128x128.png emerald-legacy-launcher.png
|
||||
newicon -s 256 src-tauri/icons/128x128@2x.png emerald-legacy-launcher.png
|
||||
newicon -s 512 src-tauri/icons/icon.png emerald-legacy-launcher.png
|
||||
|
||||
domenu "${FILESDIR}"/emerald-legacy-launcher.desktop
|
||||
|
||||
insinto /usr/share/metainfo
|
||||
newins flatpak/io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.metainfo.xml \
|
||||
io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.metainfo.xml
|
||||
|
||||
dodoc README.md LICENSE
|
||||
}
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
# Copyright 2026 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit desktop git-r3 xdg
|
||||
|
||||
DESCRIPTION="FOSS cross-platform launcher for Minecraft Legacy Console Edition"
|
||||
HOMEPAGE="https://github.com/LCE-Hub/LCE-Emerald-Launcher"
|
||||
EGIT_REPO_URI="https://github.com/LCE-Hub/LCE-Emerald-Launcher.git"
|
||||
|
||||
LICENSE="GPL-3"
|
||||
SLOT="0"
|
||||
PROPERTIES="live"
|
||||
|
||||
# Cargo crates and npm packages are fetched at build time.
|
||||
RESTRICT="network-sandbox"
|
||||
|
||||
RDEPEND="
|
||||
dev-libs/glib:2
|
||||
dev-libs/libayatana-appindicator
|
||||
dev-libs/openssl:=
|
||||
net-libs/libsoup:3.0
|
||||
net-libs/webkit-gtk:4.1
|
||||
x11-libs/cairo
|
||||
x11-libs/gdk-pixbuf:2
|
||||
x11-libs/gtk+:3
|
||||
x11-libs/pango
|
||||
"
|
||||
DEPEND="${RDEPEND}"
|
||||
BDEPEND="
|
||||
|| (
|
||||
>=dev-lang/rust-1.77.0:*
|
||||
>=dev-lang/rust-bin-1.77.0:*
|
||||
)
|
||||
net-libs/nodejs[npm]
|
||||
virtual/pkgconfig
|
||||
"
|
||||
|
||||
# Rust binaries ignore *FLAGS from make.conf.
|
||||
QA_FLAGS_IGNORED="usr/bin/emerald-legacy-launcher"
|
||||
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
# Prefer npm for the frontend build; disable updater artifact signing
|
||||
# (no Tauri signing key in distro builds).
|
||||
sed -i \
|
||||
-e 's/"createUpdaterArtifacts": true/"createUpdaterArtifacts": false/' \
|
||||
src-tauri/tauri.conf.json || die
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
local -x CI=true
|
||||
local -x npm_config_audit=false
|
||||
local -x npm_config_fund=false
|
||||
local -x npm_config_update_notifier=false
|
||||
|
||||
npm install || die "npm install failed"
|
||||
npm run tauri -- build --no-bundle || die "tauri build failed"
|
||||
}
|
||||
|
||||
src_install() {
|
||||
dobin src-tauri/target/release/emerald-legacy-launcher
|
||||
|
||||
newicon -s 32 src-tauri/icons/32x32.png emerald-legacy-launcher.png
|
||||
newicon -s 64 src-tauri/icons/64x64.png emerald-legacy-launcher.png
|
||||
newicon -s 128 src-tauri/icons/128x128.png emerald-legacy-launcher.png
|
||||
newicon -s 256 src-tauri/icons/128x128@2x.png emerald-legacy-launcher.png
|
||||
newicon -s 512 src-tauri/icons/icon.png emerald-legacy-launcher.png
|
||||
|
||||
domenu "${FILESDIR}"/emerald-legacy-launcher.desktop
|
||||
|
||||
insinto /usr/share/metainfo
|
||||
newins flatpak/io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.metainfo.xml \
|
||||
io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.metainfo.xml
|
||||
|
||||
dodoc README.md LICENSE
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
[Desktop Entry]
|
||||
Name=LCE Emerald Launcher
|
||||
Comment=FOSS cross-platform launcher for Minecraft Legacy Console Edition
|
||||
Exec=emerald-legacy-launcher %u
|
||||
Icon=emerald-legacy-launcher
|
||||
Type=Application
|
||||
Categories=Game;
|
||||
MimeType=x-scheme-handler/emerald;x-scheme-handler/emeraldlauncher;x-scheme-handler/discord-1482504445152460871;
|
||||
StartupNotify=true
|
||||
StartupWMClass=emerald-legacy-launcher
|
||||
Terminal=false
|
||||
14
gentoo/games-util/emerald-legacy-launcher/metadata.xml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
|
||||
<pkgmetadata>
|
||||
<upstream>
|
||||
<remote-id type="github">LCE-Hub/LCE-Emerald-Launcher</remote-id>
|
||||
<bugs-to>https://github.com/LCE-Hub/LCE-Emerald-Launcher/issues</bugs-to>
|
||||
</upstream>
|
||||
<longdescription lang="en">
|
||||
LCE Emerald Launcher is a FOSS cross-platform Tauri launcher for
|
||||
Minecraft Legacy Console Edition. It installs community builds,
|
||||
manages versions, skins, and workshop content, and launches the game
|
||||
via Wine/Proton on Linux.
|
||||
</longdescription>
|
||||
</pkgmetadata>
|
||||
3
gentoo/metadata/layout.conf
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
masters = gentoo
|
||||
thin-manifests = true
|
||||
sign-manifests = false
|
||||
1
gentoo/profiles/repo_name
Normal file
|
|
@ -0,0 +1 @@
|
|||
emerald-legacy-launcher
|
||||
|
|
@ -4,6 +4,14 @@
|
|||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<script>
|
||||
if (/Android/i.test(navigator.userAgent)) {
|
||||
document.documentElement.classList.add("is-android");
|
||||
document
|
||||
.querySelector('meta[name="viewport"]')
|
||||
.setAttribute("content", "width=1280");
|
||||
}
|
||||
</script>
|
||||
<link rel="preload" href="/fonts/Mojangles.ttf" as="font" type="font/truetype" crossorigin>
|
||||
<link rel="preload" href="/images/MenuTitle.png" as="image">
|
||||
<title>Emerald Legacy Launcher</title>
|
||||
|
|
|
|||
135
nix/package.nix
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
rustPlatform,
|
||||
cargo-tauri,
|
||||
nodejs,
|
||||
pkg-config,
|
||||
pnpm_10,
|
||||
fetchPnpmDeps,
|
||||
pnpmConfigHook,
|
||||
wrapGAppsHook4,
|
||||
openssl,
|
||||
webkitgtk_4_1,
|
||||
glib-networking,
|
||||
libayatana-appindicator,
|
||||
librsvg,
|
||||
udev,
|
||||
version ? "1.5.1",
|
||||
src ? null,
|
||||
}:
|
||||
|
||||
# Disable updater artifact signing — Nix builds have no Tauri signing key.
|
||||
let
|
||||
tauriConfOverride = builtins.toFile "tauri-nix.conf.json" ''
|
||||
{
|
||||
"bundle": {
|
||||
"createUpdaterArtifacts": false
|
||||
}
|
||||
}
|
||||
'';
|
||||
|
||||
defaultSrc = lib.cleanSourceWith {
|
||||
src = ../.;
|
||||
filter =
|
||||
path: _type:
|
||||
let
|
||||
baseName = baseNameOf path;
|
||||
in
|
||||
!(builtins.elem baseName [
|
||||
".git"
|
||||
"node_modules"
|
||||
"target"
|
||||
"dist"
|
||||
"build-flatpak"
|
||||
"emerald-repo"
|
||||
"result"
|
||||
"result-dev"
|
||||
]);
|
||||
};
|
||||
in
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "emerald-legacy-launcher";
|
||||
inherit version;
|
||||
|
||||
src = if src != null then src else defaultSrc;
|
||||
|
||||
cargoRoot = "src-tauri";
|
||||
buildAndTestSubdir = finalAttrs.cargoRoot;
|
||||
|
||||
cargoHash = "sha256-tSbFyle2eQ5Dw9fTXloIepOZU1UxhkF6/KZBRXehm4w=";
|
||||
|
||||
pnpmDeps = fetchPnpmDeps {
|
||||
inherit (finalAttrs) pname version src;
|
||||
pnpm = pnpm_10;
|
||||
fetcherVersion = 3;
|
||||
hash = "sha256-6na8YlSTkdnSse8DQjBnTBpfmKSYj3+1FLWVyyfUx1g=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
cargo-tauri.hook
|
||||
nodejs
|
||||
pkg-config
|
||||
pnpmConfigHook
|
||||
pnpm_10
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isLinux [ wrapGAppsHook4 ];
|
||||
|
||||
buildInputs = [
|
||||
openssl
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isLinux [
|
||||
glib-networking
|
||||
libayatana-appindicator
|
||||
librsvg
|
||||
udev
|
||||
webkitgtk_4_1
|
||||
];
|
||||
|
||||
tauriBuildFlags = [
|
||||
"-c"
|
||||
tauriConfOverride
|
||||
];
|
||||
|
||||
postPatch = lib.optionalString stdenv.hostPlatform.isLinux ''
|
||||
substituteInPlace "$cargoDepsCopy"/*/libappindicator-sys-*/src/lib.rs \
|
||||
--replace-fail "libayatana-appindicator3.so.1" \
|
||||
"${libayatana-appindicator}/lib/libayatana-appindicator3.so.1"
|
||||
'';
|
||||
|
||||
# Prefer the project's pnpm frontend build over the npm beforeBuildCommand.
|
||||
preBuild = ''
|
||||
substituteInPlace src-tauri/tauri.conf.json \
|
||||
--replace-fail '"beforeBuildCommand": "npm run build"' \
|
||||
'"beforeBuildCommand": "pnpm run build"'
|
||||
'';
|
||||
|
||||
preFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
|
||||
gappsWrapperArgs+=(
|
||||
--prefix LD_LIBRARY_PATH : ${
|
||||
lib.makeLibraryPath [
|
||||
libayatana-appindicator
|
||||
udev
|
||||
]
|
||||
}
|
||||
)
|
||||
'';
|
||||
|
||||
doCheck = false;
|
||||
|
||||
env = {
|
||||
CI = "true";
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "FOSS cross-platform launcher for Minecraft Legacy Console Edition";
|
||||
homepage = "https://github.com/LCE-Hub/LCE-Emerald-Launcher";
|
||||
changelog = lib.mkIf (!(lib.hasPrefix "unstable-" version)) (
|
||||
"https://github.com/LCE-Hub/LCE-Emerald-Launcher/releases/tag/v${version}"
|
||||
);
|
||||
license = lib.licenses.gpl3Only;
|
||||
mainProgram = "emerald-legacy-launcher";
|
||||
platforms = lib.platforms.linux ++ lib.platforms.darwin;
|
||||
maintainers = [ ];
|
||||
};
|
||||
})
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "emerald-legacy-launcher",
|
||||
"private": true,
|
||||
"version": "1.2.0",
|
||||
"version": "1.6.1",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
|
@ -9,11 +9,13 @@
|
|||
"preview": "vite preview",
|
||||
"tauri": "tauri",
|
||||
"tauri:build": "tauri build && pnpm run post-build:macos",
|
||||
"post-build:macos": "sh src-tauri/scripts/post-build-macos.sh",
|
||||
"post-build:macos": "bash src-tauri/scripts/post-build-macos.sh",
|
||||
"android:assets": "node scripts/download-android-assets.mjs",
|
||||
"flatpak": "flatpak-builder --user --install-deps-from=flathub --repo=emerald-repo --force-clean build-flatpak flatpak/io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.yml && flatpak build-bundle emerald-repo emerald.flatpak io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher"
|
||||
},
|
||||
"dependencies": {
|
||||
"@tauri-apps/api": "^2",
|
||||
"@tauri-apps/plugin-deep-link": "~2.4.9",
|
||||
"@tauri-apps/plugin-opener": "^2",
|
||||
"@tauri-apps/plugin-process": "~2.3.1",
|
||||
"@tauri-apps/plugin-updater": "~2.10.1",
|
||||
|
|
@ -23,6 +25,8 @@
|
|||
"react": "^19.1.0",
|
||||
"react-dom": "^19.1.0",
|
||||
"react-markdown": "^10.1.0",
|
||||
"rehype-raw": "^7.0.0",
|
||||
"rehype-sanitize": "^6.0.0",
|
||||
"remark-gfm": "^4.0.1",
|
||||
"three": "^0.183.2"
|
||||
},
|
||||
|
|
|
|||
48
pkg/AppImage/AppImage.sh
Executable file
|
|
@ -0,0 +1,48 @@
|
|||
#!/bin/sh
|
||||
#neo: credits: https://github.com/cjonas1999/OverBind/blob/master/pkg/AppImage/AppImage.sh
|
||||
set -eu
|
||||
ARCH="$(uname -m)"
|
||||
SHARUN_REPO="https://raw.githubusercontent.com/pkgforge-dev/Anylinux-AppImages"
|
||||
_commits_json=$(mktemp)
|
||||
wget -qO "$_commits_json" \
|
||||
"https://api.github.com/repos/pkgforge-dev/Anylinux-AppImages/commits?path=useful-tools/&per_page=100"
|
||||
|
||||
STABLE_SHA=$(node -e "
|
||||
const data = JSON.parse(require('fs').readFileSync('$_commits_json', 'utf8'));
|
||||
const now = Date.now(), h24 = 864e5;
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
const t = new Date(data[i].commit.committer.date).getTime();
|
||||
if (now - t < h24) continue;
|
||||
const prev = data[i - 1];
|
||||
if (!prev || new Date(prev.commit.committer.date).getTime() - t >= h24) {
|
||||
process.stdout.write(data[i].sha);
|
||||
process.exit(0);
|
||||
}
|
||||
}
|
||||
process.stderr.write('No settled commit found in last 100 commits\n');
|
||||
process.exit(1);
|
||||
")
|
||||
rm -f "$_commits_json"
|
||||
echo "Pinning sharun scripts to settled commit $STABLE_SHA"
|
||||
SHARUN="$SHARUN_REPO/$STABLE_SHA/useful-tools/quick-sharun.sh"
|
||||
DEBLOATED_PKGS="$SHARUN_REPO/$STABLE_SHA/useful-tools/get-debloated-pkgs.sh"
|
||||
#export UPINFO="gh-releases-zsync|${GITHUB_REPOSITORY%/*}|${GITHUB_REPOSITORY#*/}|latest|*$ARCH.AppImage.zsync"
|
||||
export OUTNAME=Emerald-Legacy-Launcher-anylinux-"$ARCH".AppImage
|
||||
export DESKTOP="/usr/share/applications/LCE Emerald Launcher.desktop"
|
||||
export ICON=/usr/share/icons/hicolor/256x256@2/apps/emerald-legacy-launcher.png
|
||||
export DEPLOY_OPENGL=1
|
||||
rm -rf AppDir dist appinfo
|
||||
wget --retry-connrefused --tries=30 "$DEBLOATED_PKGS" -O ./get-debloated-pkgs
|
||||
wget --retry-connrefused --tries=30 "$SHARUN" -O ./quick-sharun
|
||||
chmod +x ./quick-sharun ./get-debloated-pkgs
|
||||
./get-debloated-pkgs --add-common --prefer-nano
|
||||
./quick-sharun \
|
||||
/usr/bin/emerald-legacy-launcher \
|
||||
/usr/lib/libayatana-appindicator*.so*
|
||||
|
||||
mkdir -p "AppDir/usr/lib"
|
||||
cp -r "/usr/lib/LCE Emerald Launcher" "AppDir/usr/lib/"
|
||||
./quick-sharun --make-appimage
|
||||
mkdir -p ./dist
|
||||
mv -v ./*.AppImage* ./dist
|
||||
echo "All Done!"
|
||||
142
pnpm-lock.yaml
|
|
@ -11,6 +11,9 @@ importers:
|
|||
'@tauri-apps/api':
|
||||
specifier: ^2
|
||||
version: 2.10.1
|
||||
'@tauri-apps/plugin-deep-link':
|
||||
specifier: ~2.4.9
|
||||
version: 2.4.9
|
||||
'@tauri-apps/plugin-opener':
|
||||
specifier: ^2
|
||||
version: 2.5.3
|
||||
|
|
@ -38,6 +41,12 @@ importers:
|
|||
react-markdown:
|
||||
specifier: ^10.1.0
|
||||
version: 10.1.0(@types/react@19.2.14)(react@19.2.4)
|
||||
rehype-raw:
|
||||
specifier: ^7.0.0
|
||||
version: 7.0.0
|
||||
rehype-sanitize:
|
||||
specifier: ^6.0.0
|
||||
version: 6.0.0
|
||||
remark-gfm:
|
||||
specifier: ^4.0.1
|
||||
version: 4.0.1
|
||||
|
|
@ -585,6 +594,9 @@ packages:
|
|||
'@tauri-apps/api@2.10.1':
|
||||
resolution: {integrity: sha512-hKL/jWf293UDSUN09rR69hrToyIXBb8CjGaWC7gfinvnQrBVvnLr08FeFi38gxtugAVyVcTa5/FD/Xnkb1siBw==}
|
||||
|
||||
'@tauri-apps/api@2.11.0':
|
||||
resolution: {integrity: sha512-7CinYODhky9lmO23xHnUFv0Xt43fbtWMyxZcLcRBlFkcgXKuEirBvHpmtJ89YMhyeGcq20Wuc47Fa4XjyniywA==}
|
||||
|
||||
'@tauri-apps/cli-darwin-arm64@2.10.1':
|
||||
resolution: {integrity: sha512-Z2OjCXiZ+fbYZy7PmP3WRnOpM9+Fy+oonKDEmUE6MwN4IGaYqgceTjwHucc/kEEYZos5GICve35f7ZiizgqEnQ==}
|
||||
engines: {node: '>= 10'}
|
||||
|
|
@ -656,6 +668,9 @@ packages:
|
|||
engines: {node: '>= 10'}
|
||||
hasBin: true
|
||||
|
||||
'@tauri-apps/plugin-deep-link@2.4.9':
|
||||
resolution: {integrity: sha512-u0SKOUHnJ1wqeqXsDFq2+kASCBj9xxbG0g9XZWPy9SOmU4wXtp6b/wiYpm6oH6/5fBTQsLqnLhIvqLBRpgHJlA==}
|
||||
|
||||
'@tauri-apps/plugin-opener@2.5.3':
|
||||
resolution: {integrity: sha512-CCcUltXMOfUEArbf3db3kCE7Ggy1ExBEBl51Ko2ODJ6GDYHRp1nSNlQm5uNCFY5k7/ufaK5Ib3Du/Zir19IYQQ==}
|
||||
|
||||
|
|
@ -851,6 +866,10 @@ packages:
|
|||
resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
|
||||
entities@6.0.1:
|
||||
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
|
||||
engines: {node: '>=0.12'}
|
||||
|
||||
esbuild@0.27.4:
|
||||
resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==}
|
||||
engines: {node: '>=18'}
|
||||
|
|
@ -919,15 +938,36 @@ packages:
|
|||
graceful-fs@4.2.11:
|
||||
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
|
||||
|
||||
hast-util-from-parse5@8.0.3:
|
||||
resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==}
|
||||
|
||||
hast-util-parse-selector@4.0.0:
|
||||
resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
|
||||
|
||||
hast-util-raw@9.1.0:
|
||||
resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==}
|
||||
|
||||
hast-util-sanitize@5.0.2:
|
||||
resolution: {integrity: sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==}
|
||||
|
||||
hast-util-to-jsx-runtime@2.3.6:
|
||||
resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
|
||||
|
||||
hast-util-to-parse5@8.0.1:
|
||||
resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==}
|
||||
|
||||
hast-util-whitespace@3.0.0:
|
||||
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
|
||||
|
||||
hastscript@9.0.1:
|
||||
resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==}
|
||||
|
||||
html-url-attributes@3.0.1:
|
||||
resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==}
|
||||
|
||||
html-void-elements@3.0.0:
|
||||
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
|
||||
|
||||
inline-style-parser@0.2.7:
|
||||
resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
|
||||
|
||||
|
|
@ -1221,6 +1261,9 @@ packages:
|
|||
parse-entities@4.0.2:
|
||||
resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
|
||||
|
||||
parse5@7.3.0:
|
||||
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
|
||||
|
||||
path-exists@4.0.0:
|
||||
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
|
||||
engines: {node: '>=8'}
|
||||
|
|
@ -1270,6 +1313,12 @@ packages:
|
|||
resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
rehype-raw@7.0.0:
|
||||
resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
|
||||
|
||||
rehype-sanitize@6.0.0:
|
||||
resolution: {integrity: sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==}
|
||||
|
||||
remark-gfm@4.0.1:
|
||||
resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
|
||||
|
||||
|
|
@ -1391,6 +1440,9 @@ packages:
|
|||
peerDependencies:
|
||||
browserslist: '>= 4.21.0'
|
||||
|
||||
vfile-location@5.0.3:
|
||||
resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
|
||||
|
||||
vfile-message@4.0.3:
|
||||
resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
|
||||
|
||||
|
|
@ -1437,6 +1489,9 @@ packages:
|
|||
yaml:
|
||||
optional: true
|
||||
|
||||
web-namespaces@2.0.1:
|
||||
resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
|
||||
|
||||
which-module@2.0.1:
|
||||
resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
|
||||
|
||||
|
|
@ -1833,6 +1888,8 @@ snapshots:
|
|||
|
||||
'@tauri-apps/api@2.10.1': {}
|
||||
|
||||
'@tauri-apps/api@2.11.0': {}
|
||||
|
||||
'@tauri-apps/cli-darwin-arm64@2.10.1':
|
||||
optional: true
|
||||
|
||||
|
|
@ -1880,6 +1937,10 @@ snapshots:
|
|||
'@tauri-apps/cli-win32-ia32-msvc': 2.10.1
|
||||
'@tauri-apps/cli-win32-x64-msvc': 2.10.1
|
||||
|
||||
'@tauri-apps/plugin-deep-link@2.4.9':
|
||||
dependencies:
|
||||
'@tauri-apps/api': 2.11.0
|
||||
|
||||
'@tauri-apps/plugin-opener@2.5.3':
|
||||
dependencies:
|
||||
'@tauri-apps/api': 2.10.1
|
||||
|
|
@ -2075,6 +2136,8 @@ snapshots:
|
|||
graceful-fs: 4.2.11
|
||||
tapable: 2.3.0
|
||||
|
||||
entities@6.0.1: {}
|
||||
|
||||
esbuild@0.27.4:
|
||||
optionalDependencies:
|
||||
'@esbuild/aix-ppc64': 0.27.4
|
||||
|
|
@ -2143,6 +2206,43 @@ snapshots:
|
|||
|
||||
graceful-fs@4.2.11: {}
|
||||
|
||||
hast-util-from-parse5@8.0.3:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
'@types/unist': 3.0.3
|
||||
devlop: 1.1.0
|
||||
hastscript: 9.0.1
|
||||
property-information: 7.1.0
|
||||
vfile: 6.0.3
|
||||
vfile-location: 5.0.3
|
||||
web-namespaces: 2.0.1
|
||||
|
||||
hast-util-parse-selector@4.0.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
|
||||
hast-util-raw@9.1.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
'@types/unist': 3.0.3
|
||||
'@ungap/structured-clone': 1.3.0
|
||||
hast-util-from-parse5: 8.0.3
|
||||
hast-util-to-parse5: 8.0.1
|
||||
html-void-elements: 3.0.0
|
||||
mdast-util-to-hast: 13.2.1
|
||||
parse5: 7.3.0
|
||||
unist-util-position: 5.0.0
|
||||
unist-util-visit: 5.1.0
|
||||
vfile: 6.0.3
|
||||
web-namespaces: 2.0.1
|
||||
zwitch: 2.0.4
|
||||
|
||||
hast-util-sanitize@5.0.2:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
'@ungap/structured-clone': 1.3.0
|
||||
unist-util-position: 5.0.0
|
||||
|
||||
hast-util-to-jsx-runtime@2.3.6:
|
||||
dependencies:
|
||||
'@types/estree': 1.0.8
|
||||
|
|
@ -2163,12 +2263,32 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
hast-util-to-parse5@8.0.1:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
comma-separated-tokens: 2.0.3
|
||||
devlop: 1.1.0
|
||||
property-information: 7.1.0
|
||||
space-separated-tokens: 2.0.2
|
||||
web-namespaces: 2.0.1
|
||||
zwitch: 2.0.4
|
||||
|
||||
hast-util-whitespace@3.0.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
|
||||
hastscript@9.0.1:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
comma-separated-tokens: 2.0.3
|
||||
hast-util-parse-selector: 4.0.0
|
||||
property-information: 7.1.0
|
||||
space-separated-tokens: 2.0.2
|
||||
|
||||
html-url-attributes@3.0.1: {}
|
||||
|
||||
html-void-elements@3.0.0: {}
|
||||
|
||||
inline-style-parser@0.2.7: {}
|
||||
|
||||
is-alphabetical@2.0.1: {}
|
||||
|
|
@ -2639,6 +2759,10 @@ snapshots:
|
|||
is-decimal: 2.0.1
|
||||
is-hexadecimal: 2.0.1
|
||||
|
||||
parse5@7.3.0:
|
||||
dependencies:
|
||||
entities: 6.0.1
|
||||
|
||||
path-exists@4.0.0: {}
|
||||
|
||||
picocolors@1.1.1: {}
|
||||
|
|
@ -2690,6 +2814,17 @@ snapshots:
|
|||
|
||||
react@19.2.4: {}
|
||||
|
||||
rehype-raw@7.0.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
hast-util-raw: 9.1.0
|
||||
vfile: 6.0.3
|
||||
|
||||
rehype-sanitize@6.0.0:
|
||||
dependencies:
|
||||
'@types/hast': 3.0.4
|
||||
hast-util-sanitize: 5.0.2
|
||||
|
||||
remark-gfm@4.0.1:
|
||||
dependencies:
|
||||
'@types/mdast': 4.0.4
|
||||
|
|
@ -2861,6 +2996,11 @@ snapshots:
|
|||
escalade: 3.2.0
|
||||
picocolors: 1.1.1
|
||||
|
||||
vfile-location@5.0.3:
|
||||
dependencies:
|
||||
'@types/unist': 3.0.3
|
||||
vfile: 6.0.3
|
||||
|
||||
vfile-message@4.0.3:
|
||||
dependencies:
|
||||
'@types/unist': 3.0.3
|
||||
|
|
@ -2885,6 +3025,8 @@ snapshots:
|
|||
jiti: 2.6.1
|
||||
lightningcss: 1.31.1
|
||||
|
||||
web-namespaces@2.0.1: {}
|
||||
|
||||
which-module@2.0.1: {}
|
||||
|
||||
wrap-ansi@6.2.0:
|
||||
|
|
|
|||
BIN
public/Capes/4J.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
public/Capes/Unused_Cape_2.png
Normal file
|
After Width: | Height: | Size: 730 B |
BIN
public/Skins/amy.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
public/Skins/ava.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
public/Skins/byte.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
public/Skins/counterr.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
public/Skins/huckle.png
Normal file
|
After Width: | Height: | Size: 899 B |
BIN
public/Skins/kowhaifan.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
public/Skins/str1k3r.png
Normal file
|
After Width: | Height: | Size: 638 B |
BIN
public/Skins/tranq.png
Normal file
|
After Width: | Height: | Size: 989 B |
BIN
public/fonts/Mojang Font_11.ttf
Normal file
BIN
public/fonts/Mojang Font_7.ttf
Normal file
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 447 B |
BIN
public/images/LCE Team.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
public/images/Nitro Boost.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
public/images/Slider_Handle_bottom.png
Normal file
|
After Width: | Height: | Size: 131 B |
BIN
public/images/Slider_Handle_mid.png
Normal file
|
After Width: | Height: | Size: 234 B |
BIN
public/images/Slider_Handle_top.png
Normal file
|
After Width: | Height: | Size: 103 B |
BIN
public/images/cafeberry_title.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
public/images/emerald_launcher.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
public/images/esrb_warning.png
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
public/images/hellishEndsIcon.png
Normal file
|
After Width: | Height: | Size: 937 B |
13
public/images/kofi_symbol.svg
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<svg width="241" height="194" viewBox="0 0 241 194" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<mask id="mask0_1_219" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="-1" y="0" width="242" height="194">
|
||||
<path d="M240.469 0.958984H-0.00585938V193.918H240.469V0.958984Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_1_219)">
|
||||
<path d="M96.1344 193.911C61.1312 193.911 32.6597 178.256 15.9721 149.829C1.19788 124.912 -0.00585938 97.9229 -0.00585938 67.7662C-0.00585938 49.8876 5.37293 34.3215 15.5413 22.7466C24.8861 12.1157 38.1271 5.22907 52.8317 3.35378C70.2858 1.14271 91.9848 0.958984 114.545 0.958984C151.259 0.958984 161.63 1.4088 176.075 2.85328C195.29 4.76026 211.458 11.932 222.824 23.5955C234.368 35.4428 240.469 51.2624 240.469 69.3627V72.9994C240.469 103.885 219.821 129.733 191.046 136.759C188.898 141.827 186.237 146.871 183.089 151.837L183.006 151.964C172.869 167.632 149.042 193.918 103.401 193.918H96.1281L96.1344 193.911Z" fill="white"/>
|
||||
<path d="M174.568 17.9772C160.927 16.6151 151.38 16.1589 114.552 16.1589C90.908 16.1589 70.9008 16.387 54.7644 18.4334C33.3949 21.164 15.2058 37.5285 15.2058 67.7674C15.2058 98.0066 16.796 121.422 29.0741 142.107C42.9425 165.751 66.1302 178.707 96.1412 178.707H103.414C140.242 178.707 160.25 159.156 170.253 143.698C174.574 136.874 177.754 130.058 179.801 123.234C205.947 120.96 225.27 99.3624 225.27 72.9941V69.3577C225.27 40.9432 206.631 21.164 174.574 17.9772H174.568Z" fill="white"/>
|
||||
<path d="M15.1975 67.7674C15.1975 37.5285 33.3866 21.164 54.7559 18.4334C70.8987 16.387 90.906 16.1589 114.544 16.1589C151.372 16.1589 160.919 16.6151 174.559 17.9772C206.617 21.1576 225.255 40.937 225.255 69.3577V72.9941C225.255 99.3687 205.932 120.966 179.786 123.234C177.74 130.058 174.559 136.874 170.238 143.698C160.235 159.156 140.228 178.707 103.4 178.707H96.1264C66.1155 178.707 42.9277 165.751 29.0595 142.107C16.7814 121.422 15.1912 98.4563 15.1912 67.7674" fill="#202020"/>
|
||||
<path d="M32.2469 67.9899C32.2469 97.3168 34.0654 116.184 43.6127 133.689C54.5225 153.924 74.3018 161.653 96.8117 161.653H103.857C133.411 161.653 147.736 147.329 155.693 134.829C159.558 128.462 162.966 121.417 164.784 112.547L166.147 106.864H174.332C192.521 106.864 208.208 92.09 208.208 73.2166V69.8082C208.208 48.6669 195.024 37.5228 172.058 34.7987C159.102 33.6646 151.372 33.2084 114.538 33.2084C89.7602 33.2084 72.0272 33.4364 58.6152 35.4828C39.7483 38.2134 32.2407 48.8951 32.2407 67.9899" fill="white"/>
|
||||
<path d="M166.158 83.6801C166.158 86.4107 168.204 88.4572 171.841 88.4572C183.435 88.4572 189.802 81.8619 189.802 70.9523C189.802 60.0427 183.435 53.2195 171.841 53.2195C168.204 53.2195 166.158 55.2657 166.158 57.9963V83.6866V83.6801Z" fill="#202020"/>
|
||||
<path d="M54.5321 82.3198C54.5321 95.732 62.0332 107.326 71.5807 116.424C77.9478 122.562 87.9515 128.93 94.7685 133.022C96.8147 134.157 98.8611 134.841 101.136 134.841C103.866 134.841 106.134 134.157 107.959 133.022C114.782 128.93 124.779 122.562 130.919 116.424C140.694 107.332 148.195 95.7383 148.195 82.3198C148.195 67.7673 137.286 54.8115 121.599 54.8115C112.28 54.8115 105.912 59.5882 101.136 66.1772C96.8147 59.582 90.2259 54.8115 80.9001 54.8115C64.9855 54.8115 54.5256 67.7673 54.5256 82.3198" fill="#FF5A16"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
BIN
public/images/lce_online.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/images/lceonline.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
public/images/lostlegacy.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
public/images/lostlegacy_title.png
Normal file
|
After Width: | Height: | Size: 171 KiB |
BIN
public/images/minecraft_title_moon.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 273 KiB After Width: | Height: | Size: 143 KiB |
BIN
public/images/moonEdition.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 58 KiB |
BIN
public/images/revelations.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
public/images/tools/guides.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
public/images/tools/model.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 63 KiB |
BIN
public/music/Moog City 2.opus
Normal file
BIN
public/panorama/hellishends_Panorama_Background_Day.png
Normal file
|
After Width: | Height: | Size: 364 KiB |
BIN
public/panorama/hellishends_Panorama_Background_Night.png
Normal file
|
After Width: | Height: | Size: 364 KiB |
BIN
public/panorama/moonedition_Panorama_Background_Day.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/panorama/moonedition_Panorama_Background_Night.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 70 KiB |
BIN
public/panorama/vanilla_tu1_Panorama_Background_Day.png
Normal file
|
After Width: | Height: | Size: 170 KiB |
BIN
public/panorama/vanilla_tu1_Panorama_Background_Night.png
Normal file
|
After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 59 KiB |
BIN
public/sounds/in.ogg
Normal file
BIN
public/sounds/notification.ogg
Normal file
BIN
public/sounds/out.ogg
Normal file
260
schemas/args.json
Normal file
|
|
@ -0,0 +1,260 @@
|
|||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://emerald-legacy-launcher/schemas/args.json",
|
||||
"title": "ArgsSchema",
|
||||
"description": "Schema describing launcher command-line argument options, groups, and conditional dependencies.",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["$schema", "groups", "options", "dependencies"],
|
||||
"properties": {
|
||||
"$schema": {
|
||||
"type": "string",
|
||||
"description": "URI of the JSON schema this file conforms to."
|
||||
},
|
||||
"schemaVersion": {
|
||||
"type": "integer",
|
||||
"const": 1,
|
||||
"description": "Version of the schema format. Currently always 1."
|
||||
},
|
||||
"meta": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Arbitrary metadata about this schema."
|
||||
},
|
||||
"groups": {
|
||||
"type": "array",
|
||||
"description": "Groups used to organize options.",
|
||||
"items": {
|
||||
"$ref": "#/$defs/schemaGroup"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"type": "array",
|
||||
"description": "The command-line options.",
|
||||
"items": {
|
||||
"$ref": "#/$defs/schemaOption"
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"type": "array",
|
||||
"description": "Conditional dependencies that disable or hide options.",
|
||||
"items": {
|
||||
"$ref": "#/$defs/schemaDependency"
|
||||
}
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"schemaGroup": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["id", "title"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"description": "Unique identifier for the group."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Display title of the group."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Optional description of the group."
|
||||
}
|
||||
}
|
||||
},
|
||||
"schemaOption": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["id", "title", "type", "arg"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"description": "Unique identifier for the option."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Display title of the option."
|
||||
},
|
||||
"type": {
|
||||
"enum": ["boolean", "int", "number", "string", "choice"],
|
||||
"description": "The kind of value the option accepts."
|
||||
},
|
||||
"arg": {
|
||||
"type": "string",
|
||||
"description": "The command-line argument string emitted for this option."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Optional human-readable description."
|
||||
},
|
||||
"group": {
|
||||
"type": "string",
|
||||
"description": "Identifier of the group this option belongs to."
|
||||
},
|
||||
"default": {
|
||||
"description": "Default value for the option. Must match the option's type."
|
||||
},
|
||||
"min": {
|
||||
"type": "number",
|
||||
"description": "Minimum value for int/number options."
|
||||
},
|
||||
"max": {
|
||||
"type": "number",
|
||||
"description": "Maximum value for int/number options."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Stepping increment for int/number options."
|
||||
},
|
||||
"placeholder": {
|
||||
"type": "string",
|
||||
"description": "Placeholder text for string options."
|
||||
},
|
||||
"choices": {
|
||||
"type": "array",
|
||||
"description": "Allowed choices. Required and must be non-empty when type is 'choice'.",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"$ref": "#/$defs/schemaChoice"
|
||||
}
|
||||
}
|
||||
},
|
||||
"allOf": [
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"type": { "const": "choice" }
|
||||
},
|
||||
"required": ["type"]
|
||||
},
|
||||
"then": {
|
||||
"required": ["choices"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"type": { "const": "boolean" }
|
||||
},
|
||||
"required": ["type"]
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"default": { "type": "boolean" }
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"type": { "const": "string" }
|
||||
},
|
||||
"required": ["type"]
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"default": { "type": "string" }
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"schemaChoice": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["value"],
|
||||
"properties": {
|
||||
"value": {
|
||||
"type": "string",
|
||||
"description": "The value stored/emitted for this choice."
|
||||
},
|
||||
"label": {
|
||||
"type": "string",
|
||||
"description": "Optional display label. Defaults to the value."
|
||||
}
|
||||
}
|
||||
},
|
||||
"schemaDependency": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["target", "when"],
|
||||
"properties": {
|
||||
"target": {
|
||||
"type": "string",
|
||||
"description": "Identifier of the option affected by this dependency."
|
||||
},
|
||||
"when": {
|
||||
"$ref": "#/$defs/condition",
|
||||
"description": "Condition that, when true, applies the effect."
|
||||
},
|
||||
"effect": {
|
||||
"enum": ["disable", "hide"],
|
||||
"description": "Whether the target option is disabled or hidden. Defaults to 'disable'."
|
||||
}
|
||||
}
|
||||
},
|
||||
"condition": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["option"],
|
||||
"properties": {
|
||||
"option": {
|
||||
"type": "string",
|
||||
"description": "Identifier of the option to inspect."
|
||||
},
|
||||
"equals": {
|
||||
"description": "True when the option value strictly equals this."
|
||||
},
|
||||
"in": {
|
||||
"type": "array",
|
||||
"description": "True when the option value is one of these.",
|
||||
"items": true
|
||||
},
|
||||
"not": {
|
||||
"description": "True when the option value is not strictly equal to this."
|
||||
},
|
||||
"exists": {
|
||||
"type": "boolean",
|
||||
"description": "True when the option value is present (or absent when false)."
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["all"],
|
||||
"properties": {
|
||||
"all": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": { "$ref": "#/$defs/condition" }
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["any"],
|
||||
"properties": {
|
||||
"any": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": { "$ref": "#/$defs/condition" }
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["not"],
|
||||
"properties": {
|
||||
"not": { "$ref": "#/$defs/condition" }
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
109
scripts/download-android-assets.mjs
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
#!/usr/bin/env node
|
||||
import {
|
||||
createWriteStream,
|
||||
createReadStream,
|
||||
existsSync,
|
||||
unlinkSync,
|
||||
} from "node:fs";
|
||||
import { mkdir, rename } from "node:fs/promises";
|
||||
import { createHash } from "node:crypto";
|
||||
import { Readable } from "node:stream";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import path from "node:path";
|
||||
const RELEASE_TAG = "android-assets-v1";
|
||||
const REPO = "LCE-Hub/LCE-Emerald-Launcher";
|
||||
const ASSET_DIR = fileURLToPath(
|
||||
new URL("../src-tauri/gen/android/app/src/main/assets/", import.meta.url),
|
||||
);
|
||||
|
||||
const ASSETS = [
|
||||
{
|
||||
file: "imagefs.tar.zst",
|
||||
sha256: "7838756e6a05c91afff68f4bf12aa2780f815877753f8dd354e203e99b9caf8a",
|
||||
},
|
||||
{
|
||||
file: "proton-11.0-arm64ec.tar.zst",
|
||||
sha256: "ceb768396c2d44256518f94ae236f0c1f40738cf050a52e990e2fef67ff161df",
|
||||
},
|
||||
];
|
||||
|
||||
function sha256File(file) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const hash = createHash("sha256");
|
||||
const stream = createReadStream(file);
|
||||
stream.on("data", (chunk) => hash.update(chunk));
|
||||
stream.on("end", () => resolve(hash.digest("hex")));
|
||||
stream.on("error", reject);
|
||||
});
|
||||
}
|
||||
|
||||
async function download(url, dest) {
|
||||
const res = await fetch(url, { redirect: "follow" });
|
||||
if (!res.ok) {
|
||||
throw new Error(`HTTP ${res.status} ${res.statusText} for ${url}`);
|
||||
}
|
||||
|
||||
if (!res.body) {
|
||||
throw new Error(`no response body for ${url}`);
|
||||
}
|
||||
|
||||
const fileStream = createWriteStream(dest);
|
||||
await new Promise((resolve, reject) => {
|
||||
const body = Readable.fromWeb(res.body);
|
||||
body.pipe(fileStream);
|
||||
body.on("error", reject);
|
||||
fileStream.on("finish", resolve);
|
||||
fileStream.on("error", reject);
|
||||
});
|
||||
}
|
||||
|
||||
let failed = false;
|
||||
for (const asset of ASSETS) {
|
||||
const target = path.join(ASSET_DIR, asset.file);
|
||||
if (existsSync(target)) {
|
||||
const actual = await sha256File(target);
|
||||
if (actual === asset.sha256) {
|
||||
console.log(`okay ${asset.file} (up to date)`);
|
||||
continue;
|
||||
}
|
||||
|
||||
console.error(
|
||||
`error ${asset.file}: sha256 mismatch (expected ${asset.sha256}, got ${actual}); delete it and rerun`,
|
||||
);
|
||||
|
||||
failed = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
const url = `https://github.com/${REPO}/releases/download/${RELEASE_TAG}/${asset.file}`;
|
||||
console.log(`get ${asset.file} <- ${url}`);
|
||||
await mkdir(path.dirname(target), { recursive: true });
|
||||
const tmp = target + ".part";
|
||||
try {
|
||||
await download(url, tmp);
|
||||
const actual = await sha256File(tmp);
|
||||
if (actual !== asset.sha256) {
|
||||
console.error(
|
||||
`error ${asset.file}: downloaded sha256 mismatch (expected ${asset.sha256}, got ${actual})`,
|
||||
);
|
||||
|
||||
failed = true;
|
||||
if (existsSync(tmp)) {
|
||||
unlinkSync(tmp);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
await rename(tmp, target);
|
||||
console.log(`okay ${asset.file} (downloaded)`);
|
||||
} catch (error) {
|
||||
console.error(`error ${asset.file}: ${error.message}`);
|
||||
failed = true;
|
||||
if (existsSync(tmp)) {
|
||||
unlinkSync(tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
process.exit(failed ? 1 : 0);
|
||||
|
|
@ -9,13 +9,13 @@ APP_PATH="$1"
|
|||
BUNDLE_ID="com.emerald.legacy"
|
||||
|
||||
if [ -z "$APP_PATH" ]; then
|
||||
echo "Usage: $0 <path-to-app-bundle>"
|
||||
exit 1
|
||||
echo "Usage: $0 <path-to-app-bundle>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$APP_PATH" ]; then
|
||||
echo "Error: App bundle not found at $APP_PATH"
|
||||
exit 1
|
||||
echo "Error: App bundle not found at $APP_PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Fixing macOS quarantine for: $APP_PATH"
|
||||
|
|
@ -25,8 +25,8 @@ xattr -cr "$APP_PATH"
|
|||
|
||||
# Add basic code signing (ad-hoc signature)
|
||||
codesign --force --deep --sign - "$APP_PATH" 2>/dev/null || {
|
||||
echo "Warning: Code signing failed, but quarantine removal should work"
|
||||
echo "Warning: Code signing failed, but quarantine removal should work"
|
||||
}
|
||||
|
||||
echo "✅ macOS quarantine fix completed"
|
||||
echo "macOS quarantine fix completed"
|
||||
echo "The app should now launch without 'damaged' error"
|
||||
|
|
|
|||
81
scripts/update-homebrew.py
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
import argparse
|
||||
import re
|
||||
import os
|
||||
|
||||
def update_stable(version, intel_hash, arm_hash, linux_hash):
|
||||
cask_path = "Casks/lce-emerald-launcher.rb"
|
||||
formula_path = "Formula/lce-emerald-launcher.rb"
|
||||
|
||||
# Update Cask
|
||||
if os.path.exists(cask_path):
|
||||
with open(cask_path, 'r') as f:
|
||||
content = f.read()
|
||||
|
||||
# Replace version
|
||||
content = re.sub(r'^\s*version\s+"[^"]+"', f' version "{version}"', content, flags=re.MULTILINE)
|
||||
# Replace sha256 block
|
||||
content = re.sub(r'sha256\s+intel:\s+"[a-f0-9]+",\r?\n\s+arm:\s+"[a-f0-9]+"',
|
||||
f'sha256 intel: "{intel_hash}",\n arm: "{arm_hash}"',
|
||||
content)
|
||||
|
||||
with open(cask_path, 'w') as f:
|
||||
f.write(content)
|
||||
print(f"Updated {cask_path}")
|
||||
else:
|
||||
print(f"Error: {cask_path} not found")
|
||||
|
||||
# Update Formula
|
||||
if os.path.exists(formula_path):
|
||||
with open(formula_path, 'r') as f:
|
||||
content = f.read()
|
||||
|
||||
# Replace version
|
||||
content = re.sub(r'^\s*version\s+"[^"]+"', f' version "{version}"', content, flags=re.MULTILINE)
|
||||
# Replace sha256
|
||||
content = re.sub(r'^\s*sha256\s+"[a-f0-9]+"', f' sha256 "{linux_hash}"', content, flags=re.MULTILINE)
|
||||
|
||||
with open(formula_path, 'w') as f:
|
||||
f.write(content)
|
||||
print(f"Updated {formula_path}")
|
||||
else:
|
||||
print(f"Error: {formula_path} not found")
|
||||
|
||||
def update_experimental(version, intel_hash, arm_hash):
|
||||
cask_path = "Casks/lce-emerald-launcher-experimental.rb"
|
||||
|
||||
if os.path.exists(cask_path):
|
||||
with open(cask_path, 'r') as f:
|
||||
content = f.read()
|
||||
|
||||
# Replace version
|
||||
content = re.sub(r'^\s*version\s+"[^"]+"', f' version "{version}"', content, flags=re.MULTILINE)
|
||||
# Replace sha256 block
|
||||
content = re.sub(r'sha256\s+intel:\s+"[a-f0-9]+",\r?\n\s+arm:\s+"[a-f0-9]+"',
|
||||
f'sha256 intel: "{intel_hash}",\n arm: "{arm_hash}"',
|
||||
content)
|
||||
|
||||
with open(cask_path, 'w') as f:
|
||||
f.write(content)
|
||||
print(f"Updated {cask_path}")
|
||||
else:
|
||||
print(f"Error: {cask_path} not found")
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Update Homebrew Formula/Cask files")
|
||||
parser.add_argument("--type", choices=["stable" ], required=True)
|
||||
parser.add_argument("--version", required=True)
|
||||
parser.add_argument("--intel-hash", required=True)
|
||||
parser.add_argument("--arm-hash", required=True)
|
||||
parser.add_argument("--linux-hash")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.type == "stable":
|
||||
if not args.linux_hash:
|
||||
raise ValueError("--linux-hash is required for stable update")
|
||||
update_stable(args.version, args.intel_hash, args.arm_hash, args.linux_hash)
|
||||
elif args.type == "experimental":
|
||||
update_experimental(args.version, args.intel_hash, args.arm_hash)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
50
scripts/update-nix-stable.py
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import re
|
||||
import sys
|
||||
|
||||
|
||||
def update_flake(version: str, src_hash: str) -> None:
|
||||
path = "flake.nix"
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
|
||||
new_content, n_version = re.subn(
|
||||
r'stableVersion = "[^"]*";',
|
||||
f'stableVersion = "{version}";',
|
||||
content,
|
||||
count=1,
|
||||
)
|
||||
new_content, n_hash = re.subn(
|
||||
r'stableSrcHash = "[^"]*";',
|
||||
f'stableSrcHash = "{src_hash}";',
|
||||
new_content,
|
||||
count=1,
|
||||
)
|
||||
|
||||
if n_version != 1 or n_hash != 1:
|
||||
print(
|
||||
f"Error: expected to update stableVersion and stableSrcHash once each "
|
||||
f"(got version={n_version}, hash={n_hash})",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
with open(path, "w", encoding="utf-8") as f:
|
||||
f.write(new_content)
|
||||
|
||||
print(f"Updated {path}: stableVersion={version} stableSrcHash={src_hash}")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Update flake.nix stableVersion and stableSrcHash"
|
||||
)
|
||||
parser.add_argument("--version", required=True, help="Stable version without v prefix")
|
||||
parser.add_argument("--src-hash", required=True, help="SRI sha256 of the release source")
|
||||
args = parser.parse_args()
|
||||
update_flake(args.version, args.src_hash)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
394
src-tauri/Cargo.lock
generated
|
|
@ -564,6 +564,26 @@ dependencies = [
|
|||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "const-random"
|
||||
version = "0.1.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359"
|
||||
dependencies = [
|
||||
"const-random-macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "const-random-macro"
|
||||
version = "0.1.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
|
||||
dependencies = [
|
||||
"getrandom 0.2.17",
|
||||
"once_cell",
|
||||
"tiny-keccak",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.4.0"
|
||||
|
|
@ -615,7 +635,7 @@ dependencies = [
|
|||
"bitflags 2.11.0",
|
||||
"core-foundation 0.10.1",
|
||||
"core-graphics-types",
|
||||
"foreign-types 0.5.0",
|
||||
"foreign-types",
|
||||
"libc",
|
||||
]
|
||||
|
||||
|
|
@ -929,6 +949,15 @@ dependencies = [
|
|||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dlv-list"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f"
|
||||
dependencies = [
|
||||
"const-random",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dom_query"
|
||||
version = "0.27.0"
|
||||
|
|
@ -1014,13 +1043,18 @@ checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
|
|||
|
||||
[[package]]
|
||||
name = "emerald-legacy-launcher"
|
||||
version = "1.2.0"
|
||||
version = "1.6.1"
|
||||
dependencies = [
|
||||
"base64 0.21.7",
|
||||
"byteorder",
|
||||
"flate2",
|
||||
"futures-util",
|
||||
"http 1.4.0",
|
||||
"image 0.24.9",
|
||||
"jni",
|
||||
"libc",
|
||||
"lzxd",
|
||||
"once_cell",
|
||||
"rand 0.8.5",
|
||||
"reqwest 0.11.27",
|
||||
"rfd",
|
||||
|
|
@ -1029,15 +1063,19 @@ dependencies = [
|
|||
"steam_shortcuts_util",
|
||||
"tauri",
|
||||
"tauri-build",
|
||||
"tauri-plugin-deep-link",
|
||||
"tauri-plugin-drpc",
|
||||
"tauri-plugin-gamepad",
|
||||
"tauri-plugin-opener",
|
||||
"tauri-plugin-process",
|
||||
"tauri-plugin-single-instance",
|
||||
"tauri-plugin-updater",
|
||||
"tokio",
|
||||
"tokio-tungstenite",
|
||||
"tokio-util",
|
||||
"url",
|
||||
"uuid 1.23.0",
|
||||
"wry",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1228,15 +1266,6 @@ version = "0.2.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
|
||||
dependencies = [
|
||||
"foreign-types-shared 0.1.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types"
|
||||
version = "0.5.0"
|
||||
|
|
@ -1244,7 +1273,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
|
||||
dependencies = [
|
||||
"foreign-types-macros",
|
||||
"foreign-types-shared 0.3.1",
|
||||
"foreign-types-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1258,12 +1287,6 @@ dependencies = [
|
|||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types-shared"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types-shared"
|
||||
version = "0.3.1"
|
||||
|
|
@ -1768,6 +1791,12 @@ version = "0.12.3"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.14.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.15.5"
|
||||
|
|
@ -1884,6 +1913,12 @@ dependencies = [
|
|||
"pin-project-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "http-range"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
|
||||
|
||||
[[package]]
|
||||
name = "httparse"
|
||||
version = "1.10.1"
|
||||
|
|
@ -1940,6 +1975,20 @@ dependencies = [
|
|||
"want",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyper-rustls"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
|
||||
dependencies = [
|
||||
"futures-util",
|
||||
"http 0.2.12",
|
||||
"hyper 0.14.32",
|
||||
"rustls 0.21.12",
|
||||
"tokio",
|
||||
"tokio-rustls 0.24.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyper-rustls"
|
||||
version = "0.27.9"
|
||||
|
|
@ -1949,25 +1998,12 @@ dependencies = [
|
|||
"http 1.4.0",
|
||||
"hyper 1.9.0",
|
||||
"hyper-util",
|
||||
"rustls",
|
||||
"rustls 0.23.40",
|
||||
"tokio",
|
||||
"tokio-rustls",
|
||||
"tokio-rustls 0.26.4",
|
||||
"tower-service",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyper-tls"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"hyper 0.14.32",
|
||||
"native-tls",
|
||||
"tokio",
|
||||
"tokio-native-tls",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyper-util"
|
||||
version = "0.1.20"
|
||||
|
|
@ -1985,7 +2021,7 @@ dependencies = [
|
|||
"libc",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"socket2 0.6.3",
|
||||
"socket2 0.5.10",
|
||||
"tokio",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
|
|
@ -2505,6 +2541,12 @@ version = "0.4.29"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
|
||||
|
||||
[[package]]
|
||||
name = "lzxd"
|
||||
version = "0.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7b29dffab797218e12e4df08ef5d15ab9efca2504038b1b32b9b32fc844b39c9"
|
||||
|
||||
[[package]]
|
||||
name = "mac"
|
||||
version = "0.1.1"
|
||||
|
|
@ -2638,23 +2680,6 @@ dependencies = [
|
|||
"windows-sys 0.60.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "native-tls"
|
||||
version = "0.2.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"log",
|
||||
"openssl",
|
||||
"openssl-probe",
|
||||
"openssl-sys",
|
||||
"schannel",
|
||||
"security-framework",
|
||||
"security-framework-sys",
|
||||
"tempfile",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ndk"
|
||||
version = "0.9.0"
|
||||
|
|
@ -2932,56 +2957,28 @@ dependencies = [
|
|||
"pathdiff",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "openssl"
|
||||
version = "0.10.76"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "951c002c75e16ea2c65b8c7e4d3d51d5530d8dfa7d060b4776828c88cfb18ecf"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"cfg-if",
|
||||
"foreign-types 0.3.2",
|
||||
"libc",
|
||||
"once_cell",
|
||||
"openssl-macros",
|
||||
"openssl-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "openssl-macros"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "openssl-probe"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
|
||||
|
||||
[[package]]
|
||||
name = "openssl-sys"
|
||||
version = "0.9.112"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "57d55af3b3e226502be1526dfdba67ab0e9c96fc293004e79576b2b9edb0dbdb"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"pkg-config",
|
||||
"vcpkg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "option-ext"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
|
||||
|
||||
[[package]]
|
||||
name = "ordered-multimap"
|
||||
version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79"
|
||||
dependencies = [
|
||||
"dlv-list",
|
||||
"hashbrown 0.14.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ordered-stream"
|
||||
version = "0.2.0"
|
||||
|
|
@ -3723,15 +3720,15 @@ dependencies = [
|
|||
"http 0.2.12",
|
||||
"http-body 0.4.6",
|
||||
"hyper 0.14.32",
|
||||
"hyper-tls",
|
||||
"hyper-rustls 0.24.2",
|
||||
"ipnet",
|
||||
"js-sys",
|
||||
"log",
|
||||
"mime",
|
||||
"native-tls",
|
||||
"once_cell",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"rustls 0.21.12",
|
||||
"rustls-pemfile",
|
||||
"serde",
|
||||
"serde_json",
|
||||
|
|
@ -3739,7 +3736,7 @@ dependencies = [
|
|||
"sync_wrapper 0.1.2",
|
||||
"system-configuration",
|
||||
"tokio",
|
||||
"tokio-native-tls",
|
||||
"tokio-rustls 0.24.1",
|
||||
"tokio-util",
|
||||
"tower-service",
|
||||
"url",
|
||||
|
|
@ -3747,6 +3744,7 @@ dependencies = [
|
|||
"wasm-bindgen-futures",
|
||||
"wasm-streams 0.4.2",
|
||||
"web-sys",
|
||||
"webpki-roots 0.25.4",
|
||||
"winreg 0.50.0",
|
||||
]
|
||||
|
||||
|
|
@ -3764,20 +3762,20 @@ dependencies = [
|
|||
"http-body 1.0.1",
|
||||
"http-body-util",
|
||||
"hyper 1.9.0",
|
||||
"hyper-rustls",
|
||||
"hyper-rustls 0.27.9",
|
||||
"hyper-util",
|
||||
"js-sys",
|
||||
"log",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"rustls",
|
||||
"rustls 0.23.40",
|
||||
"rustls-pki-types",
|
||||
"rustls-platform-verifier",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sync_wrapper 1.0.2",
|
||||
"tokio",
|
||||
"tokio-rustls",
|
||||
"tokio-rustls 0.26.4",
|
||||
"tokio-util",
|
||||
"tower",
|
||||
"tower-http",
|
||||
|
|
@ -3840,6 +3838,16 @@ dependencies = [
|
|||
"uuid 0.8.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rust-ini"
|
||||
version = "0.21.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"ordered-multimap",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc-hash"
|
||||
version = "2.1.2"
|
||||
|
|
@ -3868,6 +3876,32 @@ dependencies = [
|
|||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls"
|
||||
version = "0.21.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e"
|
||||
dependencies = [
|
||||
"log",
|
||||
"ring",
|
||||
"rustls-webpki 0.101.7",
|
||||
"sct",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls"
|
||||
version = "0.22.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432"
|
||||
dependencies = [
|
||||
"log",
|
||||
"ring",
|
||||
"rustls-pki-types",
|
||||
"rustls-webpki 0.102.8",
|
||||
"subtle",
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls"
|
||||
version = "0.23.40"
|
||||
|
|
@ -3877,7 +3911,7 @@ dependencies = [
|
|||
"once_cell",
|
||||
"ring",
|
||||
"rustls-pki-types",
|
||||
"rustls-webpki",
|
||||
"rustls-webpki 0.103.13",
|
||||
"subtle",
|
||||
"zeroize",
|
||||
]
|
||||
|
|
@ -3923,10 +3957,10 @@ dependencies = [
|
|||
"jni",
|
||||
"log",
|
||||
"once_cell",
|
||||
"rustls",
|
||||
"rustls 0.23.40",
|
||||
"rustls-native-certs",
|
||||
"rustls-platform-verifier-android",
|
||||
"rustls-webpki",
|
||||
"rustls-webpki 0.103.13",
|
||||
"security-framework",
|
||||
"security-framework-sys",
|
||||
"webpki-root-certs",
|
||||
|
|
@ -3939,6 +3973,27 @@ version = "0.1.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
|
||||
|
||||
[[package]]
|
||||
name = "rustls-webpki"
|
||||
version = "0.101.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
|
||||
dependencies = [
|
||||
"ring",
|
||||
"untrusted",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls-webpki"
|
||||
version = "0.102.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"
|
||||
dependencies = [
|
||||
"ring",
|
||||
"rustls-pki-types",
|
||||
"untrusted",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls-webpki"
|
||||
version = "0.103.13"
|
||||
|
|
@ -4043,6 +4098,16 @@ version = "1.2.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||
|
||||
[[package]]
|
||||
name = "sct"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
|
||||
dependencies = [
|
||||
"ring",
|
||||
"untrusted",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "security-framework"
|
||||
version = "3.7.0"
|
||||
|
|
@ -4640,9 +4705,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "tao-macros"
|
||||
version = "0.1.3"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd"
|
||||
checksum = "5f7eeb6d99155545da6150a1795945f16ac9c178deb2a5f2e74d776107bd5849"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
|
@ -4683,6 +4748,7 @@ dependencies = [
|
|||
"gtk",
|
||||
"heck 0.5.0",
|
||||
"http 1.4.0",
|
||||
"http-range",
|
||||
"image 0.25.10",
|
||||
"jni",
|
||||
"libc",
|
||||
|
|
@ -4798,6 +4864,27 @@ dependencies = [
|
|||
"walkdir",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tauri-plugin-deep-link"
|
||||
version = "2.4.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "70ee75bc5627f77bfdf40c913255ebc258117b10ebe2b2239a1a1cf40b0b58aa"
|
||||
dependencies = [
|
||||
"dunce",
|
||||
"plist",
|
||||
"rust-ini",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"tauri",
|
||||
"tauri-plugin",
|
||||
"tauri-utils",
|
||||
"thiserror 2.0.18",
|
||||
"tracing",
|
||||
"url",
|
||||
"windows-registry",
|
||||
"windows-result 0.3.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tauri-plugin-drpc"
|
||||
version = "0.1.6"
|
||||
|
|
@ -4862,6 +4949,21 @@ dependencies = [
|
|||
"tauri-plugin",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tauri-plugin-single-instance"
|
||||
version = "2.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c8f29386f5e9fdc699182388a33ee80a56de436d91b67459e86afef426282af"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"tauri",
|
||||
"thiserror 2.0.18",
|
||||
"tracing",
|
||||
"windows-sys 0.60.2",
|
||||
"zbus",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tauri-plugin-updater"
|
||||
version = "2.10.1"
|
||||
|
|
@ -4879,7 +4981,7 @@ dependencies = [
|
|||
"osakit",
|
||||
"percent-encoding",
|
||||
"reqwest 0.13.2",
|
||||
"rustls",
|
||||
"rustls 0.23.40",
|
||||
"semver",
|
||||
"serde",
|
||||
"serde_json",
|
||||
|
|
@ -5111,6 +5213,15 @@ dependencies = [
|
|||
"time-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tiny-keccak"
|
||||
version = "2.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
|
||||
dependencies = [
|
||||
"crunchy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tinystr"
|
||||
version = "0.8.3"
|
||||
|
|
@ -5150,12 +5261,23 @@ dependencies = [
|
|||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-native-tls"
|
||||
version = "0.3.1"
|
||||
name = "tokio-rustls"
|
||||
version = "0.24.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
|
||||
checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
|
||||
dependencies = [
|
||||
"native-tls",
|
||||
"rustls 0.21.12",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-rustls"
|
||||
version = "0.25.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f"
|
||||
dependencies = [
|
||||
"rustls 0.22.4",
|
||||
"rustls-pki-types",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
|
|
@ -5165,7 +5287,7 @@ version = "0.26.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
|
||||
dependencies = [
|
||||
"rustls",
|
||||
"rustls 0.23.40",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
|
|
@ -5177,10 +5299,12 @@ checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38"
|
|||
dependencies = [
|
||||
"futures-util",
|
||||
"log",
|
||||
"native-tls",
|
||||
"rustls 0.22.4",
|
||||
"rustls-pki-types",
|
||||
"tokio",
|
||||
"tokio-native-tls",
|
||||
"tokio-rustls 0.25.0",
|
||||
"tungstenite",
|
||||
"webpki-roots 0.26.11",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -5289,18 +5413,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "toml_parser"
|
||||
version = "1.1.2+spec-1.1.0"
|
||||
version = "1.1.3+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
|
||||
checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56"
|
||||
dependencies = [
|
||||
"winnow 1.0.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_writer"
|
||||
version = "1.1.1+spec-1.1.0"
|
||||
version = "1.1.2+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
|
||||
checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2"
|
||||
|
||||
[[package]]
|
||||
name = "tower"
|
||||
|
|
@ -5418,8 +5542,9 @@ dependencies = [
|
|||
"http 1.4.0",
|
||||
"httparse",
|
||||
"log",
|
||||
"native-tls",
|
||||
"rand 0.8.5",
|
||||
"rustls 0.22.4",
|
||||
"rustls-pki-types",
|
||||
"sha1",
|
||||
"thiserror 1.0.69",
|
||||
"url",
|
||||
|
|
@ -5578,12 +5703,6 @@ dependencies = [
|
|||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "vcpkg"
|
||||
version = "0.2.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||
|
||||
[[package]]
|
||||
name = "vec_map"
|
||||
version = "0.8.2"
|
||||
|
|
@ -5921,6 +6040,30 @@ dependencies = [
|
|||
"rustls-pki-types",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "webpki-roots"
|
||||
version = "0.25.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1"
|
||||
|
||||
[[package]]
|
||||
name = "webpki-roots"
|
||||
version = "0.26.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9"
|
||||
dependencies = [
|
||||
"webpki-roots 1.0.9",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "webpki-roots"
|
||||
version = "1.0.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a"
|
||||
dependencies = [
|
||||
"rustls-pki-types",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "webview2-com"
|
||||
version = "0.38.2"
|
||||
|
|
@ -5985,7 +6128,7 @@ version = "0.1.11"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
||||
dependencies = [
|
||||
"windows-sys 0.61.2",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -6154,6 +6297,17 @@ dependencies = [
|
|||
"windows-link 0.2.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-registry"
|
||||
version = "0.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
|
||||
dependencies = [
|
||||
"windows-link 0.1.3",
|
||||
"windows-result 0.3.4",
|
||||
"windows-strings 0.4.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-result"
|
||||
version = "0.3.4"
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
[package]
|
||||
name = "emerald-legacy-launcher"
|
||||
version = "1.2.0"
|
||||
version = "1.6.1"
|
||||
description = "A FOSS, cross-platform launcher for Minecraft Legacy Edition"
|
||||
authors = ["Emerald Team"]
|
||||
edition = "2021"
|
||||
edition = "2024"
|
||||
|
||||
[lib]
|
||||
name = "emerald_lib"
|
||||
|
|
@ -13,26 +13,42 @@ crate-type = ["staticlib", "cdylib", "rlib"]
|
|||
tauri-build = { version = "2", features = [] }
|
||||
|
||||
[dependencies]
|
||||
tauri = { version = "2", features = [ "tray-icon", "image-png"] }
|
||||
tauri = { version = "2", features = ["protocol-asset", "tray-icon", "image-png"] }
|
||||
tauri-plugin-opener = "2"
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
serde_json = "1"
|
||||
tauri-plugin-gamepad = "0.0.5"
|
||||
tauri-plugin-drpc = "*"
|
||||
reqwest = { version = "0.11", features = ["stream"] }
|
||||
reqwest = { version = "0.11", default-features = false, features = ["stream", "json", "rustls-tls-webpki-roots"] }
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
futures-util = "0.3"
|
||||
tokio-util = { version = "0.7.18", features = ["rt"] }
|
||||
base64 = "0.21"
|
||||
tokio-tungstenite = { version = "0.21", default-features = false, features = ["connect", "native-tls"] }
|
||||
tokio-tungstenite = { version = "0.21", default-features = false, features = ["connect", "rustls-tls-webpki-roots"] }
|
||||
url = "2"
|
||||
rand = "0.8"
|
||||
http = "1"
|
||||
rfd = "0.15"
|
||||
libc = "0.2"
|
||||
image = "0.24"
|
||||
steam_shortcuts_util = "1.1.8"
|
||||
tauri-plugin-process = "2"
|
||||
byteorder = "1"
|
||||
flate2 = "1"
|
||||
once_cell = "1"
|
||||
lzxd = "0.2.6"
|
||||
uuid = { version = "1", features = ["v4"] }
|
||||
tauri-plugin-deep-link = "2"
|
||||
|
||||
[target.'cfg(target_os = "android")'.dependencies]
|
||||
wry = { version = "0.54", default-features = false }
|
||||
jni = "0.21"
|
||||
|
||||
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
|
||||
tauri-plugin-updater = "2"
|
||||
tauri-plugin-drpc = "*"
|
||||
tauri-plugin-single-instance = "2"
|
||||
rfd = "0.15"
|
||||
|
||||
#neo: enable portable appimages. revert back to crates.io once the PR is merged
|
||||
#[patch.crates-io]
|
||||
#tauri = { git = "https://github.com/tauri-apps/tauri", branch = "feat/truly-portable-appimage" }
|
||||
#end neo
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
{
|
||||
"identifier": "default",
|
||||
"description": "Default permissions",
|
||||
"windows": [
|
||||
"main"
|
||||
],
|
||||
"platforms": ["windows", "linux", "macOS"],
|
||||
"windows": ["main"],
|
||||
"permissions": [
|
||||
"core:default",
|
||||
"core:app:default",
|
||||
|
|
@ -14,7 +13,13 @@
|
|||
"core:resources:default",
|
||||
"core:tray:default",
|
||||
"core:webview:default",
|
||||
"core:webview:allow-create-webview-window",
|
||||
"core:window:default",
|
||||
"core:window:allow-set-decorations",
|
||||
"core:window:allow-is-fullscreen",
|
||||
"core:window:allow-minimize",
|
||||
"core:window:allow-toggle-maximize",
|
||||
"core:window:allow-close",
|
||||
"opener:default",
|
||||
"gamepad:default",
|
||||
"drpc:default",
|
||||
|
|
@ -35,6 +40,8 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"process:default"
|
||||
"process:default",
|
||||
"deep-link:default",
|
||||
"core:window:allow-start-dragging"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,11 @@
|
|||
{
|
||||
"identifier": "desktop-capability",
|
||||
"platforms": [
|
||||
"macOS",
|
||||
"windows",
|
||||
"linux"
|
||||
],
|
||||
"windows": [
|
||||
"main"
|
||||
],
|
||||
"platforms": ["macOS", "windows", "linux"],
|
||||
"windows": ["main"],
|
||||
"permissions": [
|
||||
"updater:default",
|
||||
"process:default"
|
||||
"process:default",
|
||||
"deep-link:default",
|
||||
"core:window:allow-start-dragging"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
29
src-tauri/capabilities/mobile.json
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"identifier": "mobile-capability",
|
||||
"description": "Mobile permissions",
|
||||
"platforms": ["android", "iOS"],
|
||||
"windows": ["main"],
|
||||
"permissions": [
|
||||
"core:default",
|
||||
"core:app:default",
|
||||
"core:event:default",
|
||||
"core:image:default",
|
||||
"core:path:default",
|
||||
"core:resources:default",
|
||||
"core:webview:default",
|
||||
"core:webview:allow-create-webview-window",
|
||||
"core:window:default",
|
||||
"opener:default",
|
||||
{
|
||||
"identifier": "opener:allow-open-path",
|
||||
"allow": [
|
||||
{
|
||||
"path": "**"
|
||||
}
|
||||
]
|
||||
},
|
||||
"gamepad:default",
|
||||
"process:default",
|
||||
"deep-link:default"
|
||||
]
|
||||
}
|
||||
12
src-tauri/gen/android/.editorconfig
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
# EditorConfig is awesome: https://EditorConfig.org
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = false
|
||||
insert_final_newline = false
|
||||
20
src-tauri/gen/android/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
*.iml
|
||||
.gradle
|
||||
/local.properties
|
||||
/.idea/caches
|
||||
/.idea/libraries
|
||||
/.idea/modules.xml
|
||||
/.idea/workspace.xml
|
||||
/.idea/navEditor.xml
|
||||
/.idea/assetWizardSettings.xml
|
||||
.DS_Store
|
||||
build
|
||||
/captures
|
||||
.externalNativeBuild
|
||||
.cxx
|
||||
local.properties
|
||||
key.properties
|
||||
release.keystore
|
||||
|
||||
/.tauri
|
||||
/tauri.settings.gradle
|
||||
6
src-tauri/gen/android/app/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/src/main/**/generated
|
||||
/src/main/jniLibs/**/*.so
|
||||
/src/main/assets/tauri.conf.json
|
||||
/tauri.build.gradle.kts
|
||||
/proguard-tauri.pro
|
||||
/tauri.properties
|
||||
93
src-tauri/gen/android/app/build.gradle.kts
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
import java.util.Properties
|
||||
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("org.jetbrains.kotlin.android")
|
||||
id("rust")
|
||||
}
|
||||
|
||||
val tauriProperties = Properties().apply {
|
||||
val propFile = file("tauri.properties")
|
||||
if (propFile.exists()) {
|
||||
propFile.inputStream().use { load(it) }
|
||||
}
|
||||
}
|
||||
|
||||
val keystoreProperties = Properties().apply {
|
||||
val propFile = file("key.properties")
|
||||
if (propFile.exists()) {
|
||||
propFile.inputStream().use { load(it) }
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
signingConfigs {
|
||||
create("release") {
|
||||
keyAlias = keystoreProperties.getProperty("keyAlias")
|
||||
keyPassword = keystoreProperties.getProperty("keyPassword")
|
||||
storeFile = file(keystoreProperties.getProperty("storeFile"))
|
||||
storePassword = keystoreProperties.getProperty("storePassword")
|
||||
}
|
||||
}
|
||||
compileSdk = 36
|
||||
namespace = "com.emerald.legacy"
|
||||
defaultConfig {
|
||||
manifestPlaceholders["usesCleartextTraffic"] = "false"
|
||||
applicationId = "com.emerald.legacy"
|
||||
minSdk = 26
|
||||
targetSdk = 28
|
||||
versionCode = tauriProperties.getProperty("tauri.android.versionCode", "1").toInt()
|
||||
versionName = tauriProperties.getProperty("tauri.android.versionName", "1.0")
|
||||
}
|
||||
buildTypes {
|
||||
getByName("debug") {
|
||||
manifestPlaceholders["usesCleartextTraffic"] = "true"
|
||||
isDebuggable = true
|
||||
isJniDebuggable = true
|
||||
isMinifyEnabled = false
|
||||
packaging { jniLibs.keepDebugSymbols.add("*/arm64-v8a/*.so")
|
||||
jniLibs.keepDebugSymbols.add("*/armeabi-v7a/*.so")
|
||||
jniLibs.keepDebugSymbols.add("*/x86/*.so")
|
||||
jniLibs.keepDebugSymbols.add("*/x86_64/*.so")
|
||||
}
|
||||
}
|
||||
getByName("release") {
|
||||
signingConfig = signingConfigs.getByName("release")
|
||||
isMinifyEnabled = true
|
||||
proguardFiles(
|
||||
*fileTree(".") { include("**/*.pro") }
|
||||
.plus(getDefaultProguardFile("proguard-android-optimize.txt"))
|
||||
.toList().toTypedArray()
|
||||
)
|
||||
}
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
buildFeatures {
|
||||
buildConfig = true
|
||||
}
|
||||
lint {
|
||||
disable += "ExpiredTargetSdkVersion"
|
||||
}
|
||||
packaging {
|
||||
resources.excludes += "lib/*/jni/**"
|
||||
}
|
||||
}
|
||||
|
||||
rust {
|
||||
rootDirRel = "../../../"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":diamondruntime"))
|
||||
implementation("androidx.webkit:webkit:1.14.0")
|
||||
implementation("androidx.appcompat:appcompat:1.7.1")
|
||||
implementation("androidx.activity:activity-ktx:1.10.1")
|
||||
implementation("com.google.android.material:material:1.12.0")
|
||||
testImplementation("junit:junit:4.13.2")
|
||||
androidTestImplementation("androidx.test.ext:junit:1.1.4")
|
||||
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0")
|
||||
}
|
||||
|
||||
apply(from = "tauri.build.gradle.kts")
|
||||
19
src-tauri/gen/android/app/proguard-rules.pro
vendored
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
-keep class dev.lcehub.emerald.** { *; }
|
||||
-keepclassmembers class dev.lcehub.emerald.** { *; }
|
||||
-dontwarn dev.lcehub.emerald.**
|
||||
-keep class com.github.luben.zstd.** { *; }
|
||||
-keepclassmembers class com.github.luben.zstd.** { *; }
|
||||
-dontwarn com.github.luben.zstd.**
|
||||
-keep class com.emerald.legacy.TauriActivity {
|
||||
public <methods>;
|
||||
public <fields>;
|
||||
}
|
||||
-keep class com.emerald.legacy.MainActivity {
|
||||
public <methods>;
|
||||
}
|
||||
|
||||
-dontwarn com.android.org.conscrypt.SSLParametersImpl
|
||||
-dontwarn org.apache.harmony.xnet.provider.jsse.SSLParametersImpl
|
||||
-dontwarn org.bouncycastle.jsse.BCSSLParameters
|
||||
-dontwarn org.bouncycastle.jsse.BCSSLSocket
|
||||
-dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
|
||||
50
src-tauri/gen/android/app/src/main/AndroidManifest.xml
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
<!-- AndroidTV support -->
|
||||
<uses-feature android:name="android.software.leanback" android:required="false" />
|
||||
|
||||
<application
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/Theme.emerald_legacy_launcher"
|
||||
android:extractNativeLibs="true"
|
||||
android:usesCleartextTraffic="${usesCleartextTraffic}"
|
||||
tools:replace="android:label,android:theme">
|
||||
<activity
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="sensorLandscape"
|
||||
android:label="@string/main_activity_title"
|
||||
android:name=".MainActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
<!-- AndroidTV support -->
|
||||
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
|
||||
</intent-filter>
|
||||
<!-- DEEP LINK PLUGIN. AUTO-GENERATED. DO NOT REMOVE. -->
|
||||
|
||||
<!-- DEEP LINK PLUGIN. AUTO-GENERATED. DO NOT REMOVE. -->
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".LceAuthActivity"
|
||||
android:exported="false"
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" />
|
||||
|
||||
<provider
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="${applicationId}.fileprovider"
|
||||
android:exported="false"
|
||||
android:grantUriPermissions="true"
|
||||
tools:replace="android:authorities">
|
||||
<meta-data
|
||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/file_paths" />
|
||||
</provider>
|
||||
</application>
|
||||
</manifest>
|
||||