このページでは、MahjongPaper を Paper/Folia サーバーへ導入し、最初のゲームルームと卓を作成するまでを説明します。
対局規則は別ページです:リーチ麻雀 · 国標麻雀 · 四川麻雀
| 項目 | 要件 |
|---|---|
| Java | Java 21 以上 |
| サーバー | Paper または Folia。配布物の開発基準は Paper 1.20.1、api-version: 1.20 |
| 必須プラグイン | CraftEngine 26.7 以上 |
| 任意プラグイン | InvSync 2.x |
| クライアント | バニラ互換。専用 Mod は不要 |
CraftEngine は、麻雀牌アイテム、卓と席の furniture hitbox、操作イベント、culling、リソース配信を担当します。CraftEngine が存在しない、26.7 より古い、または必要 API と互換性がない場合、MahjongPaper は正常に起動しません。
InvSync は必須ではありません。InvSync を導入しない場合も、既定の H2 データベースで段位 profile を保存できます。現在、対局結果から段位と個人統計を自動更新するのは、4 人の人間プレイヤーによるリーチ対局だけです。
通常のサーバー運用では、リリースで提供される universal plugin JAR を使用してください。現在の universal JAR には、GB-Mahjong 用の Linux x86_64、Windows x86_64、macOS x86_64 向け native library がまとめられています。
sourcesと付いた JAR:ソース閲覧用。サーバーへ導入しません。devと付いた JAR:開発用。通常運用には使用しません。- platform JAR:特定 OS 用。配布元が明示した用途以外では universal JAR を優先します。
Windows 用 native library には、必要に応じて libwinpthread-1.dll も JAR 内に含まれます。公式配布物を利用するサーバー管理者が CMake や MinGW を別途用意する必要はありません。
サーバーを停止した状態で、次のファイルを plugins ディレクトリへ配置します。
plugins/
├── CraftEngine.jar # 必須、26.7 以上
├── MahjongPaper.jar # 必須
└── InvSync.jar # 任意
AntiGriefLib、sparrow-heart、sparrow-reflection、sparrow-yaml など、MahjongPaper が内部または Paper のライブラリローダー経由で利用するライブラリを、サーバー管理者が個別のサーバープラグインとして追加する必要はありません。
- Java 21 以上でサーバーを完全起動します。
- CraftEngine が先に有効化され、その後 MahjongPaper が有効化されたことをコンソールで確認します。
plugins/MahjongPaper/config.ymlが生成されたことを確認します。plugins/CraftEngine/resources/mahjongpaperが生成されたことを確認します。- CraftEngine 側でリソース pack を生成し、クライアントへ正しく配信します。
- 管理者として参加し、ゲームルームを作成します。
生成設定の原型は config.template.yml です。依存関係の宣言は plugin.yml と paper-plugin.yml で確認できます。
ゲーム内メッセージは、プレイヤーの Minecraft クライアント locale を自動的に使用します。クライアントが日本語なら、通常は ja-JP bundle が選択されます。サーバー共通の言語を設定する項目はありません。
次の内容は翻訳せず、そのまま入力してください。
/mahjong以下のコマンドMAJSOUL_HANCHAN、GB、SICHUANなどのモード IDm1、p9、red_dragonなどの牌 IDdatabase.connection.typeなどの設定キー
設定ファイル内の説明コメントは、現時点では英語・簡体字中国語・繁体字中国語のみです。
既定では起動時に次の場所へ bundle が出力されます。
plugins/CraftEngine/resources/mahjongpaper
主な内容:
pack.yml
configuration/items/mahjong_tiles.yml
resourcepack/assets/mahjongcraft/...
牌や卓が正しく見えない場合は、次の順に確認してください。
- CraftEngine 26.7 以上が有効か。
mahjongpaperbundle が生成されたか。- CraftEngine が resource pack を正常にビルドしたか。
- クライアントが resource pack を受信・適用したか。
/mahjong renderで卓を再描画できるか。/mahjong inspectで anchor と向きを確認できるか。
既定設定ではデータベースが有効で、接続方式はローカル H2 です。
database:
enabled: true
connection:
type: h2H2 は小規模サーバーや単一サーバー運用に適しています。共有 DB、外部バックアップ、長期運用が必要なら、database.connection.type を MariaDB または MySQL に変更し、接続先と認証情報を設定します。
SQL が有効で正常な場合に MahjongPaper が管理するデータ:
- 永続卓
round_historyrank_historyplayer_rank_modeのローカル段位、または InvSync 使用時の非権威投影- モード別ランキング投影
InvSync を利用しても、永続卓や履歴、ランキング投影を SQL から移動してはいけません。
- 卓 ID と位置
- 卓主
- ゲームモード
- 卓のルール設定
- 進行中の手牌
- 牌山と王牌
- 現在点数を含む進行中の試合状態
- 鳴き・ロンの反応待ち
- 行動タイマー
再起動後、プレイヤーは再度着席・準備して新しい試合を開始します。
InvSync 2.x が有効で API 互換なら、InvSync はオンラインプレイヤーの段位 profile を主データとして保持します。現在の自動更新対象は、4 人の人間プレイヤーによる RIICHI の完了対局だけです。GB と SICHUAN の selector は既存または移行済みデータを読めますが、そのモードの対局から自動更新されません。
ranking:
enabled: true
playerStorage:
invSync:
enabled: true
fallbackToDatabase: truefallbackToDatabase: true の既定方針では、SQL backend が有効かつ正常な場合に限り、次の場合に切り替わります。
- InvSync がインストールされていない
- InvSync または連携設定が無効
- 起動時の API probe に失敗した
- addon callback 中に API 非互換や実行時エラーが発生した
SQL が無効または初期化に失敗した場合、段位 backend は UNAVAILABLE です。既定の database.failOnError: false はデータベース失敗後もプラグインを起動しますが、その状態では永続化されません。牌卓、履歴、段位の保存を必須にする本番サーバーでは database.failOnError: true を推奨します。
InvSync を意図的に使用しない場合は、ranking.playerStorage.invSync.enabled: false にします。fallbackToDatabase: false の状態で InvSync を利用できないと、段位 backend は UNAVAILABLE になります。通常の本番環境では推奨しません。
公開 addon API では、MahjongPaper のデータを InvSync の onSave callback 中に書き込みます。段位を更新した後、次の InvSync 保存より前にサーバープロセスが異常終了すると、その更新がまだ永続化されていない可能性があります。
- InvSync の auto-save を有効にする
- InvSync の world-save を有効にする
- 自動保存間隔を適切に短くする
- SQL のランキング投影は監査に利用しても、InvSync へ自動で逆流させない
InvSync の公開 offline API を直接利用するには、その API JAR の型を継承する必要があります。このリポジトリは提供されていない Maven 座標や API class を捏造・同梱しません。そのため InvSync backend の /mahjong rank は、既に同期済みのオンラインプレイヤーに限られます。
backend はプラグイン起動時に選択されます。InvSync の有効/無効や fallback 方針を変更した場合は、/mahjong reload ではなくサーバーを完全再起動してください。
詳細は InvSync プレイヤー段位接続ガイド を参照してください。
既定ではゲームルーム外に新しい卓を作成できません。まず管理者権限 mahjongpaper.admin を確認します。
/mahjong room wand
- 部屋の一方の角を左クリックします。
- 反対側の角を右クリックします。
- シアン色の particle 枠が、プレイヤーと卓の表示高さまで覆っているか確認します。
- ゲームルームを保存します。
/mahjong room create main-hall メインホール
/mahjong room info main-hall
- そのルーム内に立ち、卓を作成します。
/mahjong create
選択範囲がない状態で実行すると、現在位置と gameRooms.defaultRadius / gameRooms.defaultHeight を使います。
/mahjong room create quick-room
/mahjong create
- 東・南・西・北の席ラベルをクリックして着席します。
- 足りない席は卓主または管理者が
/mahjong addbotで補えます。 - 各プレイヤーが自分の席ラベル、または
/mahjong startで準備します。 - 4 席が埋まり、全員が準備すると自動的に開始します。
卓を作成したプレイヤーは卓主になりますが、自動着席はしません。卓主は /mahjong table から、モード、ルール、Bot、再描画、開始、削除を管理できます。
| 変更内容 | 推奨操作 |
|---|---|
| 通常のルール・表示設定 | /mahjong reload |
| CraftEngine bridge の再構築 | /mahjong reload、解決しなければ完全再起動 |
| MahjongPaper JAR の交換 | 完全再起動 |
| CraftEngine 本体の交換 | 完全再起動 |
| Paper/Folia または Java の変更 | 完全再起動 |
| resource pack 生成方式の変更 | 完全再起動 |
| InvSync backend / fallback 方針 | 完全再起動 |
対局中の設定変更は、現在の一局を途中で別ルールへ変えるものではありません。モードや主要ルールは、卓が待機状態のときに変更してください。
- Java が 21 以上か確認します。
- CraftEngine が存在し、26.7 以上か確認します。
- コンソールの API compatibility probe エラーを確認します。
sources/devJAR を誤って入れていないか確認します。
- 公式 universal JAR を使用しているか確認します。
- コンソールで GB-Mahjong native library のロード失敗を確認します。
- OS と CPU architecture が配布物の対象か確認します。
mahjongpaper.admin権限を確認します。gameRooms.restrictNewTables: trueなら、ゲームルーム内に立っているか確認します。/mahjong room info <id>で world と範囲を確認します。
ranking.enabled: trueを確認します。- SQL backend なら、データベース接続を確認します。
- InvSync backend なら、そのプレイヤーがオンラインで同期済みか確認します。
- InvSync が利用不能で
fallbackToDatabase: falseなら、backend はUNAVAILABLEです。
- CraftEngine bundle と resource pack を確認します。
/mahjong renderを実行します。/mahjong inspectで表示 anchor と方向を確認します。- 保護プラグインが家具操作を拒否していないか確認します。
画面中央の 「席に戻る」 を選びます。操作できない場合だけ Shift を押して復帰してください。サーバーバージョンが必要な camera entity と非互換なら、俯瞰表示は利用不可として案内されます。