Skip to content

ホッパーと自動化システムの連携 (MC 26.2)

本書では、Minecraft 26.2 におけるホッパー抽出メカニズム、転送速度の整合性、レッドストーン仕分け機の安定性、コンテナ連携を解説します。


📊 機能情報ボックス

項目仕様
システム名ホッパードリップ抽出エンジン
対象クラスnet.minecraft.world.level.block.entity.HopperBlockEntity
抽出メソッドHopperBlockEntity.addItem(Container, ItemEntity)
抽出速度8ティックにつき $1$ 個 ($2.5$ 個/秒)
減少処理originalStack.shrink(1) および entity.setItem() によるメタデータ更新
自動化互換性バニラのレッドストーンアイテム仕分け機・フィルターと100%互換

⚙️ 自動化ドリップ抽出アーキテクチャ

バニラでは、スタック数が $\le 64$ で空きがあればエンティティ全体が一度にホッパーに吸い込まれます。もし5,000個のメガスタックを一度に吸い込ませてしまうと、ホッパーから溢れるか大量のアイテムが消失してしまいます。

Item Clumps は HopperBlockEntity.addItem に介入し、ドリップ抽出 (1個ずつの取り出し) を適用します:

                       ┌────────────────────────────┐
                       │     Hopper Tick Cycle      │
                       │     (Every 8 Game Ticks)   │
                       └─────────────┬──────────────┘


                       ┌────────────────────────────┐
                       │  Is Item Entity Count > 1? │
                       └─────────────┬──────────────┘

                    ┌────────────────┴────────────────┐
                    │ (Yes)                           │ (No)
                    ▼                                 ▼
      ┌───────────────────────────┐     ┌───────────────────────────┐
      │ Clone Single Item Slice   │     │ Native Vanilla Extraction │
      │  baseItem = stack.copy(1) │     │ (Standard 1-item / stack) │
      └─────────────┬─────────────┘     └───────────────────────────┘


      ┌───────────────────────────┐
      │  Try Insert Into Hopper   │
      │ HopperBlockEntity.addItem │
      └─────────────┬─────────────┘

           ┌────────┴────────┐
           │                 │
      (Success)           (Failed / Full)
           │                 │
           ▼                 ▼
 ┌───────────────────┐ ┌───────────────┐
 │ Shrink Ground     │ │ Abort Transfer│
 │ Clump by 1;       │ │ Entity Retains│
 │ Refresh Name Tag. │ │ Full Count.   │
 └───────────────────┘ └───────────────┘

⏱️ 転送速度とレッドストーン仕分け機のパリティ

Minecraftバニラのホッパーは8ティック ($0.4$ 秒) ごとに動作します:

$$\text{Hopper Transfer Rate} = \frac{1\text{ item}}{8\text{ ticks}} = \frac{20\text{ ticks/s}}{8\text{ ticks}} = 2.5\text{ items/second}$$

Item Clumps は1サイクルにつき正確に $1$ 個ずつアイテムを抽出するため:

  • 標準的なアイテム仕分け機: フィルター用ホッパー (41-1-1-1-1設定) は、コンパレータ信号を狂わせたり隣接するレッドストーン回路を壊すことなく、正確な速度で集約アイテムを処理します。
  • 水流式仕分け機: ホッパー上を流れる巨大な集約アイテムは、水流を詰まらせたりエンティティの衝突負荷を生じさせることなく、スムーズに吸い込まれます。
  • ホッパー付きトロッコ: 通常のホッパーの2倍の速度 ($1$ ティックにつき $1$ アイテム = 毎秒20個) で回収し、バニラのトロッコの挙動と完全一致します。

💻 実際のJavaソースコード実装

Minecraft 26.2 の HopperBlockEntityMixin.java より:

java
@Inject(method = "addItem(Lnet/minecraft/world/Container;Lnet/minecraft/world/entity/item/ItemEntity;)Z", at = @At("HEAD"), cancellable = true)
private static void item_clumps$customHopperExtract(Container container, ItemEntity entity, CallbackInfoReturnable<Boolean> cir) {
    ItemStack itemStack = entity.getItem();
    int count = itemStack.getCount();
    if (count > 1) {
        // Entity is a clump. Extract exactly 1 item slice.
        ItemStack baseItem = itemStack.copyWithCount(1);
        
        ItemStack result = HopperBlockEntity.addItem(null, container, baseItem, null);
        if (result.isEmpty()) {
            // Hopper successfully absorbed the 1 item. Shrink entity stack.
            ItemStack originalStack = entity.getItem().copy();
            originalStack.shrink(1);
            entity.setItem(originalStack); // Updates standard item tracker and custom name
            cir.setReturnValue(true);
        } else {
            // Hopper was full or couldn't accept item
            cir.setReturnValue(false);
        }
    }
}

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

Official documentation & web portal for Dasik Igaijinn mods.