Skip to content

깔때기 및 자동화 시스템 연동 (MC 26.2)

이 문서는 Minecraft 26.2 버전의 Item Clumps에 대한 깔때기 추출 메커니즘, 전송 속도 동등성, 레드스톤 분류기 안정성 및 보관함 연동에 대해 다룹니다.


📊 기능 정보 상자

속성세부 정보
시스템 이름깔때기 드립 추출 엔진
대상 클래스net.minecraft.world.level.block.entity.HopperBlockEntity
추출 메서드HopperBlockEntity.addItem(Container, ItemEntity)
추출 속도8틱당 $1$개 ($2.5$개/초)
아이템 감소 방식originalStack.shrink(1)entity.setItem() 메타데이터 갱신
자동화 호환성바닐라 레드스톤 아이템 분류기 및 필터와 100% 호환

⚙️ 자동화 드립 아키텍처

바닐라 Minecraft에서 깔때기는 수량이 $\le 64$이고 공간이 충분하면 ItemEntity 전체를 흡수합니다. 만약 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$개의 아이템만 추출하므로:

  • 표준 아이템 분류기: 필터 깔때기(41-1-1-1-1 설정)는 비교기 신호를 망가뜨리거나 인접한 레드스톤 회로를 교란하지 않고 완벽하게 정해진 속도로 아이템을 흡수합니다.
  • 수로형 분류기: 깔때기 라인 위를 흐르는 대형 뭉치가 물길을 막거나 충돌 렉을 유발하지 않고 부드럽게 흡수됩니다.
  • 깔때기 마인크래프트 카트: 일반 깔때기보다 2배 빠른 속도(1틱당 1개 = 초당 20개)로 아이템을 흡수하며, 바닐라 카트 동작과 100% 일치합니다.

💻 실제 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.