プレイヤーディスガイズ
FreeMinecraftModelsは、オンラインの任意のプレイヤーをロード済みモデルにディスガイズできます。ディスガイズはコマンド、公開DisguiseAPI、およびディスガイズされたプレイヤーの透明化とモデルレンダリングを処理するプレイヤーごとのPlayerDisguiseEntityによって駆動されます。
コマンド
| コマンド | 権限 | 備考 |
|---|---|---|
/fmm disguise <modelID> | freeminecraftmodels.disguise.self | 送信者をディスガイズします。プレイヤー専用 |
/fmm disguise <modelID> <player> | freeminecraftmodels.disguise.others | 指名されたプレイヤーをディスガイズします。コンソールから動作 |
/fmm undisguise | freeminecraftmodels.disguise.self | 送信者のディスガイズを解除します。プレイヤー専用 |
/fmm undisguise <player> | freeminecraftmodels.disguise.others | 指名されたプレイヤーのディスガイズを解除します。コンソールから動作 |
/fmm disguiselist | freeminecraftmodels.disguise.others | ディスガイズされているすべてのプレイヤーと、それぞれがディスガイズされているモデルをリストします |
freeminecraftmodels.*ワイルドカードは、OPデフォルトで3つの権限(admin、disguise.self、disguise.others)すべてを付与します。
挙動
- すでにディスガイズされているプレイヤーをディスガイズすると、以前のディスガイズがクリーンに置き換えられます — 最初にディスガイズ解除する必要はありません。
- ディスガイズされたプレイヤーは他のプレイヤーから不可視になり、モデルのみが見えます。ディスガイズされたプレイヤー自身は通常通り見えます。
- 透明状態はミルクバケツ、ビーコンの効果クリア、および通常であれば効果を剥がすその他の操作を経ても持続します。
- プレイヤーのヒットボックスは変わりません。Mobのターゲティング、衝突、PvPはすべて通常通り機能します。
- ディスガイズはサーバー再起動を生き延びません。メモリのみで追跡されます。
/fmm reload時、プラグインシャットダウンの一環としてすべてのアクティブなディスガイズが破棄されます。リロード後にプレイヤーを再ディスガイズする必要があります。
Bedrockクライアント
ディスガイズは、FMMがカスタムモデルをレンダリングすることに依存しています。Bedrockプレイヤーにディスガイズを表示するには、config.ymlでsendCustomModelsToBedrockClients: trueを設定し、Bedrock互換のリソースパックパイプライン(Floodgate + Geyser + 変換済みリソースパック)を持つ必要があります。これが設定されていない場合、Bedrockプレイヤーにはモデルも基底の不可視プレイヤーも見えません — 実質的に、ディスガイズされたプレイヤーが立っている場所には何も見えません。
DisguiseAPI
サードパーティプラグインはcom.magmaguy.freeminecraftmodels.api.DisguiseAPIを介してディスガイズをプログラム的に駆動できます。
import com.magmaguy.freeminecraftmodels.api.DisguiseAPI;
// ディスガイズ(モデルIDがロードされていない場合はfalseを返す)
boolean ok = DisguiseAPI.disguise(player, "dragon");
// ディスガイズ解除(ディスガイズが削除された場合はtrueを返す)
DisguiseAPI.undisguise(player);
// 問い合わせ
boolean isDisguised = DisguiseAPI.isDisguised(player);
String modelID = DisguiseAPI.getDisguiseModelID(player); // ディスガイズされていない場合はnull
// ディスガイズされたすべてのプレイヤーの変更不可なスナップショット
Collection<Player> all = DisguiseAPI.getDisguisedPlayers();
APIはパブリックでリファクタ安全なエントリポイントです。プラグインは内部のDisguiseManagerではなくDisguiseAPIを呼び出すべきです。
一般的なユースケース
- ロールプレイとRPGサーバー: シネマティックやクエストスクリプトのためにプレイヤーをボスモデルにディスガイズします。
- イベントホスティング: アナウンサーを巨大なカスタムモデルにディスガイズします。
- マウントと乗り物: クリエイティブな輸送セットアップのために
/fmm mountと/fmm disguiseを組み合わせます。 - EliteMobs統合: ボススクリプトは、一時的な変身効果のためにイベントをトリガーしたプレイヤーをディスガイズできます。
トラブルシューティング
/fmm disguise dragonを実行しても何も起こりません。
モデルIDはロード済みモデルと正確に一致する必要があります。/fmm adminまたは/fmm statsでモデル名を確認してください。送信者がfreeminecraftmodels.disguise.othersを持っていない場合、FMMはモデルが存在しても意図的に「invalid entity ID」という汎用メッセージを返します — これは、ロード済みモデルIDのリストを権限のないプレイヤーに漏らさないためです。
/fmm reloadの後、ディスガイズが消えました。
予想された挙動です。すべてのディスガイズはリロード時に破棄されます。自動的にディスガイズを再適用する必要がある場合は、FmmReloadedEventをリッスンしてください。
Bedrockプレイヤーにディスガイズが見えません。 上記のBedrockクライアントを参照してください。
ディスガイズされたプレイヤーが他者に依然として見えています。 透明化はパケットレベルの効果として適用されます。別のプラグインが毎ティック透明化を強制的に削除している場合(一部のアンチチートプラグインはこれを行います)、FMMの再適用と競合する可能性があります。FMMをホワイトリストに登録するか、競合するチェックを無効にしてください。