====== Fabric を使用した Mod 製作の導入 ====== これは、 Fabric Mod を作成する際に使用できるいくつかの一般的なテクニックの簡単な紹介です。 Minecraft の Mod を作成するには、多くの場合、Minecraft のコードを非標準的な方法で操作する必要があります。 Minecraft は変更に対してますます柔軟になってきましたが、それでも本質的に Mod 化できるように構築されているわけではありません。 他の Mod 製作 API とは異なり、Fabric ローダーは Minecraft のクラスファイルを上書きして機能を追加することはありません。 代わりに、[[https://github.com/SpongePowered/Mixin/wiki|ミックスインライブラリ]] を使用してコードが挿入されます。 ただし、ほとんどの場合、このライブラリを直接使用することはありません。 ミックスインは壊れやすく、競合を引き起こす場合があります。 したがって、一部の一般的な機能は、 Fabric API によって既に実装されています。 コアの Fabric API に存在しない場合は、多くの場合、サードパーティライブラリに存在します。 ほぼすべての状況で、ミックスインを自分で実装するよりも、Fabric API またはサードパーティライブラリのいずれかを使用することをお勧めします。 ただし、場合によっては、それが必要ないこともあります。 Minecraft は Mod 製作用に作成されたものではありませんが、追加の変更をまったく加えることなくアクセスできる多くの機能が含まれています。 この記事では、 Minecraft に影響を与えるすべての方法について、優先順に説明します。 ===== 生の Minecraft API ===== Minecraft で既に何かを実行できる場合は、車輪の再発明をしないでください。 この良い例は、 "" クラスです。このクラスを使用すると、 Minecraft のコードを変更せずにブロックとアイテムを追加できます。 Minecraft は、データ駆動型のさまざまな機能に JSON データ ファイルも使用します。 JSON ファイルを Mod に追加できます。これは、Fabric API によって挿入されます。 たとえば、ブロック モデルとルート テーブルは JSON ファイルを介して実装されます。 ===== Fabric API ===== クライアントにインストールされた Fabric 自体は、 2 つの部分に分割されます。 - Mod をロードし、エントリポイントを呼び出す Fabric ローダー - いくつかの一般的な便利な API を提供するオプションのライブラリである Fabric API API は意図的に比較的小さく保たれており、 Fabric を新しい Minecraft バージョンにすばやく移植できるようになっています。 [[https://github.com/FabricMC/fabric|GitHub のソースコード]] を調べると、 Fabric API に何が含まれているかを確認できます。 Fabric API には、ネットワーキングやレンダリングなどの一般的なイベントフックと一般的なユーティリティが多数含まれています。 ===== サードパーティ API ===== Fabric API は意図的に小型化され、焦点が絞られているため、ギャップを埋めるためにサードパーティの API が存在します。 ミックスインを使用すると、コアの Fabric API と同じように、サードパーティのライブラリが Minecraft のコードに影響を与えることができます。 競合の可能性を最小限に抑えるために、可能であれば独自のミックスインを作成する代わりに、これらを使用する必要があります。 このウィキで [[community:library_mods|サードパーティライブラリ]] の不完全なリストを見つけることができます。 ===== ミックスイン ===== 最後に、ミックスインを使用できます。 ミックスインは、Minecraft 独自のコードを変更できる強力な機能です。 一部のミックスインは競合を引き起こす可能性がありますが、責任を持って使用することで、 Mod に独自の動作を追加することができます。 ミックスインにはさまざまなエッセンスがあり、大まかな優先順位で次のようになります: * インターフェイスの追加 * コールバックインジェクター * リダイレクトインジェクター * オーバーライド(これは使用しないでください) これは完全なリストではなく、簡単な概要です。 一部のミックスインのタイプはここでは省略されています。 ==== インターフェイスの追加 ==== これはおそらくミックスインを使用する最も安全な方法の 1 つです。 新しいインターフェースの実装は、どの Minecraft クラスにも追加できます。 その後、クラスをキャストすることでインターフェイスにアクセスできます。 これはクラスについて何も変更せず、新しいものを追加するだけなので、競合する可能性はほとんどありません。 1 つの注意点は、注入する関数シグネチャ(名前 + パラメーターの型)が一意である必要があることです。そのため、共通のパラメーターの型を使用する場合は、必ず固有の名前を付けてください。 ==== コールバックインジェクター ==== コールバックインジェクターを使用すると、コールバックフックを既存のメソッドに追加したり、そのメソッド内の特定のメソッド呼び出しに追加したりできます。 また、メソッドの戻り値をインターセプトして変更し、早期に返すこともできます。 コールバック注入はスタックできるため、 Mod 間で競合が発生する可能性は低いです。 ==== リダイレクトインジェクター ==== リダイレクトを使用すると、独自のコードを使用して、ターゲットメソッド内でメソッド呼び出しまたは変数アクセスをラップできます。 これらは慎重に使用してください。ターゲットの呼び出しまたはアクセスは、すべての Mod 間で 1 回だけリダイレクトできます。 2 つの Mod が同じ値をリダイレクトすると、競合が発生します。 最初にコールバック注入を検討してください。 ==== オーバーライド ==== オーバーライドは完全に避けてください。 それらはメソッドを完全に置き換え、既存のコードをすべて削除し、メソッドの他のタイプのミックスインと競合します。 それらは、他の Mod だけでなく、Minecraft 自体の変更とも競合する可能性が非常に高いです。 あなたがやりたいことをするためにオーバーライドする必要はないでしょう。他のものを使ってください。