10/13 0:00 に、日本の借金を返すマイクラサーバー「DebtCraft」をオープンした。初日にやったのは、遊びやすくするための細かい調整。
入れたもの
| プラグイン | 役割 |
|---|---|
| DiscordSRV | ゲーム内チャットとDiscordのチャンネルを双方向につなぐ |
| LunaChat | ローマ字で打つと日本語に変換する(konnichiha → こんにちは) |
| GSit | /sit で座る、階段を右クリックで座る |
サーバーは itzg/minecraft-server の Docker で動かしているので、compose.yml の MODRINTH_PROJECTS に名前を足すだけで入る。ただし LunaChat は Modrinth の対応バージョンが 26.1.2 までで、自動選択だと 26.2 で弾かれる。jar の URL を PLUGINS に直接書いて入れた。
チャットがDiscordに流れない、その1:ボットの権限
DiscordSRV の起動ログはこうだった。
Could not send message in channel TC:🎮|ゲーム内チャット because the bot does not have the "Read Text Channels & See Voice Channels" permission
ゲーム内チャットのチャンネルは「国民」ロールにしか見えない設定にしてある。チャット用のボットにも、チャンネルの権限で「チャンネルを見る」を明示的に許可したら、このエラーは消えた。
その2:GriefPreventionのスパム対策
エラーは消えたのに、まだ流れない。ゲーム内ではこう出ていた。
Sorry, but you have to move a little more before you can chat. We get lots of spam bots here.
GriefPrevention(土地保護プラグイン)が、ログインして少し歩くまで発言を「本人にしか見えない状態」にしていた。他の人に届かない発言なので、DiscordSRV にも渡らない。
うちはDiscordのボットでホワイトリスト登録をしていて、スパムボットはそもそも入れない。config で Spam: Enabled: false にした。
その3:DiscordSRVがLunaChatの「チャンネル」を待っていた
最後が一番わかりにくかった。ログにこう出ている。
[DiscordSRV] Enabling LunaChat hook
DiscordSRV は LunaChat を見つけると、チャットの受け取りを LunaChat の「チャンネル」経由に切り替える。でも、うちは LunaChat のチャンネル機能を使わず、普通の全体チャットで話している。その結果、DiscordSRV はどの発言も拾えていなかった。
DiscordSRV の config でこの連携を切ったら、ようやく流れた。
DisabledPluginHooks: ["LunaChat"]
変換は LunaChat が先に済ませるので、Discord にも「konnichiha (こんにちは)」の形で届く。
DiscordSRVの日本語化
Discord に流れる「joined the server」などの文面は、config.yml の ForcedLanguage: ja だけでは変わらなかった。ゲーム内(RCON)で次を実行すると、設定ファイル一式が日本語版で作り直される。
discord lang ja -confirm
元の設定ファイルは Japanese.config.yml のような名前で残るので、トークンやチャンネルIDをそこから移し直した(ファイル名の頭は English ではなく Japanese だった)。
ついでに:ゲームルールの名前が変わっていた
PvP をオフ、キープインベントリをオンにしようとして gamerule keepInventory true を打ったら、26.2 では名前が変わっていた。今は keep_inventory のような小文字+_ の形。オーバーワールド・ネザー・エンドで別々なので、execute in minecraft:the_nether run gamerule ... で3回設定した。
OP を持たずに遊んでいるので、こういう設定は全部 docker exec survival rcon-cli "..." で打っている。