Pembahasan Arsitektur & Mixin (MC 26.1.2)
Dokumen ini menjelaskan tata letak paket internal, hierarki kelas, rincian target Mixin, shadow member, dan titik injeksi untuk Item Clumps di Minecraft 26.1.2.
🌳 Hierarki Paket & Diagram Kelas
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]🛠️ Target Mixin Lengkap & Analisis Titik Injeksi
1. ItemEntityMixin.java
- Kelas Target:
net.minecraft.world.entity.item.ItemEntity - Ekstensi Superclass:
extends net.minecraft.world.entity.Entity
| Anggota / Metode | Anotasi | Titik Injeksi | Tujuan |
|---|---|---|---|
getItem() | @Shadow | T/A | Mengakses tumpukan item. |
setItem(ItemStack) | @Shadow | T/A | Mengubah tumpukan item dan memperbarui data pelacak. |
target | @Shadow | T/A | UUID pemain target. |
pickupDelay | @Shadow | T/A | Tick timer cooldown pengambilan. |
age | @Shadow | T/A | Tick timer usia despawn ($0$ hingga $6000$). |
tick | @Inject | @At("HEAD") | Memperbarui visibilitas label nama kustom secara dinamis. |
setItem | @Inject | @At("TAIL") | Memicu pembaruan label nama saat tumpukan berubah. |
isMergable | @Inject | @At("HEAD"), cancellable = true | Menimpa pemeriksaan tumpukan maks dengan GameRule max_clump_size. |
mergeWithNeighbours | @ModifyArgs | INVOKE -> AABB.inflate(DDD) | Memodifikasi argumen pelebaran horisontal ($0$ dan $2$) agar sesuai merge_radius. |
tryToMerge | @Inject | @At("HEAD"), cancellable = true | Menjalankan matematika penggabungan dan pewarisan usia termuda. |
playerTouch | @Inject | @At("HEAD"), cancellable = true | Memasukkan item ke inventaris secara bertahap dalam tumpukan vanilla yang rapi. |
2. HopperBlockEntityMixin.java
- Kelas Target:
net.minecraft.world.level.block.entity.HopperBlockEntity
| Metode | Anotasi | Titik Injeksi | Tujuan |
|---|---|---|---|
addItem(Container, ItemEntity) | @Inject | @At("HEAD"), cancellable = true | Mengambil irisan 1-item dari mega-clump ($2,5$ item/detik) ke dalam wadah corong. |
