Détail de l'Architecture & Mixins (MC 26.2)
Ce document détaille l'organisation des paquets, la hiérarchie des classes, les cibles Mixin, membres shadow et points d'injection pour Item Clumps sur Minecraft 26.2.
🌳 Hiérarchie des Paquets & Diagramme de Classes
net.instantgratification.item_clumps
│
├── ItemClumpsFabric.java [Main Entrypoint / GameRules Registration]
│
├── config/
│ ├── ItemClumpsConfig.java [Configuration POJO / ConfigHelper Persistence]
│ ├── ModMenuIntegration.java [ModMenuApi Provider / Safe GUI Factory]
│ └── YaclScreenHelper.java [YetAnotherConfigLib v3 Screen Factory]
│
├── mixin/
│ ├── HopperBlockEntityMixin.java [Hopper Drip Extraction Mixin]
│ └── ItemEntityMixin.java [Mega-Stack Aggregation & Smart Pickup Mixin]
│
└── util/
└── ModVersionGuard.java [Knot ClassLoader Runtime Safety Guard]🛠️ Cibles Complètes de Mixin & Analyse des Injections
1. ItemEntityMixin.java
- Classe Cible :
net.minecraft.world.entity.item.ItemEntity - Extension de Superclasse :
extends net.minecraft.world.entity.Entity
| Membre / Méthode | Annotation | Point d'Injection | Rôle |
|---|---|---|---|
getItem() | @Shadow | N/A | Accède à la pile d'items. |
setItem(ItemStack) | @Shadow | N/A | Modifie la pile d'items et met à jour les données. |
target | @Shadow | N/A | UUID du joueur ciblé (sécurité de jet d'item). |
pickupDelay | @Shadow | N/A | Ticks du délai de ramassage. |
age | @Shadow | N/A | Ticks de durée de vie avant disparition ($0\text{ à }6000$). |
setItem | @Inject | @At("TAIL") | Déclenche la mise à jour de l'étiquette quand la quantité change. |
isMergable | @Inject | @At("HEAD"), cancellable = true | Remplace la limite de pile par la GameRule max_clump_size. |
mergeWithNeighbours | @Redirect | INVOKE -> AABB.inflate(DDD) | Élargissement sans allocation du rayon de recherche ($r \in [1, 10]$). |
tryToMerge | @Inject | @At("HEAD"), cancellable = true | Exécute la somme 64 bits, l'héritage d'âge et la vérification de l'aimant. |
playerTouch | @Inject | @At("HEAD"), cancellable = true | Injecte en lot unique sous forme de piles vanilla propres. |
2. HopperBlockEntityMixin.java
- Classe Cible :
net.minecraft.world.level.block.entity.HopperBlockEntity
| Méthode | Annotation | Point d'Injection | Rôle |
|---|---|---|---|
addItem(Container, ItemEntity) | @Inject | @At("HEAD"), cancellable = true | Prélève des portions de 1 item ($2.5\text{ items/s}$) vers les entonnoirs. |
📄 Configuration des Mixins (item-clumps.mixins.json)
json
{
"required": true,
"package": "net.instantgratification.item_clumps.mixin",
"compatibilityLevel": "JAVA_25",
"refmap": "item-clumps-refmap.json",
"mixins": [
"HopperBlockEntityMixin",
"ItemEntityMixin"
],
"injectors": {
"defaultRequire": 1
}
}