server-icon.png:厳密な要件と、誰も使っていない管理API
64x64、PNG、サーバールート直下 — この3つのうちどれか1つでも間違えると、アイコンはエラーも出さずに表示されません。さらに、コンソールの画面スクレイピングに取って代わったJSON-RPC管理APIについて。
サーバーアイコンは、Minecraftの中で最も寛容でない小さな機能です。なぜなら、失敗の仕方がどれも同じに見えるからです。アイコンが出ない、エラーも出ない。
3つの要件、すべて必須
- ちょうど64×64ピクセル。 63でも128でもダメ。サーバーはリサイズしません。
- PNG形式。 実際にPNGであること。JPGの拡張子を変えただけではダメ。
- ファイル名は
server-icon.png、サーバールート直下 —server.propertiesの隣に置くこと。ワールドフォルダの中ではいけません。
どれか1つでも間違えると、サーバーは正常に起動し、デフォルトのアイコンを表示します。サイズが違う場合や、実はPNGでないファイルの場合は、起動時に1行だけログが出ます — Couldn't load server icon — しかし、名前や置き場所が間違っている場合は何もログに出ません。(server-icon.pngがまったくない場合、サーバーはワールド自身のicon.pngがあればそれにフォールバックします。)
他にも壊れる原因
- インターレースPNG。 一部のエディタはデフォルトでインターレースで保存しますが、Minecraftのリーダーはこれを拒否します。非インターレースで再エクスポートしてください。
- 16ビット色深度。 チャンネルあたり8ビットで保存してください。
- カラープロファイル。 埋め込まれたICCプロファイルがパーサーを稀に引っかけることがあります。エクスポート時にメタデータを削除してください。
- 透過は問題ありません。サーバーリストで正しく描画されます。
サーバーは一度しか読み込まない
サーバーは起動時にserver-icon.pngを読み込み、それ以降は読み込みません。稼働中のサーバーでファイルを差し替えても、再起動するまで何も変わりません — だからこそ、再起動せずにアイコン変更をテストすると、「効かなかった」と確信してしまうのです。再起動後、クライアントは次回のサーバーリスト更新時に新しいアイコンを取得します。
管理API
最近のサーバーバージョンはJSON-RPC管理インターフェースを公開しており、これがコンソール出力のパースやプラグインの追加に代わる公認の手段です。
server.propertiesで有効化します:
management-server-enabled=true
management-server-host=localhost
management-server-port=25585
management-server-tls-enabled=false
TLSはデフォルトでオンで、キーストア(management-server-tls-keystore)が必要です。なので、キーストアを指定するか — localhost限定で — 上記のようにオフにするかです。TLSがオンでキーストアがない場合、管理サーバーは起動しません。ポートにもデフォルトはありません(25585はあくまで一例です)。
次に、そのポートへWebSocketを開き、server.propertiesのmanagement-server-secretをAuthorization: Bearer <secret>として送信し、JSON-RPCで通信します:
{ "jsonrpc": "2.0", "id": 1, "method": "minecraft:players" }
メソッドはプレイヤーリスト、サーバーステータス、許可リストとBANリスト、ゲームルール、設定、そして保存/停止のペアをカバーします。それぞれが、正規表現をかける必要のあるテキスト1行ではなく、構造化されたJSONを返します。
localhostにバインドする
デフォルトはlocalhostで、そのままにしておくべきです。このインターフェースはインターネットに公開することを想定していません — シークレットを知って到達できる人は誰でもあなたのサーバーを停止できますし、シークレットの安全性はserver.propertiesの安全性と同じでしかありません。リモートアクセスが必要な場合は、SSHトンネルか認証付きリバースプロキシ経由で公開してください。ホストを0.0.0.0に変更するのは絶対に避けてください。
なぜ重要か
ダッシュボード、Discordボット、稼働監視はこれまで、コンソールログを読むかRCONを使うことで動いてきましたが、どちらも脆いものです。型付きのAPIがあれば、ログ行のフォーマットが変わってもプレイヤー数ウィジェットが壊れることはありません。
どんな画像でも準拠したserver-icon.pngに変換し、Server Icon & API ToolsでJSON-RPCメソッドを閲覧できます。