本文へ移動
ch1w4

www.ch1w4.com / blog / debtcraft-test-server-public-works

マイクラのテスト鯖を作って、公共事業を「人が建てる」流れにした(DebtCraft)

#minecraft#debtcraft#proxmox#discord

DebtCraft は自作のPaperプラグインで動いている。新しい機能を入れるたびに本番のサバイバルを再起動していたけど、人が増えてきて、毎回落とすのがつらくなってきた。そこで、まずテスト鯖を作った。

テスト鯖(mctest01)

置き場所は、検証用の VLAN50。本番の mc01(マイクラ専用ノード)と CPU を取り合わないよう、別のノードに VM を作った。

DB は、本番の DB を丸ごとコピーして、テスト鯖の中の PostgreSQL に入れた。テストで返済や税金をいくら入れても、本番の借金時計や長者番付には影響しない。

DB サーバー(db01)は LXC なので、root で SSH には入れない(Debian の初期設定で、root のパスワードログインが禁止されている)。Proxmox のホストから pct exec で中の pg_dump を動かして書き出した。

pct exec 2040 -- su - postgres -c "pg_dump --no-owner --no-privileges -d debtcraft" > debtcraft.sql

管理用の VLAN99 から VLAN50 へは通れないようにしてあるので、Proxmox のホストから直接は送れず、PC を経由して運んだ。管理用 VLAN をほかから切り離す、という意味では正しい動きだった。

PC には deploy-test.ps1 を置いた。gradlew build → テスト鯖に jar を送る → 再起動 → ログ表示 までを1回でやる。本番用の deploy-prod.ps1 は、最初に確認を出して y のときだけ進み、ゲーム内に「30秒後に再起動します」と流してから入れ替える。

途中、Gradle が「JVM 17 以上が必要です」と止まった。PowerShell の環境では Java 8 が使われていたのが原因で、~/.gradle/gradle.properties に org.gradle.java.home で Java 25 を指定して直した。ほかのアプリが使う Java は変わらない。

公共事業を「人が建てる」流れに(0.13.0)

これまでの公共事業は、みんなで建材を集めきると、自動でストラクチャーが置かれて完成していた。せっかく集めた建材なのに建物が決まった形になるので、建築が好きな人に建ててもらう流れに変えた。

運営が始める → みんなで建材を集める → 集まりきる(建設中)
  → 施工者に通知・建材を受け取る → 建てる → 完成報告
  → 運営が見に行って OK なら完成 → 全体に告知・施工者に報酬

Discord には「🏗️ 建設課」ロールを作り、総理大臣(自分)だけが使える /建設課 追加・削除・一覧 を足した。一覧 で建設課の人のマイクラの名前が分かるので、施工者を決めるときに使う。官報で建設課の募集も出した。

/bal・/pay が使えなかった

プレイヤーから「/pay が使えない」と言われた。EssentialsX のコマンドの権限が、LuckPerms の default グループに付いていなかった。

docker exec survival rcon-cli lp group default permission set essentials.pay true

/bal・/bal 名前・/baltop も同じように付けた。あわせて、Discord のコマンド集に「/pay の金額は数字だけ(10億 は使えない)」「統合版の人に渡すときは名前の前に .」を書き足した。

Geyser は版を固定した

同じ日に、統合版の人が入れなくなる問題も起きた。原因は別のところにあったけど(入口をOracleに移した話を参照)、調べる途中で、Geyser が latest 指定のせいで再起動のたびに勝手に新しい版になっていることに気づいた。新しい版に問題があることもあるので、今動いている版の番号で固定した。上げるときは、テスト鯖で確かめてからにする。