Skip to content

アーキテクチャとMixinの解説 (MC 26.2)

本書では、Minecraft 26.2 における Item Clumps の内部パッケージ構成、クラス階層、Mixin対象、Shadowメンバー、注入ポイントを解説します。


🌳 パッケージ階層とクラス図

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]

🛠️ 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$ 〜 $6000$)。
setItem@Inject@At("TAIL")スタック数変更時にネームタグ更新を起動。
isMergable@Inject@At("HEAD"), cancellable = trueスタック判定を max_clump_size ルールで上書き。
mergeWithNeighbours@RedirectINVOKE -> AABB.inflate(DDD)水平探索半径 ($r \in [1, 10]$) を割り当てなしで拡張。
tryToMerge@Inject@At("HEAD"), cancellable = true64ビット加算、寿命継承、マグネット判定を実行。
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$ 個/秒) 抽出。

📄 Mixin設定 (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
    }
}

🔗 関連ドキュメント (MC 26.2)

Official documentation & web portal for Dasik Igaijinn mods.