互換性と他MOD連携 (MC 26.2)
本書では、Minecraft 26.2 における他MOD連携、動的リフレクション保護、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. マグネットMOD飛行中の保護
アイテムマグネットMOD (例: 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);
}