Merge branch 'beta' into nightly

updated nigtly
This commit is contained in:
xgui4
2026-05-03 00:51:17 -04:00
12 changed files with 201 additions and 9 deletions

62
PKGBUILD Normal file
View File

@@ -0,0 +1,62 @@
# Maintainer: Xgui4
pkgname=lce-qt-launcher-git
pkgver=r149.804311b
pkgrel=1
pkgdesc="A custom Minecraft LCE Launcher written in Python and Qt with GNU/Linux support in mind. (Nigthly/Git Build)"
arch=('any')
url="https://github.com/xgui4/LCE-Qt-Launcher"
license=('GPL-3.0-or-later')
depends=(
'python'
'pyside6'
'python-requests'
'python-platformdirs'
'python-rich'
)
makedepends=(
'git'
'bash'
'curl'
'python-build'
'python-installer'
'python-hatchling'
'python-wheel'
'qt6-tools'
)
optdepends=(
'wine: Allow to launch non-Linux-native Minecraft LCE ports'
'steam: Allow for Steam integration'
'ttc-monocraft: Minecraft Font for the UI (Availaible in the AUR)'
)
provides=("${pkgname%-git}" "${pkgname%-nightly}" "${pkgname%}")
conflicts=("${pkgname%-dev}" "${pkgname%-stable}" "${pkgname%}")
source=("${pkgname}::git+${url}.git#branch=nightly")
sha256sums=('SKIP')
pkgver() {
cd "$pkgname"
# cutting off 'foo-' prefix that presents in the git tag
git describe --long --abbrev=7 | sed 's/^foo-//;s/\([^-]*-g\)/r\1/;s/-/./g'
}
build() {
cd "$pkgname"
rm -rf dist/ build/
/usr/bin/python -m build --wheel --no-isolation
}
package() {
cd "$pkgname"
/usr/bin/python -m installer --destdir="$pkgdir" dist/*.whl
install -d "$pkgdir/opt/lce_qt_launcher"
cp -r data assets "$pkgdir"
install -Dm644 "data/lce_qt_launcher.ini" "$pkgdir/etc/lce_qt_launcher.ini"
install -Dm644 "packages/io.github.xgui4.lce_qt_launcher.desktop" "$pkgdir/usr/share/applications/io.github.xgui4.lce_qt_launcher.desktop"
install -Dm644 "packages/lce_inst-mime.xml" "$pkgdir/usr/share/mime/packages/io.github.xgui4.lce_qt_launcher.gtk.metainfo.xml"
install -Dm644 "license.md" -t "$pkgdir/usr/share/licenses/$pkgname/"
install -Dm644 "readme.md" "code-of-conduct.md" -t "$pkgdir/usr/share/doc/$pkgname/"
install -Dm644 "packages/io.github.xgui4.lce_qt_launcher.metainfo.xml" "$pkgdir/usr/share/metainfo/io.github.xgui4.lce_qt_launcher.gtk.metainfo.xml"
install -Dm644 "assets/io.github.xgui4.lce_qt_launcher.png" "$pkgdir/usr/share/icons/hicolor/128x128/apps/io.github.xgui4.lce_qt_launcher.png"
install -Dm644 "assets/lce_inst.png" "$pkgdir/usr/share/icons/hicolor/128x128/mimetypes/application-x-lce_inst.png"
}

BIN
assets/images/aether.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

@@ -0,0 +1,15 @@
{
"$schema": "https://raw.githubusercontent.com/xgui4/LCE-Qt-Launcher/refs/heads/nightly/schemas/x-application-lce_inst_config.json",
"name": "aRockefeler Aether Mod",
"installation_path": ".lce-aether",
"archive_file": "Release",
"username": "Steve",
"image": ":/aether.png",
"exe_name": "Minecraft.Client.exe",
"url": "https://github.com/Frcoxd/aether-papu",
"repo_url": "https://github.com/Frcoxd/aether-papu",
"news_feed": "https://github.com/LCE-Hub/LCE-Workshop/tree/main/.00versions/test",
"instance_source": "InstanceSource.GITHUB_RELEASE",
"instance_type": "InstanceType.CLIENT_VANILLA",
"version": "Aether"
}

View File

@@ -6,7 +6,7 @@
"archive_file": "LCEWindows64.zip",
"exe_name": "Minecraft.Client.exe",
"repo_url": "https://github.com/MCLCE/MinecraftConsoles",
"image" : ":/assets/minecraft.png",
"image" : ":/assets/mclce-ico.png",
"news_feed" : "https://github.com/MCLCE/MinecraftConsoles/commits/main/",
"instance_source": "InstanceSource.GITHUB_RELEASE",
"instance_type": "InstanceType.CLIENT_VANILLA",

View File

@@ -2,7 +2,7 @@
pkgs.python3Packages.buildPythonApplication rec {
pname = "lce-qt-launcher";
version = "2026.5.1";
version = "2026.5.2";
format = "pyproject";
src = ./.;
@@ -18,6 +18,7 @@ pkgs.python3Packages.buildPythonApplication rec {
pkgs.bash
pkgs.coreutils
pkgs.gnused
pkgs.monocraft
];
propagatedBuildInputs = with pkgs.python3Packages; [

View File

@@ -3,7 +3,7 @@
; Non-commercial use only
#define MyAppName "LCE Qt Launcher (Nightly Preview Inno Setup 7 Installer)"
#define MyAppVersion "2026.5.1"
#define MyAppVersion "2026.5.2"
#define MyAppPublisher "Xgui4"
#define MyAppURL "https://github.com/xgui4/lce-qt-launcher"
#define MyAppExeName "main.exe"

View File

@@ -3,7 +3,7 @@
; Non-commercial use only
#define MyAppName "LCE Qt Launcher (Nightly)"
#define MyAppVersion "2026.5.1"
#define MyAppVersion "2026.5.2"
#define MyAppPublisher "Xgui4"
#define MyAppURL "https://github.com/xgui4/lce-qt-launcher"
#define MyAppExeName "main.exe"

View File

@@ -74,10 +74,12 @@ files = [
"src/lce_qt_launcher/views/app_data.py",
"src/lce_qt_launcher/managers/__init__.py",
"src/lce_qt_launcher/managers/instance.py",
"src/lce_qt_launcher/managers/system_managers.py",
"src/lce_qt_launcher/managers/steam_managers.py",
"src/lce_qt_launcher/managers/proton_managers.py",
"src/lce_qt_launcher/managers/mod_managers.py",
"src/lce_qt_launcher/managers/system_manager.py",
"src/lce_qt_launcher/managers/steam_manager.py",
"src/lce_qt_launcher/managers/proton_manager.py",
"src/lce_qt_launcher/managers/mod_manager.py",
"src/lce_qt_launcher/managers/import_manager.py",
"src/lce_qt_launcher/managers/skin_manager.py",
"src/lce_qt_launcher/models/__init__.py",
"src/lce_qt_launcher/models/image_class.py",
"src/lce_qt_launcher/models/preferences.py",

View File

@@ -20,6 +20,7 @@
<file alias="lce-hub-ico.png">assets/images/lce-hub-ico.png</file>
<file alias="chest.png">assets/images/chest.png</file>
<file alias="piston.png">assets/images/piston.png</file>
<file alias="aether.png">assets/images/aether.png</file>
</qresource>
<qresource prefix="/styles">
<file alias="minecraft.qss">assets/styles/minecraft.qss</file>
@@ -33,6 +34,7 @@
<file alias="hellishends.lce_inst">data/defaults_instances/hellishends.lce_inst</file>
<file alias="360Revived.lce_inst">data/defaults_instances/360Revived.lce_inst</file>
<file alias="revelations.lce_inst">data/defaults_instances/revelation.lce_inst</file>
<file alias="aether.lce_inst">data/defaults_instances/aether.lce_inst</file>
</qresource>
<qresource prefix="/languages">
<file alias="fallback.json">assets/languages/translations.json</file>

View File

@@ -16,7 +16,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
"""
def main():
print(
"""
@@ -26,5 +26,6 @@ def main():
under certain conditions; type `show c' for details.
""")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,109 @@
#[tauri::command]
async fn add_to_steam(
_app: AppHandle,
instance_id: String,
name: String,
title_base64: String,
panorama_base64: String,
) -> Result<(), String> {
let exe_path = std::env::current_exe().map_err(|e| e.to_string())?;
let exe_str = exe_path.to_string_lossy().to_string();
let launch_options = format!("\"{}\"", instance_id);
let start_dir = exe_path.parent().map(|p| p.to_string_lossy().to_string()).unwrap_or_default();
let app_id_32 = steam_shortcuts_util::app_id_generator::calculate_app_id(&exe_str, &name);
//let app_id_64 = ((app_id_32 as u64) << 32) | 0x02000000; //neo: just in case we'll need later.
let mut userdata_dirs: Vec<PathBuf> = Vec::new();
#[cfg(target_os = "linux")]
{
if let Ok(home) = std::env::var("HOME") {
let h = PathBuf::from(home);
userdata_dirs.push(h.join(".steam/steam/userdata"));
userdata_dirs.push(h.join(".local/share/Steam/userdata"));
userdata_dirs.push(h.join(".var/app/com.valvesoftware.Steam/.local/share/Steam/userdata"));
}
}
#[cfg(target_os = "windows")]
{
userdata_dirs.push(PathBuf::from("C:\\Program Files\\Steam\\userdata"));
userdata_dirs.push(PathBuf::from("C:\\Program Files (x86)\\Steam\\userdata"));
}
#[cfg(target_os = "macos")]
{
if let Ok(home) = std::env::var("HOME") {
let h = PathBuf::from(home);
userdata_dirs.push(h.join("Library/Application Support/Steam/userdata"));
}
}
let valid_userdata_dirs: Vec<PathBuf> = userdata_dirs.into_iter().filter(|d| d.exists()).collect();
if valid_userdata_dirs.is_empty() {
return Err("Steam userdata directory not found.".into());
}
for userdata_root in valid_userdata_dirs {
let entries = fs::read_dir(&userdata_root).map_err(|e| e.to_string())?;
for entry in entries.flatten() {
if entry.file_type().map(|t| t.is_dir()).unwrap_or(false) {
let user_config_dir = entry.path().join("config");
let shortcuts_path = user_config_dir.join("shortcuts.vdf");
if !user_config_dir.exists() { continue; }
let content = if shortcuts_path.exists() {
fs::read(&shortcuts_path).unwrap_or_default()
} else {
Vec::new()
};
let shortcuts = if !content.is_empty() {
parse_shortcuts(&content).map_err(|e| e.to_string())?
} else {
Vec::new()
};
let mut owned_shortcuts: Vec<steam_shortcuts_util::shortcut::ShortcutOwned> = shortcuts.iter().map(|s| s.to_owned()).collect();
if owned_shortcuts.iter().any(|s| s.app_name == name && s.exe == exe_str) {
continue;
}
owned_shortcuts.push(steam_shortcuts_util::shortcut::ShortcutOwned {
order: owned_shortcuts.len().to_string(),
app_id: app_id_32,
app_name: name.clone(),
exe: exe_str.clone(),
start_dir: start_dir.clone(),
icon: "".to_string(),
shortcut_path: "".to_string(),
launch_options: launch_options.clone(),
is_hidden: false,
allow_desktop_config: true,
allow_overlay: true,
open_vr: 0,
dev_kit: 0,
dev_kit_game_id: "".to_string(),
dev_kit_overrite_app_id: 0,
last_play_time: 0,
tags: Vec::new(),
});
let final_shortcuts: Vec<Shortcut> = owned_shortcuts.iter().map(|s| s.borrow()).collect();
let new_content = shortcuts_to_bytes(&final_shortcuts);
fs::write(&shortcuts_path, new_content).map_err(|e| e.to_string())?;
let grid_dir = user_config_dir.join("grid");
if !grid_dir.exists() {
let _ = fs::create_dir_all(&grid_dir);
}
if grid_dir.exists() {
let panorama_data = general_purpose::STANDARD.decode(panorama_base64.clone()).map_err(|e| e.to_string())?;
let title_data = general_purpose::STANDARD.decode(title_base64.clone()).map_err(|e| e.to_string())?;
let _ = fs::write(grid_dir.join(format!("{}p.png", app_id_32)), &panorama_data);
let _ = fs::write(grid_dir.join(format!("{}_hero.png", app_id_32)), &panorama_data);
let _ = fs::write(grid_dir.join(format!("{}.png", app_id_32)), &panorama_data);
let _ = fs::write(grid_dir.join(format!("{}_logo.png", app_id_32)), &title_data);
let _ = fs::write(grid_dir.join(format!("{}.json", app_id_32)), "{\"nVersion\":1,\"logoPosition\":{\"pinnedPosition\":\"CenterCenter\",\"nWidthPct\":50,\"nHeightPct\":50}}".as_bytes()); //neo: if you're confused, this is for logo position
}
}
}
}
Ok(())
}