호환성 및 타 모드 연동 (MC 26.2)
이 문서는 Minecraft 26.2 버전의 Item Clumps에 대한 타사 모드 연동, 동적 리플렉션 안전장치, Stack Size Adjuster 동기화 및 농장 호환성에 대해 다룹니다.
📊 기능 정보 상자
| 연동 대상 | 유형 | 호환성 상태 | 처리 메커니즘 |
|---|---|---|---|
| Magnet ("Let me get that!") | 선택적 | 🟢 100% 완벽 호환 | 동적 리플렉션 검사 (ig_magnet$isMagnetized / ig$isMagnetized) |
| Stack Size Adjuster | 선택적 | 🟢 동적 한도 동기화 | max_clump_size 등록을 getMaxStackSize()로 위임 |
| YetAnotherConfigLib (YACL v3) | 선택적 GUI | 🟢 지원됨 | GuiHelper.getOptionalYaclFactory를 통한 지연 클래스로딩 |
| ModMenu | 선택적 GUI | 🟢 지원됨 | ModMenu 진입점 연동 |
| 바닐라 자동화 / 레드스톤 | 핵심 | 🟢 100% 동등성 | 1개 깔때기 드립 추출 및 최신 수명 계승 |
🧲 1. 자석 모드 비행 중 보호
아이템 자석 모드(예: Magnet: Let me get that!)를 사용할 때 바닥의 아이템은 플레이어를 향해 3D 비행 궤적으로 이동합니다.
┌───────────────────────────────────────────────────────────┐
│ Item In-Flight Magnet Trajectory │
│ │
│ [Item A (In-Flight)] --------> [Player] │
│ │ │
│ (Passes close to Item B on ground) │
│ │ │
│ ❌ WITHOUT MAGNET CHECK: │
│ Item A merges with B; flight velocity resets; │
│ Item snaps to ground. │
│ │
│ ✅ WITH ITEM CLUMPS MAGNET CHECK: │
│ Merge paused while in-flight; │
│ Smooth curve preserved straight to player! │
└───────────────────────────────────────────────────────────┘Item Clumps는 컴파일 타임 하드코딩 의존성 없이 리플렉션을 통해 자석 상태를 확인합니다:
java
if (net.fabricmc.loader.api.FabricLoader.getInstance().isModLoaded("magnet")) {
try {
java.lang.reflect.Method isMagnetizedMethod;
try {
isMagnetizedMethod = this.getClass().getMethod("ig_magnet$isMagnetized");
} catch (NoSuchMethodException e) {
isMagnetizedMethod = this.getClass().getMethod("ig$isMagnetized");
}
if ((boolean) isMagnetizedMethod.invoke(this) || (boolean) isMagnetizedMethod.invoke(other)) {
ci.cancel();
return;
}
} catch (Throwable ignored) {}
}📦 2. Stack Size Adjuster 동적 동기화
Item Clumps와 함께 Stack Size Adjuster가 설치된 경우:
- 중복 게임 규칙 비활성화: Item Clumps는
item_clumps:max_clump_size의 등록 및 YACL 설정 위젯을 자동으로 비활성화합니다. - 통합 한도 동기화: 바닥 병합 한도가 자동으로
itemStack.getMaxStackSize()를 참조하여 Stack Size Adjuster의 전역 또는 아이템별 한도 설정을 그대로 따릅니다.
java
int maxClump;
if (net.fabricmc.loader.api.FabricLoader.getInstance().isModLoaded("stack-size-adjuster") ||
ItemClumpsFabric.MAX_CLUMP_SIZE == null) {
maxClump = thisStack.getMaxStackSize();
} else {
maxClump = DynamicGameRuleManager.getInt(this.level(), ItemClumpsFabric.MAX_CLUMP_SIZE);
}