ガイド

Minecraftのクエストプラグインの作り方

2026年10月18日に更新

クエストはプレイヤーに遊ぶ理由を与えます。ゾンビを20体倒す、鉄を64個掘る、村人にパンを10個届ける。クエストプラグインは3つの要素でできています。ゲームのイベントを監視する目標、プレイヤーごとに保存される進行状況、そして報酬です。クエストを設定ファイルで定義すれば、コードに触れずに新しいクエストを追加できます。

クエストと報酬を自分のものに変えてください。

Codexeでこれを生成

手順

  1. 1.目標の種類を選ぶ

    まずはいくつかから始めます。特定のモブを倒す、ブロックを壊す・置く、アイテムを集める、クラフトする、場所にたどり着く、NPCと話す。どのクエストもこれらの組み合わせです。

  2. 2.クエストをファイルで定義する

    quests.ymlに各クエストを書きます。ID、名前、説明、数量付きの目標、報酬、条件(先に終わらせるクエスト、権限、レベル)。

  3. 3.プレイヤーごとに進行状況を記録する

    各目標の元になるイベントを監視し、プレイヤーの進行状況に加算します。ログアウトや再起動でも消えないよう、SQLiteかファイルに保存します。

  4. 4.進行状況を表示する

    進行中と完了済みのクエストを表示する/questsメニューに加えて、進行状況が変わったときのメッセージ、タイトル、ボスバー。

  5. 5.報酬を渡す

    アイテム、経験値、Vault経由のお金、そのほかはlp user %player% permission set ...のようなコンソールコマンド。

  6. 6.ビルドしてゲーム内でクエストをクリアする

    Codexeにコンパイルさせ、テストサーバーに参加し、クエストを受けてクリアします。その後、再起動して、進行状況と報酬が保存されているか確認します。

目標とその元になるイベント

目標イベント決めておくこと
モブを倒すEntityDeathEventプレイヤー本人のキルだけを数えるか、ペットや矢によるキルも含めるか
ブロックを壊すBlockBreakEventプレイヤーが置いたブロックは無視する。そうしないと、同じブロックを置いては壊す人が出る
アイテムを集めるインベントリの確認、または拾得イベントクエストを報告したときにアイテムを回収するか
アイテムをクラフトするCraftItemEventShiftクリックのクラフトでは一度に複数個できる
場所にたどり着くPlayerMoveEvent移動のたびではなく、プレイヤーが別のブロックに移ったときだけ確認する
NPCと話すPlayerInteractEntityEventどのエンティティがクエストの依頼主か

クエストの依頼主

いちばん簡単な依頼主は、コマンドかメニューです。ワールド内のキャラクターにするなら、独自の名前とPersistentDataContainerのタグを付けた村人や防具立てで、ほかのプラグインなしで実現できます。プレイヤーが右クリックすると、プラグインがそれを認識します。サーバーですでにCitizensなどのNPCプラグインを使っているなら、プラグインが連携できるようにリクエストに名前を書いてください。

説明の例

「Questsという名前のPaper 1.21.4クエストプラグイン。目標の種類: モブを倒す、ブロックを壊す(プレイヤーが置いたものは除く)、アイテムを集める、クエストの依頼主としてタグ付けした村人と話す。クエストはquests.ymlで定義し、名前、目標、前提クエスト、報酬(アイテム、経験値、Vaultのお金、コンソールコマンド)を持つ。/questsで、受注可能、進行中、完了済みのクエストを表示するメニューを開く。進行状況はアクションバーに表示。進行中のクエストは最大3つ。デイリークエストはサーバー時間の深夜0時にリセット。進行状況はSQLiteに保存。」

デイリークエストと繰り返しクエスト

  • リセットのタイミングを書きます。毎日決まった時刻か、プレイヤーがクリアしてから24時間後か。
  • デイリークエストをプレイヤーごとにランダムにするか、全員同じにするかを書きます。
  • フラグではなく最後にクリアした時刻を保存します。そうすれば、サーバーが止まっている間もリセットが正しく働きます。

よくある質問

クエストでPlaceholderAPIを使えますか?

はい。スコアボードやタブリストに表示できるよう、進行中のクエストやその進行状況などのプレースホルダーを指定してください。依存関係として追加されるように、リクエストにPlaceholderAPIと書いておきます。

Skriptでクエストを書けますか?

小さなクエストシステムなら、変数を使ったSkriptに収まります。目標の種類が多い、メニューがある、数百人分の進行状況を保存する、といった場合は、プラグインのほうが速く整理された状態を保ちやすくなります。

クエストが動くかどうかの確認方法は?

Codexeのテストサーバーで遊び、「一般プレイヤーが/questsを実行するとメニューが開く」のように、自分の言葉でテストを追加します。テストが確認するのはメッセージ、アイテム、メニューで、ワールド内のモブやブロックは対象外です。

クエストプラグインを作る

このプロンプトは、そのまま送信できる状態で開きます:

“Paper 1.21.4のクエストプラグイン: 目標の種類はモブを倒す、プレイヤーが置いていないブロックを壊す、アイテムを集める、タグ付けした村人と話す。クエストはquests.ymlに目標、前提クエスト、報酬(アイテム、経験値、Vaultのお金、コンソールコマンド)とともに定義。/questsメニューで受注可能、進行中、完了済みのクエストを表示。進行状況はアクションバー。進行中は最大3つ。デイリークエストは深夜0時にリセット。進行状況はSQLiteに保存。”

Codexeでこれを生成
Minecraftのクエストプラグインの作り方 | Codexe