メインコンテンツまでスキップ

Corpse

インベントリと XP を保持するプレイヤーの死体。ルートメニュー、保護、有効期限、モデルバックエンドを備えています。

無料v0.7エンティティとモデル
必要TypeWriter0.9Basic extensionEntity extensionQuest extensionGUIMySQL任意ModelEngine任意BetterModel任意MythicMobs NPC任意BTC Mob NPC任意

概要​

プレイヤーが死亡すると、Corpse がドロップ品を引き受けます。インベントリ全体(ホットバー、防具、オフハンド)と経験値が、倒れた場所に立つ死体に移されます。バニラのドロップは消去されます。死体は、誰かが回収するか有効期限が切れるまで残り、サーバーを再起動しても保持されます。

死体はパケットエンティティで、近くにいるプレイヤーごとに個別に描画されます。死亡ポーズで倒れた、被害者のスキンと防具を身につけたプレイヤーモデルにすることも、対応するバックエンドの任意のモデルにすることもできます。すべては 2 つの manifest エントリで制御します。サーバー全体のルールを定める Corpse Global Settings と、死体の見た目を定める Corpse Model Definition です。

機能​

  • 完全なルート回収 — インベントリ、防具、オフハンド、経験値が死体に入り、バニラのドロップと経験値は消去されます。
  • 3 つのルートモード — ページ付きのルートメニュー、回収者のインベントリへの直接転送、またはすべてを地面にドロップ。
  • ルート保護 — オーナーのみが回収できる設定、または保護期間が過ぎれば誰でも回収できる設定。
  • 有効期限 — 死体は、設定した時間が経過すると消えます。消えない設定も可能です。
  • 永続化 — 死体は再起動後も残ります。MySQL が使える場合は MySQL に、そうでなければローカルファイルに保存されます。
  • 複数の見た目 — 定義はワールドと優先度で選ばれます。EntityExtension、ModelEngine、BetterModel、BTC Mob NPC、MythicMobs NPC のモデルを使えます。
  • プレイヤー表示へのフォールバック — モデル未設定の場合は、スキン、防具、グロー、ポーズ(横たわる、倒れる、瀕死、立ち姿)で表示します。
  • クエスト連携 — スポーン、回収、期限切れ時のイベント、ファクト、回収目標、戻る道を示すウェイポイント。
  • ワールドフィルター — allowedWorlds と excludedWorlds で、特定のワールド(例: ダンジョン)にだけ死体を残せます。
  • すべてのテキストを設定可能 — メッセージ、メニューのラベルとマテリアル、ウェイポイントの書式と矢印、コマンドの応答はすべてフィールドです。
  • スタッフ用コマンド — サーバー全体の死体の一覧表示と削除。
  • Folia 対応 — ワールドの変更は、死体を所有するリージョンで実行されます。

インストール​

  1. TypeWriter の拡張機能 Basic、Quest、Entity を、Web パネルの Extensions タブからインストールします(TypeWriter ドキュメントを参照)。
  2. GUI 拡張機能をインストールします。ルートメニューはこれを基盤にしています。
  3. 任意: 死体の見た目に使いたいモデルバックエンドをインストールします(ModelEngine、BetterModel、MythicMobs NPC、BTC Mob NPC)。
  4. 任意: 死体をデータベースに保存するには、MySQL 拡張機能をインストールします。ない場合、死体は plugins/Typewriter/corpse/corpses.json に保存されます。
  5. Corpse の JAR を plugins/Typewriter/extensions/ に置き、サーバーを再起動します。

起動時に、コンソールに検出されたモデルバックエンドがログ出力されます。1 つも見つからなくても、死体はルートを保持し、通常のプレイヤーとして描画されます。

はじめに​

5 分間残り、1 分間はオーナーだけが保護され、戻る道を示す死体を設定する手順です。

  1. TypeWriter の Web パネルで manifest ページを開き、Corpse Global Settings エントリを追加します。これがない場合は、組み込みのデフォルト(300 秒、ルートメニュー、誰でも回収可能)が適用されます。
  2. duration を 300、onlyOwnerCanLoot をオフ、ownerProtectionSeconds を 60 に設定します。
  3. lootMode を選びます。GUI は右クリックでルートメニューを開き、DIRECT はすべてを回収者のインベントリに移し、DROP は地面にドロップします。スニークしながらクリックすると別のモードになります(sneakSwapsLootMode)。
  4. Corpse Model Definition を追加します。通常のプレイヤーモデルにするには definitionRef を空のままにし、モデルを使う場合はエンティティ定義を選びます。必要に応じて pose、rotationMode、interaction* のヒットボックスを設定します。
  5. Corpse Waypoint オーディエンスエントリを追加すると、アクションバーに死体までの距離と矢印が表示されます。死体がなくなると消えます。
  6. 回収をクエストのステップにするには、クエストにリンクした Corpse Recovery Objective を追加します。
  7. パブリッシュし、テスト用ワールドで一度死亡して、死体を右クリックします。
