Coder Social home page Coder Social logo

polymerium's Introduction


Logo

Polymerium

为 Minecraft 准备的游戏实例管理器
查看文档 »

反馈 · 讨论

Contributors Forks Stargazers Issues MIT License

关于

Screenshot

这是个 WIP 早期项目,大部分功能还没写完或仅存在于设计,开发进度请参考 Roadmap

理念

正如其缝合的名字一样,Polymerium 的主要目标是整合 Minecraft 的游戏资源,而非单单启动游戏。其使用与启动器完全不同的思路来管理游戏资源:创建实例元数据,使用部署引擎将游戏本地文件还原到元数据所描述的状态; Polymerium不维护游戏文件,只维护实例元数据。

相比于其他国产的游戏核心概念和版本隔离模式,Polymerium 以更为抽象的“游戏体验”概念和其具象表现“实例”来管理游戏。 这种方式结合了国际主流的现代化管理方式和 a little bit of personal flavor。

有关于 Polymerium 的模式请参阅核心概念

Why another launcher?

这不是 launcher,也不是压缩毛巾,这是 Polymerium —— 游戏实例管理器。 初衷是在用 PrismLauncher 的时候遇到一些问题并想出一些改进的的方法,不过在写代码、与 forge installer 斗智斗勇的过程中已经忘记哪些改进了(囧。现在要回答这个问题的话,那么答案是:没有为什么,小孩子不懂事写着玩的。

跨平台

跨。跨了 Windows 10 和 Windows 11 两个“平台”。

使用以下技术栈和工具构建

  • C#
  • dotnet
  • WinUI3
  • WindowsAppSDK
  • Rider
  • VisualStudio
  • VisualStudioCode

Features

  • 🎨 Fluent Design & WinUI3
  • 💾 增量部署,使用软链接节省硬盘空间
  • 🎭 支持多账号且账号与实例绑定
  • 🎟️ 多种在线仓库,与 CurseForge 和 Modrinth 集成
  • ☕ 运行时智能选择 Java 版本

安装使用

下载

Microsoft Store

开启 Windows 开发者模式

由于部署采用了 Symbolic Link,该功能需要管理员权限。 Windows 没有为打包的应用提供管理员权限申请能力,但提供了 开发者模式 来降低创建软连接的特权要求。

Windows 10

设置 👉 更新和安全 👉 开发者选项 👉 开发人员模式

Windows 11

设置 👉 系统 👉 开发者选项 👉 开发人员模式

其他系统或其他 Windows

不需要。只有 Windows 需要在创建软连接时提供管理员权限,也只有 Windows 10+ 才能使用 WinUi3 打包应用。

配置

开箱即用。

添加实例

目前仅支持创建原版实例(并在随后的实例配置页面添加 Mod Loader)或导入 Modrinth,CurseForge 整合包。

导入整合包

下载整合包文件,拖动到导入页面的 DragDrop 面板,根据向导添加。

导出整合包

目前只支持导出在线包格式,不支持类似 BBSv2 这种 CurseForge Pack 改的离线包格式,在未来也不会支持。

Roadmap

  • 创建该项目
    • 起名字
    • 创建 Git 项目仓库
    • 在目录里随处撒上魔术粉
  • 实例管理
    • 从空模板创建
    • 导入
      • 导入预览对话框
      • Poly-Pack
      • CurseForge
      • Modrinth
      • MMC-Pack
    • 导出为 Poly-Pack
  • 实例操作
    • 备份与还原
    • 内置副产品管理(游戏模组资源包着色器包等称为 Resource,抽象;当其作为文件存在于游戏目录称为 Asset,只读;当其存在元数据中成为 Attachment,只读可固化为 Asset;游戏过程中产生的文件成为 Byproduct,可写且不断变化)
      • 服务器查看与预览
      • 存档查看与预览
  • 账号管理
    • 账号提供方
      • Microsoft 账号登录
        • 设备码添加账号
        • 可用性检查与刷新
      • authlib-injector 账号注入
    • 无网模式
  • 部署引擎
    • 基于 Iterator 模型
    • 香草安装
    • 加载器安装
      • Forge
      • NeoForge
      • Fabric
      • Quilt
      • Trident Storage
    • 固化与还原
    • 基于文件池
  • 还原引擎
    • 基于 Iterator 并发模型
  • 发射引擎
    • 基于 Iterator 模型
  • 下载引擎
    • 基于 Iterator 模型(错误的,什么都往这个模型套是过度设计,除了部署引擎本身就是串行的,其他引擎都是并行的,套到迭代器这种串行模型上面就是错误设计。真正的问题仅需 Parallel.ForEach(x => DownloadAsync(x)) 甚至 Task.WaitAll 就能解决。但我还是要在未来实现它,因为并行工作用串行收集结果很优雅~)
  • 资源仓库
    • CurseForge
      • 整合包
      • 模组
      • 资源包
      • 着色器包
    • Modrinth
      • 整合包
      • 模组
      • 资源包
      • 着色器包
  • 搜索
    • 搜索中心
      • 互联网资源搜索
      • 导入在线整合包
      • 添加在线资源到本地实例
      • 收藏合集:为一个(新)实例添加一系列资源,用以对公共整合包快速个性化
  • 软件设置
  • 游戏实例设置
    • 元数据编辑
    • 私有启动配置页面
  • 本地化

更多细节请在 Issues 中查询。

隐私与数据收集

Polymerium 没有遥测。

但会在部分保存或导出的数据文件中包含隐私数据,其中包括:

  • 你的用户名:被包含在日志和临时文件中,通过 Home 目录暴露
  • 你使用的操作系统类型:被包含在日志和临时文件中,且仅有唯一的值 Windows

上面有提到你的账号信息吗?没有,因为这部分信息不被保存在公共区域。

资料和参考

十分感谢以上作者和所著文章。

吐槽

  • Minecraft 官方的 Meta Launcher Api 给出的数据是多态模型
  • CurseForge Api V1 不在文档中标注可能为 null 的数据
  • Modrinth Api V2 不在文档中标注可能为 null 的数据,且不提供 V3 文档
  • PrismLauncher 的 Meta Launcher Api 定义了一系列 "Component",但每个 Component 都有自己独特的数据结构:他们只是看起来相似,在某些地方,例如对 rules[].os 的定义,是不同的

License

Distributed under the MIT License. See LICENSE.txt for more information.

Stats

Alt

polymerium's People

Contributors

d3ara1n avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

spaceicality

polymerium's Issues

[Feature] 基于文件池和符号链接的还原引擎

当下遇到的问题
没遇到问题,就是别人有的我也得有

改善的方法
还原时将附件分为可再生和不可再生。可再生附件意为只读且可从互联网下载的文件,不会被还原到实例目录而是单独的集中目录,并在实例对应位置创建符号链接。

[Feature] 实例元数据查看和附件添加

改善的方法
元数据页面懒加载,除了组件以外,还有模组光影等需要解析的板块,展示附件中包含的资源。像组件一样,资源可以有添加和移除按钮。板块应该具有展开和折叠能力,以便展示大量数据。

[BUG] 账号刷新操作无法起作用

问题描述
账号失效后通过刷新账号依旧无法通过游戏内账号验证

关联的实例
(可选,非启动错误请留空)

  • Minecraft: [e.g. 1.18.2]
  • Forge: [e.g. 40.20]
  • Fabric/Quilt: [e.g. 0.14.17]

期望的结果
没有该错误时程序的运行结果。

截图
(可选)

版本

  • Windows OS: Windows11 22H2
  • OS Build: 22621
  • Polymerium: 0.5以及之前

附加描述
认为对解决该问题有帮助的其他信息。

[Feature] PolylockData.Builds 功能

当下遇到的问题
PolylockData 作为静态状态缺乏动态生成或基于现有文件的文件生成能力。

改善的方法

"PolylockData.Builds": [
      {
        // 反序列化应支持多态
        // 多个条件通过 MultiCondition 实现
        "condition": {
             "type": "FileNotPresentCondition"
        }
        "tasks": [
            "task1",
            "task2"
        ]
    }
],
"PolylockData.Tasks":[
    {
        "id": "task1",
        "command": "java",
        "args": [],
        "envs": []
        // 不需要在 Task 中描述依赖关系,该数据是由代码生成,依赖关系更容易体现在列表的先后关系中。
    }
]

[Feature] 改进的 LocalRepositoryService

当下遇到的问题
自维护且缺乏统一管理的本地文件无法做文件防碰撞和文件哈希化。

改善的方法
使用 LocalRepositoryService: IRepositoryService 来定义池化的文件对象服务。通过数据库记录文件哈希和元数据,文件本体保存在local/objects/{hash[..2]}/{hash}

附加描述
能把网络文件缓存也由 IRepositoryService 代理实现吗?

[Feature] 将实例导出为整合包

改善的方法
导出实例和元数据到常规的整合包文件

附加描述
Curseforge Pack 要求附件内容中属于 Curseforge 的能作为元数据导出,而其他部分例如 Modrinth 导入的整合包是一个文件下载链接,Curseforge Pack 支持元数据中添加远程文件链接吗?全用 overrides 导入最终文件就太大太低效了。那有没有一种支持 Curseforge Pack,支持 Modrinth Pack 的整合包格式呢?有的!Polypack 中的元数据使用 poly-res 定义,能够引用 Curseforge 和 Modrinth 甚至是一个文件下载链接,而 poly-res 中的 local@file 部分直接作为 overrides 添加即可。

[Feature] 搜索条

当下遇到的问题
顶部搜索条就是个摆设。

改善的方法
提供顶部 SearchBar 快速定位本地实例和引导到搜索中心(#4,当前版本不需要实现)。

[Feature] 实现对启动后游戏的信息跟踪

改善的方法
即 managed 模式,托管游戏进程,重定向日志,记录游戏时间

附加描述
这个功能只有重定向日志是有意义的,而日志可以通过使用 Shell 运行进程来打开终端事实查看。日志处理查看游戏有没有卡死也没别的作用,对于整合包制作者有用的是错误辅助性定位功能(不好做)。没有人会需要一个伴随着游戏运行占用五百兆说不定还会随着游戏崩溃一起崩溃的软件。

[Feature] 主页导航栏使用悬浮预览功能

当下遇到的问题
自带的 Tooltip 有 bug,且提供过少信息

改善的方法
鼠标悬浮将弹出预览框,可展示部分有关实例的信息,右键将预览框展开,查看详细信息

[Feature] 支持 Forge 安装

当下遇到的问题
缺乏 forge 和使用 forge 的整合包支持/

改善的方法
实现 ForgeComponentInstaller

附加描述

  • #1
  • 友善的 forge
  • 不那么友善的 forge 版本(该选项改为可选实现)

[Feature] 正版账号登录

当下遇到的问题
缺乏授权账号登录。

改善的方法
账号类型新增微软账号,移除离线账号。将离线账号用于从正版账号派生(AsOffline)并仅用于刷新账号信息失败时作为可选项。

附加描述

  • 添加微软账号
  • 启动时校验可用性

[Feature] 重新设计的 Resource 模型

当下遇到的问题
资源模型具有多重定义,应该整合为一个普适模型。

附加描述
来自资源仓库的模型定义:适用于互联网资源,具有大量面向用户的展示信息。
来自资源解析的模型定义:能提取出前者用于展示的信息,也能提取出包含哈希的文件信息。
资源解析和资源仓库实际都是位于互联网上的资源,前者额外包含纯文件资源。

[Feature] 下载中心

当下遇到的问题
搜索中心未上线。

改善的方法
添加下载中心检索和下载能力。

附加描述
使用扩展的 JobManager 和任务页面来查看下载中的资源和进度。View 和 ViewModel 的生命周期不稳定,下载任务需要外部的 JobManager 来保持。

目标

  • #9
  • Modpack
    • 导入为新实例
  • Resource
    • Mod
    • Resourcepack
    • Shader
    • 添加到收藏
    • 添加到实例

[Feature] 提前告知实例是否需要还原

改善的方法
在实例页面的运行按钮下根据是否需要还原情况显示“需要还原”和“准备就绪”字样。

额外信息
这一步需要检测本地文件属于IO操作,同时定位 Reference 也是IO操作,那么能不能为实例页面的 Header 栏目添加UI反馈以便支持该功能和 Reference 定位。

[BUG] 实例解析本地文件资源(local@file)失败

问题描述
导入整合包,删除实例,并再次导入相同整合包后还原该实例,会在解析实例附件的本地文件部分时随机地错误应用被删除的实例的 ID。

关联的实例
(可选,非启动错误请留空)

  • Minecraft: [e.g. 1.18.2]
  • Forge: [e.g. 40.20]
  • Fabric/Quilt: [e.g. 0.14.17]

期望的结果
所有本地文件资源解析到正确的同一个实例 ID。

截图
(可选)

版本

  • Windows OS: Windows11 22H2
  • OS Build: 22621
  • Polymerium: 0.1-3.2

[BUG] 1.16.5 + forge 启动报错

问题描述
1.16.5 版本在添加 forge 组件(全版本未测,随机抽的版本都有问题)时启动会在完成 ForgeWrapper 预处理进入游戏流程后报错。

关联的实例
(可选,非启动错误请留空)

  • Minecraft: 1.16.5
  • Forge: 36.2.39
  • Fabric/Quilt: [e.g. 0.14.17]

期望的结果
正常启动

截图
(可选)

版本

  • Windows OS: Windows11 22H2
  • OS Build: 22621
  • Polymerium: 0.1 - 0.3.2

[Feature] 元数据的引用源锁定

改善的方法
实例元数据页面新增整合包板块用于显示引用源信息。引用源的存在会锁住组件和附件两个板块。

任务

  • 元数据中查看引用源的信息
  • 根据引用源检查版本
  • 解锁

[Feature] 游戏文件管理

当下遇到的问题
缺少对游戏文件的管理能力。

改善的方法
实现GameManager 和 InstanceView 中的功能。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.