Разбор архитектуры и миксинов (MC 26.1.2)
Этот документ подробно описывает структуру пакетов, иерархию классов, цели миксинов, shadow-поля и точки внедрения для Item Clumps в Minecraft 26.1.2.
🌳 Иерархия пакетов и диаграмма классов
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]🛠️ Полный разбор миксинов и точек внедрения
1. ItemEntityMixin.java
- Целевой класс:
net.minecraft.world.entity.item.ItemEntity - Расширение суперкласса:
extends net.minecraft.world.entity.Entity
| Элемент / Метод | Аннотация | Точка внедрения | Назначение |
|---|---|---|---|
getItem() | @Shadow | Н/Д | Доступ к стаку предметов. |
setItem(ItemStack) | @Shadow | Н/Д | Изменяет стак и обновляет данные трекера. |
target | @Shadow | Н/Д | UUID целевого игрока. |
pickupDelay | @Shadow | Н/Д | Тики таймера задержки подбора. |
age | @Shadow | Н/Д | Тики возраста исчезновения ($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{ предм/с}$) в контейнеры воронок. |