注記

Corpse が取得するのは、その死亡で本来ドロップされるものだけです。keepInventory ゲームルールがオンの場合、プレイヤーはアイテムを保持し、死体は作られません(通常のバニラの死亡になります)。他のプラグインがプレイヤーのために保持するアイテム(消滅の呪い、ソウルバウンドアイテム)は、死体に複製されません。

特定のワールドに限定する​

デフォルトでは、すべてのワールドで死体が残ります。Corpse Global Settings の 2 つのリストで場所を選びます。

  • allowedWorlds: 死亡時に死体を残すワールド。空の場合はすべてのワールドです。
  • excludedWorlds: 死亡時に死体を決して残さないワールド。常に allowedWorlds より優先されます。

ダンジョンにだけ死体を残し、他では残さない場合:

allowedWorlds:
- dungeon_*

両方のリストに共通するルール:

  • 1 ワールドにつき 1 エントリです。* は任意の文字列、? はちょうど 1 文字に一致します。dungeon_* はダンジョンが各ランのために生成するすべてのワールドに一致し、dgbuild は特定の名前のワールド 1 つを指します。
  • 各エントリは、大文字小文字を区別せず、ワールド名(フォルダー名)とそのディメンションキー(例: minecraft:the_nether)の両方と比較されます。
  • 許可されたワールドの外(または除外されたワールド)では、死亡は通常のバニラの動作になります。ドロップと経験値は通常どおりで、死体は残りません。
  • これは死体が存在するかどうかだけを決めます。死体の見た目は、同じエントリを受け付ける Corpse Model Definition の worlds リストで選ばれます。

拒否されたワールドでプレイヤーに見えるもの。 filteredWorldDeath で選びます。両方のリストが空の場合は効果がありません。

  • VANILLA_DEATH_SCREEN(デフォルト): 通常の Minecraft の死亡です。地面に横たわる体と死亡画面は Corpse ではなく Minecraft クライアントが描画するため、Corpse では取り除けません。
  • INSTANT_RESPAWN: プレイヤーは次のティックにリスポーンし、死亡画面は表示されません。どちらの場合も、アイテムと経験値はバニラと同様に地面に落ちます。

ダンジョンにだけ死体を残し、それ以外では即時リスポーンさせる場合:

allowedWorlds:
- dungeon_*
filteredWorldDeath: INSTANT_RESPAWN

次の場合、死体は残らず、死亡はバニラのままです。

  • ワールドが許可されていない、または除外されている。
  • keepInventory がオンである。
  • 他のプラグインが死亡をキャンセルした(トーテムや蘇生プラグイン)。プレイヤーは死んでいません。
  • 取得するものがない(アイテムも経験値もない)。

仕組み​

どの定義を使うかは死亡時に決まります。worlds リストに死亡したワールドが含まれる Corpse Model Definition エントリ(リストが空なら全ワールド対象)のうち、priority が最も高いものが採用されます。定義が 1 つもない場合は、デフォルトの定義が使われます。寿命は、overrideDuration が 0 より大きければその値、そうでなければグローバルの duration から決まります。オーナー保護のルールは、死体の作成時に確定します。

死体を回収できるのは、死体への右クリックだけです。回収すると死体は空になり、死体は削除されます。誰にも回収されなかった死体は期限切れになり、中のアイテムは失われます。

メニュー​

GUI ルートモードでは、死体を右クリックすると、GUI 拡張機能で作られた 54 スロットのメニューが開きます。

  • 最初の 5 行(45 スロット)に、死体のアイテムが入っています。アイテムをクリックすると、自分のインベントリに取り込めます(入りきらないアイテムは足元にドロップされます)。死体はアイテムを取るたびに保存されます。最後のアイテムを取ると死体は空になり、経験値が付与されて on_corpse_loot が発火します。
  • 最下段にはボタンが並びます。前のページ(左)、次のページ、すべてを取るボタン、閉じる(右)です。ページ送りのボタンは、複数ページある場合にのみ表示されます。
  • すべてを取るチェストのロアには、死体が保持する経験値(と現在のページ)が表示され、経験値を含むすべてを回収者に渡します。
  • タイトルとすべてのラベルは、Corpse Global Settings で変更できます(guiTitle、guiLootAllLabel、guiCloseLabel、guiPreviousPageLabel、guiNextPageLabel、guiExperienceLabel、guiPageLabel)。

