目的
MOD入りサーバーを運営する上で、「クライアントにMODを導入してもらう」という手順がネックになる。
上記の手順を含む、MOD入りサーバー向けのランチャーを自作する。
方法
HeliosLauncherというランチャーをforkする形で実装する。
https://github.com/dscalzi/HeliosLauncher
ビルド時のパラメータ、サーバーのリソースを配置するだけで独自のランチャーが作れる。
以下のような機能を搭載している。
- ランチャーからサーバーへの接続時に、クライアントのMODの過不足をチェックし、適宜ダウンロードする
- 接続先サーバーの切り替え
- 起動時のパラメータ(メモリ等)設定
- サーバーのステータスのチェック、サーバーに接続しているユーザーの数もチェック可能
- クライアントサイドMODのon/offを任意で切り替える
0.準備
以下が必要となる。
- リソースの配布場所(S3等)
- ランチャー(インストーラ)の配布場所(サイト等)
- 固定IPのMinecraftサーバー
1.リソースの作成
クライアントにインストールするMODの一覧をリソースとして用意する。
MODのjarファイルを直接アップロードするのでなく、MODのインストール先を列挙したjsonファイル(以下distribution.json
)をS3等にアップロードする。
以下のような形で、サーバーのIPや必要なモジュール(forge等)、MODをURL付きで列挙する。
{
"version": "1.0.0",
"rss": "https://helios-files.geekcorner.eu.org/rss.xml",
"discord": {
"clientId": "1086936373057040395",
"smallImageText": "Change me through Nebula",
"smallImageKey": "big"
},
"servers": [
{
"id": "Demo-1.19.4",
"name": "Demo (Minecraft 1.19.4)",
"description": "Demo Running Minecraft 1.19.4 (Forge v45.0.9)",
"icon": "https://helios-files.geekcorner.eu.org/servers/Demo-1.19.4/Demo-1.19.4.png",
"version": "1.0.0",
"address": "localhost:25565",
"minecraftVersion": "1.19.4",
"discord": {
"shortId": "1.19.4 Demo",
"largeImageKey": "https://raw.githubusercontent.com/dscalzi/HeliosLauncher/master/build/icon.png",
"largeImageText": "forge-vanilla"
},
"mainServer": false,
"autoconnect": false,
"modules": [
{
"id": "net.minecraftforge:lowcodelanguage:1.19.4-45.0.9",
"name": "Minecraft Forge (lowcodelanguage)",
"type": "ForgeHosted",
"classpath": true,
"artifact": {
"size": 7378,
"MD5": "567726c42a1312962ffd96af646f227d",
"url": "https://helios-files.geekcorner.eu.org/repo/lib/net/minecraftforge/lowcodelanguage/1.19.4-45.0.9/lowcodelanguage-1.19.4-45.0.9.jar"
},
"subModules": [
{
"id": "1.19.4-45.0.9",
"name": "Minecraft Forge (version.json)",
"type": "VersionManifest",
"artifact": {
"size": 15497,
"MD5": "97924bf1d3bf6f2bc4acc5662a7fecc0",
"url": "https://helios-files.geekcorner.eu.org/repo/versions/1.19.4-forge-45.0.9/1.19.4-forge-45.0.9.json"
}
},
手動で作成することもできるが、HeliosLauncherの作者がdistribution.jsonの作成ツールも作ってくれているので活用する。
Nebulaは、ローカルにあるMODファイルを参照してdistribution.jsonを作成してくれるツール。
以下をcloneし、npm i
https://github.com/dscalzi/Nebula
jdkを任意のフォルダにダウンロードし、以下の通りに.env
ファイルを編集する。
JAVA_EXECUTABLE
に記述、ROOT
にはMODのjarファイル等をおくための作業フォルダを指定する。下2つはそのままでもOK。
JAVA_EXECUTABLE=C:\Program Files\Eclipse Adoptium\jdk-17.0.12.7-hotspot\bin\java.exe
ROOT=D:\TestRoot2
BASE_URL=http://localhost:8080/
HELIOS_DATA_FOLDER=C:\Users\user\AppData\Roaming\Helios Launcher
Nebulaのルートで以下を実行。ROOTに作業環境が作成される。
※powershell や vscode だとバグでMODバージョンが認識されないためcmd推奨
npm start -- init root
npm start -- generate server [server name] [Minecraft Version eg 1.12.2] --forge [forge version eg 14.23.5.2859]
作成された、作業環境\servers\{server name}
下によしなにMODファイル等を配置する。
※ファイル名に「+」が入っていると、リソース取得時のURLで「%2B」に変換されてしまうので、あらかじめほかの文字に変更すること推奨
Get-ChildItem -File | Rename-Item -NewName { $_.Name -replace "+", "-" }
(fabric は ROOT\repo\lib\net\fabricmc\sponge-mixin\0.15.4+mixin.0.8.7 が生成されるので手動でs)
配置が完了したら、以下を実行。distribution.json が作成される。
npm start -- generate distro
作業環境ごとリソースの配布先にアップロードし、準備は完了。
2.ランチャーの作成
同じく以下をcloneし、npm i
https://github.com/dscalzi/HeliosLauncher
/app/assets/js/distromanager.js
のexports.REMOTE_DISTRO_URL =
にリソースのdistribution.jsonのURLを指定。
アイコンや起動時の細かい設定等をお好みで編集。
HeliosLaunherのルートでnpm run dist
を実行し、ビルド。
インストーラを作成し、配布する。
参考
正直こちらの動画の方がわかりやすいです。
手順いくつか飛ばしているので、時間ある時に直します。
Helios Launcher Tutorial
https://www.youtube.com/watch?v=YgB9Itp3gzY