コンテンツにスキップ
🛠️ OP・運営向けページ — 運営スタッフ向けの導入・設定情報です。遊び方は 👤 プレイヤー向けページ をご覧ください。

Tutorial2 ― OP・運営ガイド

Tutorial2 の導入手順、データファイル(userdata.yml)、管理コマンド、権限(OP判定)、トラブルシューティングをまとめます。

基本情報

項目
プラグイン名 Tutorial2
バージョン 1.0
api-version 26.1.2
main com.example.tutorial2.Tutorial2
メインコマンド /tutorial <subcommand>
依存プラグイン なし(/gs give のステップは GlobalStorage 系プラグインの存在を前提)
データファイル plugins/Tutorial2/userdata.yml
config.yml 生成・参照されません(プラグイン側に設定項目はありません)
権限 tutorial.admin(既定 op)― /tutorial paper / /tutorial skip に必要

起動時の動作

onEnableTutorialManager が初期化され、userdata.yml を読み込みます。/tutorial コマンドの登録と、進行判定用のイベントリスナー(参加・右クリック・ワールド変更・コマンド実行・破壊・拾得・かまど抽出・クラフト)が登録されます。停止時 (onDisable) には userdata.yml を保存します。

導入手順

  1. ビルドした Tutorial2-1.0.jar をサーバーの plugins/ フォルダに配置する。
  2. サーバーを起動すると plugins/Tutorial2/ フォルダと userdata.yml(プレイヤーが進行を始めた時点で)が生成される。
  3. ステップ3(資源ワールド到達判定)が動作するためには、ワールド名が S1 の資源ワールド が存在する必要があります。Multiverse 等で資源ワールドを作る場合は、ワールド名を S1 にしてください。
  4. ステップ4(共有倉庫入手)が動作するためには、/gs give コマンドが実行可能なプラグイン(GlobalStorage 系)が導入されている必要があります。

ワールド名・依存コマンドはハードコード

判定対象のワールド名 S1、共有倉庫の入手コマンド /gs give、リスポーン用コマンド /spawnソースコード内に固定値として記述 されています。サーバー側のワールド名/コマンドが異なる場合、該当ステップで進行が止まります。変更にはプラグインの再ビルドが必要です。

パスワードはコード内に直書き

最終ステップで要求されるパスワードは TutorialCommand クラス内に PASSWORD = "20240526" として ソースコードに直書き されています。変更したい場合はソースを書き換えて再ビルドしてください。config.yml では変更できません。

userdata.yml の構造

プレイヤーごとの現在ステップを保存します。プラグインが自動で読み書きするため、原則として手動編集は不要です。

キー 説明
<UUID> プレイヤーのUUID(文字列)。値はそのプレイヤーの現在ステップ番号(整数)

ステップ番号の対応は以下の通りです。

番号 定数 目標
0 STEP_NONE 未開始
1 STEP_1_USE_PAPER 紙の使用待ち
2 STEP_2_READ_BOOK ルールブックの確認待ち
3 STEP_3_ENTER_S1 S1への移動待ち
4 STEP_4_GS_GIVE /gs give 実行待ち
5 STEP_5_SPAWN /spawn 実行待ち
6 STEP_6_GET_LOG 原木入手待ち
7 STEP_7_CRAFT_WORKBENCH 作業台クラフト(達成時にパン64個ボーナス)
8 STEP_8_CRAFT_STICK 棒クラフト
9 STEP_9_CRAFT_WOOD_PICKAXE 木のツルハシ
10 STEP_10_GET_COBBLESTONE 丸石入手
11 STEP_11_CRAFT_STONE_PICKAXE 石のツルハシ
12 STEP_12_CRAFT_STONE_SWORD 石の剣
13 STEP_13_CRAFT_FURNACE かまど
14 STEP_14_GET_IRON_ORE 鉄鉱石入手
15 STEP_15_GET_IRON_INGOT 鉄インゴット入手(かまど抽出)
16 STEP_16_CRAFT_IRON_PICKAXE 鉄のツルハシ
17 STEP_17_HELMET 鉄ヘルメット
18 STEP_17_CHESTPLATE 鉄チェストプレート
19 STEP_17_LEGGINGS 鉄レギンス
20 STEP_17_BOOTS 鉄ブーツ(ここで「鉄装備一式完了」)
21 STEP_18_CRAFT_SHIELD
22 STEP_19_GET_DIAMOND ダイヤモンド入手
23 STEP_20_CRAFT_DIAMOND_PICKAXE ダイヤのツルハシ
24 STEP_21_PASSWORD パスワード入力待ち
999 STEP_COMPLETED 完了

ステップ番号と内部定数のズレ

内部定数名 STEP_17_*(4種)や STEP_18_*STEP_21_* の名前は 元設計時の論理ステップ番号 をそのまま残しているため、実際の整数値(17〜24)とはズレています。userdata.yml の値は 上表の整数値 で判定されます。

データのバックアップ

userdata.yml はプレイヤーごとの進行状況のみを保持します。誤って削除すると、進行中のプレイヤーは「未開始」状態となります(初回参加判定 hasPlayedBefore() は Minecraft 側の参加履歴を見るため、再度自動開始はしません)。バックアップを推奨します。

管理コマンド

