架構設計与 Mixin 解析 (MC 26.1.2)
本文件深入解析 Minecraft 26.1.2 上 Item Clumps 的内部包布局、类繼承体系、Mixin 注入目標清單与影子成員細節。
🌳 包层级結構与類別圖
net.instantgratification.item_clumps
│
├── ItemClumpsFabric.java [Main Entrypoint / GameRules Registration]
│
├── config/
│ ├── ItemClumpsConfig.java [Configuration POJO / Gson Persistence]
│ ├── ModMenuIntegration.java [ModMenuApi Provider / Cloth Config Factory]
│ └── ClothConfigScreenHelper.java [Cloth Config v2 Screen Factory]
│
└── mixin/
├── HopperBlockEntityMixin.java [Hopper Drip Extraction Mixin]
└── ItemEntityMixin.java [Mega-Stack Aggregation & Smart Pickup Mixin]🛠️ 完整 Mixin 目標与注入点详解
1. ItemEntityMixin.java
- 目標类:
net.minecraft.world.entity.item.ItemEntity - 超类繼承:
extends net.minecraft.world.entity.Entity
| 成員 / 方法 | 注解 | 注入点 | 用途目的 |
|---|---|---|---|
getItem() | @Shadow | N/A | 访问實體内部的物品堆栈。 |
setItem(ItemStack) | @Shadow | N/A | 修改物品堆栈并同步更新追蹤器数据。 |
target | @Shadow | N/A | 目標玩家的 UUID。 |
pickupDelay | @Shadow | N/A | 拾取冷卻计时器 ticks。 |
age | @Shadow | N/A | 消失年龄计时器 ticks ($0\text{ 至 }6000$)。 |
tick | @Inject | @At("HEAD") | 動態刷新自定义名牌可见性。 |
setItem | @Inject | @At("TAIL") | 物品堆变动时触发名牌更新。 |
isMergable | @Inject | @At("HEAD"), cancellable = true | 将原版最大堆疊检查替换为 max_clump_size 規則。 |
mergeWithNeighbours | @ModifyArgs | INVOKE -> AABB.inflate(DDD) | 修改水平擴充参数 (0 和 2) 以對齊 merge_radius。 |
tryToMerge | @Inject | @At("HEAD"), cancellable = true | 执行聚合计算与最年轻年龄繼承。 |
playerTouch | @Inject | @At("HEAD"), cancellable = true | 执行分塊式背包吸納并拆分为纯原版规格堆疊。 |
2. HopperBlockEntityMixin.java
- 目標类:
net.minecraft.world.level.block.entity.HopperBlockEntity
| 方法 | 注解 | 注入点 | 用途目的 |
|---|---|---|---|
addItem(Container, ItemEntity) | @Inject | @At("HEAD"), cancellable = true | 从巨型聚合体中每次仅抽取 1 个切片 ($2.5\text{ 个/秒}$) 存入漏斗。 |
