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                      # 模组初始化器与数据包接收端
├── MagnetModClient.java                # 客户端初始化器、Ctrl+M 按键绑定与悬浮提示
├── MagnetMovement.java                 # 轨迹向量计算、Lerp 速度插值与粒子发射
├── 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"))激活时每个游戏刻将 noClipTicks 倒计时减 1。
ig_magnet$preventPushOut@Inject(method = "moveTowardsClosestSpace", at = @At("HEAD"), cancellable = true)服务端当 noClipTicks > 0 时拦截原版方块推挤挤出速度。
ig_magnet$forceNoClipOnMove@Inject(method = "move", at = @At("HEAD"))缓存 originalNoPhysics,在 noClipTicks > 0 时强制 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.