コマンド 権限 説明
/tutorial open 全員 配布された紙の代わりに使用。最初のステップならルールブックを配布、それ以外は現在の目標を再表示
/tutorial paper tutorial.admin(op) 「チュートリアル開始」の紙を再発行(OP の再配布用)
/tutorial password <pass> 全員 最終ステップでパスワードを照合(正解で完了、エメラルド10付与)
/tutorial skip [プレイヤー名] tutorial.admin(op) 対象プレイヤーのステップを 1段階だけ 進める(報酬なし)。プレイヤー名省略時は自分が対象

/tutorial skip の挙動

skipStep は現在ステップから内部マップで定義された 次のステップへ 1 段階のみ進めます(一気に完了させる機能はありません)。報酬・ボーナス(エメラルド/パン64個)は付与されず、対象プレイヤーには [スキップ] 管理コマンドによりステップをスキップしました。 のメッセージと、新しい目標が表示されます。鉄装備一式のように内部ステップが連続している区間では、複数回実行が必要です。

TAB補完

/tutorial のサブコマンド補完は、第1引数で open / paper / password を返し、OPの場合のみ skip が補完候補に追加 されます。skip の第2引数(プレイヤー名)はオンラインプレイヤー名のデフォルト補完が動作します。

権限ノード

権限 既定 用途
tutorial.admin op /tutorial paper(紙の再配布)と /tutorial skip [プレイヤー名](ステップ強制進行)に必要
サブコマンド 必要権限
/tutorial open 不要(全プレイヤー)
/tutorial password <pass> 不要(全プレイヤー)
/tutorial paper tutorial.admin(既定 op)
/tutorial skip [プレイヤー名] tutorial.admin(既定 op)

LuckPerms 等で個別付与可能

tutorial.admin は plugin.yml で正規に宣言されているため、LuckPerms 等の権限プラグインで OP 以外にも個別付与できます。open / password はプレイヤー向けの正規操作として権限不要で開放されています。

トラブルシューティング

初回ログインしてもチュートリアルが始まらない

自動開始は !player.hasPlayedBefore()(過去ログイン履歴なし)かつ現在ステップが STEP_NONE(0) の両方を満たすときのみ実行されます。何らかの理由で hasPlayedBefore()true になっている(過去にテスト接続した等)プレイヤーは自動開始しません。手動で開始させたい場合は /tutorial paper で紙を渡し、プレイヤーに右クリックしてもらってください(紙の右クリックは /tutorial open を内部実行します)。

ステップ3(S1到達)で進行が止まる

判定対象のワールド名は ハードコードで S1 です。Multiverse 等で作成した資源ワールドの ワールド名(フォルダ名)が S1 以外 だと、入っても進みません。ワールド名を S1 に揃えるか、ソースを書き換えて再ビルドしてください。

ステップ4(/gs give)で進行が止まる

判定は /gs give で始まるコマンドが実行された ことのみを見ます。/gs give を提供するプラグイン(GlobalStorage 系)が導入されていない場合、コマンド自体が失敗します。プラグインの導入状況を確認してください。

ステップ17(鉄装備一式)が途中で止まる

鉄装備は ヘルメット → チェストプレート → レギンス → ブーツ の順序で判定されます。順序を入れ替えても判定されません。/tutorial skip で手動進行させるか、対象プレイヤーに順番通りに作り直してもらってください。

原木/丸石/鉄/ダイヤを取っても進まない

破壊判定は BlockBreakEvent、拾得判定は EntityPickupItemEvent の両方を見ています。

  • 原木:Material.name().endsWith("_LOG") でマッチ(全種の原木が対象)。
  • 丸石:破壊は STONE(石)、拾得は COBBLESTONE(丸石)。
  • 鉄鉱石:破壊は IRON_ORE / DEEPSLATE_IRON_ORE、拾得は RAW_IRON / IRON_ORE
  • ダイヤ:破壊は DIAMOND_ORE / DEEPSLATE_DIAMOND_ORE、拾得は DIAMOND

シルクタッチ等で別アイテム化していると判定されない場合があります。

鉄インゴットを取り出しても進まない

判定は FurnaceExtractEvent(かまどから取り出し)かつ Material.IRON_INGOT です。ホッパー等で自動回収した場合は FurnaceExtractEvent が発火しないため、進行しません。プレイヤー自身にかまどから手動で取り出してもらってください。

パスワードを変更したい

パスワードは TutorialCommand クラス内の private final String PASSWORD = \"20240526\"; で固定されています。config による変更はできません。変更したい場合はソースを書き換えて再ビルドしてください。

OP プレイヤーに /tutorial skip の補完が出ない

TAB 補完は sender.hasPermission("tutorial.admin") で判定しているため、tutorial.admin 権限を持っていない場合 skip 候補は出ません。OP 権限または LuckPerms 等で tutorial.admin を付与してください。

ステップ完了の報酬(エメラルド)が出ない

報酬はインベントリに余裕がある場合のみ通常通り渡されます。満杯の場合は 足元にドロップ され、対象プレイヤーには「インベントリがいっぱいのため、アイテムを足元に落としました。」と表示されます。チャット履歴を確認してください。


← 👤 プレイヤー向けページへ ← Tutorial2 概要へ