はじめに
カスタムエンチャント、使ってますか?
検知だったりダメージ無効だったり1.21.11で追加されたapply_impulseだったりと活用の幅が広いカスタムエンチャントですが、どこかに装備する必要があります。
データパックでカスタムエンチャントを使用したいのに、すでに防具が埋まってる……といったシチュエーションは十分考えられます。
そこで、サドルスロットとボディスロットを使うことができます。
サドルスロットとボディスロットの使い分けについては後述しますが、説明では基本的にサドルスロットと書いていきます。
本記事ではサドルスロットの使い方、長所、欠点などについて見ていきます。
前提
- datapackの使い方が分かれば誰でも(初心者向けに書いたつもり)
- Minecraft Java版 1.21.11
(本題からずれるのでカスタムエンチャントについてはエンチャントのカスタマイズ(Minecraft Wiki)などを参考にしてください。)
サンプルをこちらで公開しております。よろしければどうぞ
使い方
equippableコンポーネントでサドルに装備可能としたアイテムをitem/lootコマンド、右クリックなどで装備させることができます。
重要なのはequippableで指定することで、これをしていないと装備不可能となります。(armor.headなどとは異なります)
長所
ユーザーと干渉しない
他に装備を着ていても問題なく使用可能です。
また、装備していることがユーザーから見えないこともメリットとなり得ます。
カスタムエンチャントが使える
はじめにでも述べたようにカスタムエンチャントが使用できます。
これが最も有用な使い道だと考えています。
この方法を用いた例として、Player Motionがあります。
データが保存できる
プレイヤーごとに独立したアイテムスロットなので、
そのアイテムの中にcustom_dataコンポーネントを利用することで任意のデータが保存可能です。
(OhMyDatのような個別ストレージを利用すればいいという話ではありますが)
この方法の利点は、IDの変更に対して頑強であることです。
右クリックの検知ができる
swappableをtrueにした装備を持って右クリックすることで装備することができます。
これによって装備されることで右クリックの検知ができます。
頭など他の部位とは違い、右クリック以外の方法でアクセスできないのが特徴です。
実際のところ、consumableを用いた方法の方が汎用性は高いと思うのでこれを使うことはほぼないと思います。
短所
制作者と干渉しうる
この方式において、現実的に一番考えられる問題点です。
確かにユーザーからはアクセスできない位置なのですが、他の制作者は当然アクセスできます。
他データパックと混合して使用される、サバイバルデータパックのようなシーンにおいて、競合を引き起こす可能性があります。
この問題の対策として、海外コミュニティではサドルスロットは一時的用法、ボディスロットは継続的方法に用いるといった棲み分けを試みているようです。
(参考URL)
将来的な動作の不安
現状(ver1.21.11)ではサドルスロットの使用は可能ですが、そもそもこれは正規の動作なのか不明なため、将来的なアップデートで使用不可能になるおそれがあることは注意が必要だと思われます。
(MC-297868(サドルスロット関連のバグ修正)ですでに公式が触れているという事実を見る限りは今後も使用可能だと思われますが)
バグのためにうまく扱えない要素が存在する
といったバグによって想像通りの挙動にならない場合があり、今後の修正が期待されます。
補足情報
- post_attackはサドルスロットに限らずメインハンド限定
- 右クリックで装備すると同期されるが、コマンドで操作すると異常を起こす
他にもアイテムを削除ボタンが効かないとか開発中も見えないのでデバッグに困るとかありますが基本上記の3点が問題になってくるかと思われます。
おわりに
この記事ではプレイヤーからアクセスできない装備スロットとしてのサドルスロットの用法を紹介しました。
こういう記事書くの初めてなので間違っている・読みづらい箇所などあれば申し訳ございません、できれば教えて下さい。
結構簡単なのに意外と言及している場所がなかったので備忘録的なまとめも兼ねています。
単純過ぎて話すまでもないって事かもしれないですが…
(なんてことを書いてたらSuitoShizukuさんの記事でも触れられてました。うーんタイミング)
少しでも参考になる箇所があれば嬉しいです。そしてデータパック作ってください。
余談
普段自分はここでコマンド弄ってPvPとPvEを作ってます。