DIRECT モードで回収者のインベントリがいっぱいの場合、あふれた分は死体の位置にドロップされ、inventoryFullMessage が表示されます。ドロップされたアイテムは、回収者のために確保しておくこともできます(reserveDroppedItems、reserveDroppedItemsSeconds)。

設定​

死体は Web パネルの外に保存されます。

ストレージ使われる場合場所
MySQLMySQL 拡張機能がデータソースを提供しているテーブル corpse_corpses(自動的に作成されます)
ローカルファイルデータソースがない、または MySQL の初期化に失敗したplugins/Typewriter/corpse/corpses.json

サーバー停止中に有効期限が過ぎた死体は、起動時に on_corpse_expire を発火させずに削除されます。再起動後、死体は固定値の名前と設定で表示されます。プレースホルダーで決まる名前やオプションは、デフォルトに戻ります。 復元された死体はポーズ、発光、名前、アニメーションを保持しますが、オーナーのスキンと防具は保持されず、シンプルなモデルで表示されます。読み取れないストレージファイルは、上書きされずに別の場所へ退避されます(.unreadable-<time>)。

コマンド​

コマンドは、Web パネルで作成する Corpse Admin Command エントリです。名前と権限はエントリのフィールドで、デフォルト値は以下のとおりです。

コマンド説明
/corpses listワールドを問わず、サーバー内のすべての死体を、オーナー、位置、ワールド、アイテム数、経験値とともに一覧表示します。
/corpses clear自分のワールドだけでなく、サーバー内のすべての死体を削除します。on_corpse_expire は発火しません。

どちらのコマンドもワールドごとではなく、サーバー全体に作用します。応答とリストの見出しは、エントリの編集可能なフィールドです。

権限​

権限許可される内容
typewriter.corpse.admin/corpses list と /corpses clear(エントリの permission フィールドのデフォルト値)。

エントリ​

11 件のエントリー(拡張機能のソースから生成)。

イベント3
目標1
ファクト2
オーディエンス2
コマンド1
マニフェスト2

トラブルシューティング​

死体を右クリックしても何も起きない。 死体は、interactionWidth × interactionHeight ブロックの透明なヒットボックスを通じてクリックできます。デフォルトは 1.0 です。大きなモデルの場合は大きくしてください。Corpse Global Settings で debugInteractions をオンにすると、すべてのクリックがコンソールにログ出力されます。確認が済んだらオフに戻してください。また、onlyOwnerCanLoot と ownerProtectionSeconds も確認してください。他のプレイヤーには cannotLootMessage が表示されます。

死体がモデルではなく、通常のプレイヤーになる。 definitionRef が空か、解決できませんでした(コンソールに Failed to resolve entity definition と表示されます)。バックエンドの拡張機能がインストールされていることを確認してください。起動時のログに、検出されたバックエンドが一覧表示されます。

ルートメニューが開かない。 メニューには GUI 拡張機能が必要です。また、lootMode と、スニークしていないことも確認してください。sneakSwapsLootMode がオンの場合、スニーク中はもう一方のモードが使われます。

死亡後に死体がない。 次の順に確認してください。ワールドが allowedWorlds で許可され、excludedWorlds に含まれていない(フォルダー名とディメンションキーで比較)。そのワールドで keepInventory ゲームルールがオフである。他のプラグインが死亡をキャンセルしていない。プレイヤーが少なくとも 1 つのアイテムまたは経験値を持っていた。

遠くからクリックしても何も起きない。 クリックが有効なのは、死体から interactionReach ブロック以内の場合だけです(デフォルトは 6、0 = 制限なし)。interactionCooldownMillis 内の連続クリックは 1 回の操作として無視されます。

再起動後に死体が消える。 コンソールで Restored n corpse(s) from storage を確認してください。サーバー停止中に死体の有効期限が切れた場合、その死体は削除されます。MySQL の初期化に失敗した場合、Corpse はログに警告を出してローカルファイルにフォールバックします。

名前のプレースホルダーが動作しない。 displayName ではオーナー名に {player} を使います。respawnMessage では <x>、<y>、<z>、<world> を、guiTitle では <player> を使います。 他のテキストのプレースホルダーは MiniMessage の前に埋め込まれ、プレイヤーの名前はエスケープされるため、クリック可能なタグになることはありません。

関連する拡張機能​

  • GUI — ルートメニューを提供します。
  • BetterModel と MythicMobs NPC — 死体用のモデルバックエンド。
  • MySQL — 死体のデータベース保存。