====== Mod 製作の Tips ====== これは、API のユーザーへのアドバイスに関する経験から集められた、さまざまな Fabric 関連の改造のヒントのコレクションです。 ===== 基本(API) ===== * Fabric の API 開発のインジェクションベースのアプローチにより、エンドユーザーに見える方法でクラスに完全にパッチを適用する傾向はありません。そのため、実行できないことに遭遇したときに、バニラクラスの Fabric 拡張を見つけることがあります。例えば: * Block.Settings → FabricBlockSettings * EntityType.Builder → FabricEntityTypeBuilder * 組み込みのリソース パックまたはデータ パックの場合、 "assets/[mod id]" または "data/[mod id]" ディレクトリパスがそれぞれ存在することを確認してください。 IDEA ユーザーは、誤って "assets.[mod id]" ディレクトリを作成してしまうことがあります。これは機能しません。 ===== ミックスイン ===== * クラスを実装していないインターフェースにキャストしたり、 final クラスをキャストしたり、ミックスインをターゲットクラスにキャストしたりするには、 "(TargetClass) (Object) sourceClassObject" トリックを使用できます。 * @Redirect および @ModifyConstant mixin は現在ネストできません (同じ領域で複数の Mod によって同時に適用されます)。これは開発の途中で変更される可能性があります―― とはいえ、現時点では、@Overwrite と一緒に、可能であればそれらを避けてください(または、Fabric の API にフックを持ち込むことについて話し合うか、よりニッチなものについては、小さな JAR-in-JAR に入れることを検討してください)。 * プライベートではないカスタムフィールドまたはメソッドを追加する場合は、 "[modid]$" または別の一意の文字列をプレフィックスとして付け、 @Unique で注釈を付けます。基本的に、 "secretValue" ではなく "mymod$secretValue" です。これは、同じ名前のフィールドまたはメソッドを追加する Mod 間の競合を避けるためです。 ===== ネットワーキング ===== * パケットは常に **ネットワークスレッド** で実行を開始しますが、ほとんどの Minecraft へのアクセスはスレッドセーフではありません。一般に、何をしているのか正確にわからない場合は、ネットワークスレッドでパケットを解析し(すべての値を読み取り)、 **タスクキュー** を使用して **メインサーバー/クライアントスレッド** で追加の操作を実行します。 ===== 落とし穴 ===== * ''java.awt'' パッケージとそのサブパッケージは使用しないでください。 AWT は、すべてのシステムでうまく機能するわけではありません。何人かのユーザーが Minecraft がハングアップしたと報告しています。