Files
hytale-f2p/backend/launcher.js
Alex 62430fe8f0 fix: comprehensive UUID/username persistence bug fixes (#252)
* fix: comprehensive UUID/username persistence bug fixes

Major fixes for UUID/skin reset issues that caused players to lose cosmetics:

Core fixes:
- Username rename now preserves UUID (atomic rename, not new identity)
- Atomic config writes with backup/recovery system
- Case-insensitive UUID lookup with case-preserving storage
- Pre-launch validation blocks play if no username configured
- Removed saveUsername calls from launch/install flows

UUID Modal fixes:
- Fixed isCurrent badge showing on wrong user
- Added switch identity button to change between saved usernames
- Fixed custom UUID input using unsaved DOM username
- UUID list now refreshes when player name changes
- Enabled copy/paste in custom UUID input field

UI/UX improvements:
- Added translation keys for switch username functionality
- CSS user-select fix for UUID input fields
- Allowed Ctrl+V/C/X/A shortcuts in Electron

Files: config.js, gameLauncher.js, gameManager.js, playerManager.js,
launcher.js, settings.js, main.js, preload.js, style.css, en.json

See UUID_BUGS_FIX_PLAN.md for detailed bug list (18 bugs, 16 fixed)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(i18n): add switch username translations to all locales

Added translation keys for username switching functionality:
- notifications.noUsername
- notifications.switchUsernameSuccess
- notifications.switchUsernameFailed
- notifications.playerNameTooLong
- confirm.switchUsernameTitle
- confirm.switchUsernameMessage
- confirm.switchUsernameButton

Languages updated: de-DE, es-ES, fr-FR, id-ID, pl-PL, pt-BR, ru-RU, sv-SE, tr-TR

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: move UUID_BUGS_FIX_PLAN.md to docs folder

* docs: update UUID_BUGS_FIX_PLAN with complete fix details

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 05:01:58 +08:00

203 lines
3.9 KiB
JavaScript

// Main launcher module - orchestrates all launcher functionality
// This file serves as the main entry point and re-exports all necessary functions
// Core modules
const {
saveUsername,
loadUsername,
loadUsernameWithDefault,
hasUsername,
saveJavaPath,
loadJavaPath,
saveInstallPath,
loadInstallPath,
saveDiscordRPC,
loadDiscordRPC,
saveLanguage,
loadLanguage,
saveCloseLauncherOnStart,
loadCloseLauncherOnStart,
saveLauncherHardwareAcceleration,
loadLauncherHardwareAcceleration,
loadConfig,
saveConfig,
saveModsToConfig,
loadModsFromConfig,
getUuidForUser,
isFirstLaunch,
markAsLaunched,
checkLaunchReady,
// UUID Management
getCurrentUuid,
getAllUuidMappings,
getAllUuidMappingsArray,
setUuidForUser,
generateNewUuid,
deleteUuidForUser,
resetCurrentUserUuid,
// GPU Preference
saveGpuPreference,
loadGpuPreference,
// Version Management
saveVersionClient,
loadVersionClient,
saveVersionBranch,
loadVersionBranch
} = require('./core/config');
const { getResolvedAppDir, getModsPath } = require('./core/paths');
// Managers
const {
isGameInstalled,
installGame,
uninstallGame,
updateGameFiles,
checkExistingGameInstallation,
repairGame
} = require('./managers/gameManager');
const {
launchGame,
launchGameWithVersionCheck
} = require('./managers/gameLauncher');
const { getJavaDetection } = require('./managers/javaManager');
const {
downloadAndReplaceHomePageUI,
findHomePageUIPath,
downloadAndReplaceLogo,
findLogoPath
} = require('./managers/uiFileManager');
const {
loadInstalledMods,
downloadMod,
uninstallMod,
toggleMod
} = require('./managers/modManager');
// Services
const {
getLatestClientVersion
} = require('./services/versionManager');
const { getHytaleNews } = require('./services/newsManager');
const { getOrCreatePlayerId } = require('./services/playerManager');
const {
proposeGameUpdate,
handleFirstLaunchCheck
} = require('./services/firstLaunch');
// Utils
const { detectGpu } = require('./utils/platformUtils');
// Re-export all functions to maintain backward compatibility
module.exports = {
// Game launch functions
launchGame,
launchGameWithVersionCheck,
// Game installation functions
installGame,
isGameInstalled,
uninstallGame,
updateGameFiles,
repairGame,
// User configuration functions
saveUsername,
loadUsername,
loadUsernameWithDefault,
hasUsername,
getUuidForUser,
checkLaunchReady,
// Java configuration functions
saveJavaPath,
loadJavaPath,
getJavaDetection,
// Installation path functions
saveInstallPath,
loadInstallPath,
// Discord RPC functions
saveDiscordRPC,
loadDiscordRPC,
// Language functions
saveLanguage,
loadLanguage,
// Close Launcher functions
saveCloseLauncherOnStart,
loadCloseLauncherOnStart,
// Hardware Acceleration functions
saveLauncherHardwareAcceleration,
loadLauncherHardwareAcceleration,
// Config functions
loadConfig,
saveConfig,
// GPU Preference functions
saveGpuPreference,
loadGpuPreference,
detectGpu,
// Version functions
getLatestClientVersion,
saveVersionClient,
loadVersionClient,
saveVersionBranch,
loadVersionBranch,
// News functions
getHytaleNews,
// Player ID functions
getOrCreatePlayerId,
// UUID Management functions
getCurrentUuid,
getAllUuidMappings,
getAllUuidMappingsArray,
setUuidForUser,
generateNewUuid,
deleteUuidForUser,
resetCurrentUserUuid,
// Mod management functions
getModsPath,
loadInstalledMods,
downloadMod,
uninstallMod,
toggleMod,
saveModsToConfig,
loadModsFromConfig,
// UI file management functions
downloadAndReplaceHomePageUI,
findHomePageUIPath,
downloadAndReplaceLogo,
findLogoPath,
// First launch functions
isFirstLaunch,
markAsLaunched,
checkExistingGameInstallation,
proposeGameUpdate,
handleFirstLaunchCheck,
// Path functions
getResolvedAppDir
};