Skip to content

整合包预启动命令(Pre-Launch Command) #13

@3TUSK

Description

@3TUSK

检查项

  • 我充分理解提交的建议可能无法所有启动器作者参与,并尊重所有启动器开发者的选择
  • 我确认在Issues列表中并无其他人已经提出过与此问题相同或相似的问题
  • 我确认该反馈并非针对单个启动器的,如果是,我将会去该启动器的反馈页面反馈

您是什么类型的用户

其他

请简单的说一下您的想法

允许整合包定义一串需要在游戏启动前运行一次的命令(通过当前系统的 Shell,或者说 exec 执行),并随整合包一并导出。

它能解决什么样的问题/带来什么样的帮助

Packwiz-Installer 为代表的一些整合包制作工具提供了基于 MultiMC 的 Pre-Launch Command 实现的整合包自动更新机制,以实现「每次启动游戏时,整合包内容即自动获得更新」。

若能实现该功能,整合包自动更新便可不依赖于特定的启动器而实现,由此给予用户更大的自主权,同时方便任何有「需要短时间内快速更新整合包内容」的服主无需为此自制启动器或相关基础设施。

期望的结果

在「MCBBS 整合包格式」中允许定义一可选新字段,名称待定,其内容为当前操作系统可执行的一串命令。启动器在读取到该字段后,会在每次启动游戏前尝试执行该命令。

命令的执行可以以 Java SE 标准库中的 java.lang.ProcessBuilder 为参考标准。

命令执行时,应以环境变量(Environmental Variable)或其他形式提供一些实用信息,包括但不限于

  • 当前整合包所用 Java 运行时入口程序的绝对路径
  • 当前整合包的游戏目录,即所谓的 .minecraft 目录,或者说 gameDir
  • 当前整合包的名字

考虑到以 java.lang.ProcessBuilder 为标准的话,未必会有各种主流 Shell 支持的环境变量展开,有必要明确一套「展开占位符」的约定。

是否有对这个方案的相关链接?

附注

这个建议实际上源自历届 TeaCon 中出现的永恒难题:在参展 Mod 及其他相关资源每天都有更新的情况下,如何应对整合包版本的快速迭代。
我们在 TeaCon 2021 和 2022 中使用了自制的 RemoteSync 来解决这一问题。虽然成功解决了版本快速迭代问题,但我们随后在两届 TeaCon 中发现了由此引发的更多问题,并最终促使我们在 TeaCon 2023 转向 Packwiz。

我曾尝试过其他可能的解决方案,例如使用 Java Agent 搭配 JVM Arguments 来实现类似效果,但我不确定该方案是否最终在 TeaCon 2023 中实装。

利用 Java Agent 的 premain 来更新整合包的想法并非只有我尝试过:在 ModFest 主办的 BlanketCon 23 中,其展示服务器客户端便使用了 unascribed 的 unsup 来实现整合包随游戏启动自动更新,原理即 Java Agent。

抄送 @ustc-zzzz

题外话:「MCBBS 整合包格式」有没有正式的名字和文档?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions