Skip to content

🧩 アーキテクチャと Mixin ターゲット (MC 26.1.2)

📌 リポジトリソースに関する免責事項: 本 Wiki のドキュメントはリポジトリ内の現在のソースコード状態を反映しており、CurseForge や Modrinth での一般公開リリースビルドに先立つ最新の未リリースコミットや開発中の機能が含まれている場合があります。

アーキテクチャインフォボックス技術パラメータ
ルートパッケージnet.instantgratification.magnet
Mixin 設定ファイルsrc/main/resources/magnet.mixins.json
Access Widenersrc/main/resources/magnet.accesswidener
互換性レベルJAVA_25
Mixin クラス総数2 (MixinEntity, PlayerMixin)

🌳 パッケージアーキテクチャツリー

text
net.instantgratification.magnet/
├── IMagnetEntity.java                  # NoClip および磁力化フラグ用エンティティインターフェース
├── MagnetCommand.java                  # サーバーコマンド登録 (/magnet toggle)
├── MagnetManager.java                  # エンティティスキャンおよび空間処理ループ
├── MagnetMod.java                      # MOD 初期化およびパケット受信処理
├── MagnetModClient.java                # クライアント初期化、Ctrl+M キーバインドおよび通知
├── MagnetMovement.java                 # 軌道ベクトル計算、速度補間 (Lerp) およびパーティクル
├── MagnetPlayerState.java              # スレッドセーフな ConcurrentHashMap によるプレイヤー状態保持
├── MagnetTogglePayload.java            # ネットワークパケットレコードおよび StreamCodec
├── SecondaryVisionCheck.java           # 詳細ブロックレイキャスト (植物、ブロックエンティティ、ガラス)
├── config/
│   ├── ClothConfigScreenHelper.java    # Cloth Config Fabric GUI ビルダー
│   ├── MagnetConfig.java               # JSON 設定ストレージおよび POJO フィールド
│   └── ModMenuIntegration.java         # リフレクションセーフな ModMenu API エントリポイント
├── mixin/
│   ├── MixinEntity.java                # Entity への NoClip および重力キャンセル注入
│   └── PlayerMixin.java                # Player へのティック実行および即時回収処理の注入
└── registry/
    └── ModGameRules.java               # DynamicGameRuleManager によるゲームルール登録

📋 Mixin 注入ターゲット詳細

1. net.instantgratification.magnet.mixin.MixinEntity

net.minecraft.world.entity.Entity を対象とし、IMagnetEntity を実装します。

注入メソッド注入ターゲットポイント動作および挙動
ig_magnet$decrementNoClipTicks@Inject(method = "tick", at = @At("HEAD"))アクティブ時、noClipTicks カウントダウンを毎ティック 1 減算。
ig_magnet$preventPushOut@Inject(method = "moveTowardsClosestSpace", at = @At("HEAD"), cancellable = true)サーバー側で noClipTicks > 0 の場合、バニラの押し出し速度をキャンセル。
ig_magnet$forceNoClipOnMove@Inject(method = "move", at = @At("HEAD"))noClipTicks > 0 の場合、originalNoPhysics をキャッシュして entity.noPhysics = true を強制。
ig_magnet$restoreNoPhysicsAfterMove@Inject(method = "move", at = @At("RETURN"))移動完了後、entity.noPhysics = originalNoPhysics を復元。
ig_magnet$conditionalCancelGravity@Inject(method = "applyGravity", at = @At("HEAD"), cancellable = true)アイテムが固体のブロック内部にある場合のみ重力加速度をキャンセル。

2. net.instantgratification.magnet.mixin.PlayerMixin

net.minecraft.world.entity.player.Player を対象とします。

注入メソッド注入ターゲットポイント動作および挙動
ig_magnet$tick@Inject(method = "tick", at = @At("HEAD"))サーバー側で毎ゲームティックごとに MagnetManager.tick(player) を呼び出し。
ig_magnet$expandPickupArea@ModifyVariable(method = "aiStep", at = @At("STORE"), ordinal = 0)ig:magnet_instant が true の場合、回収判定を拡張 (pickupArea.inflate(range))。

🔗 関連 Wiki ドキュメント

Official documentation & web portal for Dasik Igaijinn mods.