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 相容層級JAVA_25
Mixin 類別總數2 (MixinEntity, PlayerMixin)

🌳 套件架構目錄樹

text
net.instantgratification.magnet/
├── IMagnetEntity.java                  # 實體介面:NoClip 與已磁吸標記
├── MagnetCommand.java                  # 伺服端指令註冊 (/magnet toggle)
├── MagnetManager.java                  # 實體掃描與空間排程執行迴圈
├── MagnetMod.java                      # 模組進入點與網路包監聽
├── MagnetModClient.java                # 客戶端初始化、Ctrl+M 快捷鍵與覆蓋提示
├── MagnetMovement.java                 # 軌跡向量數學、動態插值速度與粒子
├── MagnetPlayerState.java              # 執行緒安全 ConcurrentHashMap 玩家開關存儲
├── MagnetTogglePayload.java            # 網路資料包 Record 與 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 注入 Tick 執行與瞬間拾取
└── 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"))處於激活狀態時,每 Tick 將 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"))在伺服端每 Game Tick 呼叫 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.