资讯动态

Ely Prism Launcher会话生命周期:从ClaimAccount登录到游戏进程的完整链路

发布时间:2026/10/17 19:25:03 来源:尧图企业网站定制
【免费下载链接】LauncherThis fork of Prism Launcher adds integrated support for Ely.by accounts.项目地址https://gitcode.com/GitHub_Trending/ely/Launcher点击查看免费下载Ely Prism Launcher是一个为 Minecraft 打造的开源多实例启动器它在 Prism Launcher 的基础上深度集成了Ely.by 账号支持。本文带你完整走一遍它的会话生命周期从一次 Ely.by 账号登录、AuthSession的构建、ClaimAccount锁定账号到最终java游戏进程被拉起并持续监控的每一步帮助新手和进阶用户理解启动器内部的完整链路 一、一次“点击启动”背后的 5 个阶段Ely Prism Launcher 把启动过程拆成了职责清晰的 5 个阶段每个阶段都有对应的核心源码文件阶段做什么核心文件① 账号决策选择账号、判定 Normal / Offline / Demo 模式launcher/LaunchController.cpp② 认证刷新Ely.by OAuth2 登录、获取游戏 Profilelauncher/minecraft/auth/AuthFlow.cpp③ 会话构建生成AuthSession标记是否应用 Ely 补丁launcher/minecraft/auth/MinecraftAccount.cpp④ 启动流水线组装十几步LaunchStep顺序执行含ClaimAccountlauncher/minecraft/MinecraftInstance.cpp⑤ 进程拉起用 NewLaunch.jar 启动 Java 进程并跟踪日志launcher/minecraft/launch/LauncherPartLaunch.cpp下面按链路顺序逐一拆解。二、登录起点选账号 判定启动模式一切从 LaunchController::executeTask() 开始。它会先校验 Java 参数是否合法然后进入login()执行两个关键决策1.decideAccount()—— 用哪个账号优先级非常直观实例配置里绑定了专属账号InstanceAccountId→ 用它否则使用全局默认账号连一个账号都没有 → 弹窗引导你打开账号管理页添加账号。2.decideLaunchMode()—— 以什么模式启动这一步会检查账号的“健康状况”AccountState。如果账号处于Unchecked、Errored、Offline状态或标记了shouldRefresh()启动器会先触发refresh()刷新令牌并在进度弹窗中等待刷新完成。根据刷新结果最终落到三种模式之一Normal令牌有效正常在线游玩Offline认证服务器不可达或断网询问玩家名后离线启动Demo账号未购买游戏询问后以试玩版启动。 如果刷新后账号Expired或GonereauthenticateAccount()会弹出“是否重新认证”的提示让你用新凭据登录。三、Ely.by 账号登录一条精简的 4 步认证流Ely Prism Launcher 的核心特色就在这里。在 AuthFlow 的构造函数中按账号类型分流MSA微软账号需要 7 步Microsoft OAuth → Xbox → 权益 → Profile → 皮肤而Ely.by 账号只需要 4 步明显更轻步骤类作用1. OAuth 授权ElyStep打开浏览器跳转account.ely.by完成授权换取 access token2. 令牌转换ElyYggdrasilTokenStep将 Ely 的 OAuth 令牌直接用作 Yggdrasil游戏服务端令牌3. 获取 ProfileMinecraftProfileStepEly拉取玩家名、UUID 等游戏身份信息4. 拉取皮肤GetSkinStep预下载皮肤纹理在无浏览器环境比如 SSH 远程机器下Action::DeviceCode分支会改用 ElyDeviceCodeStep向account.ely.by申请一个设备码你在任意设备的浏览器上输入该码即可完成登录令牌通过轮询/api/oauth2/v1/token拿回。AuthFlow本身是一个简单的状态机驱动队列nextStep()逐个弹出步骤执行任一步骤返回失败状态如STATE_FAILED_HARD→ 会话过期就会终止整条流程并在账号上标记对应的AccountState。四、AuthSession贯穿整个会话的“通行证”登录成功后账号会调用 MinecraftAccount::fillSession() 生成一个AuthSession对象——它是整个会话生命周期的载体结构定义在 launcher/minecraft/auth/AuthSession.haccess_token易失的认证令牌只存在于本次会话player_name/uuid玩家名与 UUIDsession组合会话 ID写进启动参数launchMode本次实际采用的启动模式wantsElyPatchEly 分支特有的标志位决定是否替换游戏内的认证库。wantsElyPatch的值由实例设置项ElyPatchPreference决定0~2 三档策略例如档位 2 表示“仅 Ely.by 账号时启用补丁”。这个标志会一路传递到启动流水线触发下一节的 Ely 补丁准备步骤。五、ClaimAccount启动流水线中的“账号守卫”在线模式下createLaunchTask()组装步骤时会插入ClaimAccountif (session-launchMode ! LaunchMode::Offline) { process-appendStep(makeSharedClaimAccount(pptr, session)); ... }这段代码位于 MinecraftInstance::createLaunchTask()。它的实现极其克制却作用关键见 launcher/minecraft/launch/ClaimAccount.cppexecuteTask()对即将使用的账号加一把UseLock独占锁。这把锁的意义是——游戏整个运行期间任何“切换默认账号”“刷新令牌”“登出”等会触碰账号的操作都会被阻塞保证会话令牌在游戏进程存活期间不会被悄悄作废finalize()流水线结束无论成败时释放锁账号重新可操作。注意ClaimAccount::canAbort()恒返回false——拿锁和放锁是原子性的中途不能被打断否则可能留下死锁或令牌竞态。六、LaunchTask一条十几步的启动流水线LaunchTask 是整个启动过程的中枢。executeTask()从第 0 步开始每步通过start()异步执行完成后onStepFinished()检查wasSuccessful()成功则推进下一步失败则回滚调用所有已完成步骤的finalize()并终止LaunchTask.cpp。由 createLaunchTask() 组装出的标准步骤序列如下 为常规步骤 为 Ely 相关#步骤说明0PrintServers在线模式先检查关键服务器可达性 Ely 模式检查ely.by/account.ely.by/skinsystem.ely.byMSA 模式检查微软域名1TextPrint打印实例目录、启动模式online/offline/demo、启动器版本2CreateGameFolders创建.minecraft等必备目录3MinecraftLoadAndCheck加载并校验版本元数据4AutoInstallJava→CheckJava→VerifyJavaInstall自动装 Java、检查路径与版本满足度5PreLaunchCommand可选执行用户自定义的启动前命令6ElyPatchTask若wantsElyPatch为真从元数据索引解析com.mojang:authlib或authlib-injector把 Ely 认证库注入游戏 classpathElyPatchTask.cpp7ClaimAccount锁定账号上节详解8LibrariesTask等更新任务下载缺失的游戏库与资源9ModMinecraftJar→ScanModFolders打包 jar mod、扫描 mods 目录10EnsureAvailableMemory检查系统内存是否足够不足则告警11PrintInstanceInfo打印实例信息含玩家名等敏感字段会被脱敏12ExtractNatives→ReconstructAssets解压原生库、校验重组资源索引13LauncherPartLaunch⭐ 真正拉起游戏进程14PostLaunchCommand可选游戏退出后执行后置命令两个值得了解的设计细节日志脱敏LaunchController会调用setCensorFilter()把 access token 等敏感串注册进过滤器censorPrivateInfo()在每一条控制台输出写入 LogModel 前完成替换避免令牌泄露到日志文件两段式推进LauncherPartLaunch前任务会发出readyForLaunch()进入Waiting状态若配置了 Profiler如 JProfiler启动器会暂停等待用户完成配置后proceed()否则直接放行。七、LauncherPartLaunch脚本 → 命令行 → 游戏进程最后一步 LauncherPartLaunch 把“一切准备就绪”变成“进程跑起来”选启动器 jar常规实例使用NewLaunch.jar老版本或需要在线修复的实例额外挂上NewLaunchLegacy.jar生成启动脚本instance-createLaunchScript(m_session, m_targetToJoin)将AuthSession令牌、UUID、会话 ID、目标服务器渲染成最终命令行环境配置createLaunchEnvironment()注入-Djava.library.path、classpath并把进程设为setDetachable(true)—— 即使启动器侧的对象被销毁游戏进程依然独立存活状态跟踪LoggedProcess的stateChanged信号驱动成败判定日志逐行回传LaunchTask支持解析 log4j XML 结构化日志可选联动若勾选CloseAfterLaunch启动器会监听游戏日志中的Setting user行玩家加载完成后自动关闭所有窗口让体验接近官方客户端。游戏进程退出后LaunchTask::emitSucceeded()会把实例状态setRunning(false)整个会话生命周期至此闭环 八、常见问题速查现象原因定位建议启动卡在 Updating Yggdrasil tokenEly 令牌步骤阻塞检查account.ely.by网络可达性提示 Launcher library could not foundNewLaunch.jar缺失重新安装或修复启动器文件游戏启动后账号被登出/刷新异常ClaimAccount锁未生效自定义账号类型确认账号类型为 Ely/MSA 而非 Offline断网仍想玩认证服务器不可达会自动降级 Offline 模式输入玩家名即可控制台日志出现***脱敏过滤器正常工作属预期行为令牌已被遮蔽九、核心文件索引想深入源码的同学可以从这几个入口读起启动总控launcher/LaunchController.cpp流水线编排launcher/minecraft/MinecraftInstance.cppcreateLaunchTask步骤引擎launcher/launch/LaunchTask.cpp账号守卫launcher/minecraft/launch/ClaimAccount.cppEly 认证流launcher/minecraft/auth/AuthFlow.cpp 及 launcher/minecraft/auth/steps/ 目录Ely 补丁注入launcher/minecraft/update/ElyPatchTask.cpp进程拉起launcher/minecraft/launch/LauncherPartLaunch.cpp小结Ely Prism Launcher 的会话生命周期是一条“账号决策 → OAuth 认证 → 会话封装 → 流水线准备 → 进程拉起”的单向链路。ClaimAccount看似简单的一步实则是保证“登录态”与“游戏进程”生命周期严格对齐的守门人——理解了这条链路你排查任何启动问题都有了地图。赞分享【免费下载链接】LauncherThis fork of Prism Launcher adds integrated support for Ely.by accounts.项目地址https://gitcode.com/GitHub_Trending/ely/Launcher点击查看免费下载相关推荐TaskingAI Python SDK 会话管理实战从 create_chat 到 Chat 会话的完整生命周期TaskingAI Python SDK 会话管理实战从 create_chat 到 Chat 会话的完整生命周期 Chat会话是 TaskingAI A人工智能大模型AI AgentRAG后端前端如何用Ely Prism Launcher配置内存与JVM参数提升游戏FPS的完整教程如何用Ely Prism Launcher配置内存与JVM参数提升游戏FPS的完整教程 Ely Prism LauncherPineconeMC是一款基于如何将Jar Mod合进Minecraft主程序Ely Prism Launcher的ModMinecraftJar完整指南如何将Jar Mod合进Minecraft主程序Ely Prism Launcher的ModMinecraftJar完整指南 Ely Prism Launch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