name: 1201-mods-exsample description: > Minecraft 1.20.1 Forge Moddingにおける実践的な実装パターン集。 エネルギー・GUI・ネットワーク・マルチブロック・レシピ・レンダリング・ スペル/AI/スクリプトなどの設計パターンを、17の主要Modの実装から抽出して解説。 Addon作成に使える部分は各Modトピックとして維持しつつ、Modに依存しない アーキテクチャ知識として整理する。 license: MIT compatibility: Minecraft 1.20.1 Forge, JDK 17+ metadata: author: code-onigiri version: "2.0.0" mods: - Mekanism - Create - JustEnoughItems - Jade - EMI - KubeJS/Rhino - ModernUI - TouhouLittleMaid - Botania - Applied-Energistics-2 - Ars-Nouveau - Goety-2 - SuperbWarfare - Farmer's-Delight - GregTech-Modern - LDLib-Architectury - Multiblocked2
概要
このSkillは Minecraft 1.20.1 Forge における設計パターンを、主要Modの実装から抽出したリファレンスです。 チュートリアルに載らない「実際の大規模Modがどう実装しているか」を設計カテゴリ別に整理し、 アーキテクチャ設計・パフォーマンス最適化・API設計・データ駆動設計などの実践的ノウハウを提供します。
✅ やるべきこと — 設計パターン別
BlockEntity設計
- BEが必要かどうかを最初に判断する — Botania機能花はBlock.tick() + scheduleTickで動作。BEは持続状態/Tick/ネットワーク参加が必要な場合のみ。
- BE登録方式はModの規模に合わせて選ぶ — 小規模: DeferredRegister / 中規模: Registrate / 大規模: 型安全ラッパー(Mek)かMachineBuilder(GT) / マルチローダー: abstract bind(Botania)。
- 保存データと同期データは分離して考える — 永続化(saveAdditional/load)・全量同期(getUpdateTag)・差分同期(カスタムパケット/SyncData/@SyncToClient)の3層構造を意識する。
- 同期頻度に応じて方式を選ぶ — 低頻度(数秒単位): 全量NBT / 中頻度(毎Tick数回): ContainerData / 高頻度(毎Tick): カスタム差分パケット / 宣言的: @SyncToClient/SyncData。
- Capability提供はResolver/Proxy/Holderの3層分離を検討する — Mekanismの設計が参考になる。BlockLookaside(Botania)という選択肢もある。
エネルギーシステム
- 独自電力型の定義はGregTech EUを参考にする — 実数型FloatingLong + Capabilityプロバイダ分離。long/doubleでは不足する精密演算への対処。
- 魔法エネルギーはBotania Mana / Ars Nouveau Source / Goety Soulを比較検討する — ネットワーク型(Mana) vs ブロック局所型(Source) vs マルチCapability型(Soul)の使い分け。
- 複数流体/ガス型はMekanism Chemicalを参考にする — ChemicalType + ChemicalStack + Capabilityの3層設計。IGasHandler / IInfusionHandler / IPigmentHandler の派生体系。
- 他Modエネルギーとの互換はMekanism IEnergyCompatを参考にする — FE互換ラッパーと動的変換レート。
GUI/UIフレームワーク
- ウィジェットツリーはLDLib ModularUIを参考にする — Widget親子構造 + SyncData自動双方向同期 + レイアウト自動計算。
- 高パフォーマンスUIはModernUIのスレッド分離を参考にする — 専用UIスレッド + ハンドラーメッセージパイプ + Granite GPUレンダリング。
- Containerのデータ同期はContainerData + カスタムパケットの組み合わせを理解する — 16bit制約とエネルギー量の2スロット分割。
ネットワーク/同期
- 大規模ネットワークグラフはAE2 ME Networkを参考にする — GridNode + GridTick のO(ネットワーク数)ティック vs O(ノード数)ティックの設計判断。
- 動的ネットワークはMekanism DynamicNetwork (CRTP)を参考にする — TransmitterNetworkRegistry + Network-Level Tickingによるパフォーマンス最適化。
- ブロック状態の自動同期はFarmer's DelightのSyncedBlockEntityを参考にする — 自動同期BE + ContainerDataパターン。
マルチブロック
- 複雑マルチブロックはGregTech MetaMachine/Patternを参考にする — Trait分離 + BlockPattern 3Dマッチング + ベンチレベルの機械階層。
- 簡易マルチブロックはMultiblocked2のJSON定義を参考にする — 宣言的JSON定義 + Traitシステム + 他Mod連携。
- 巨大コンテナ構造はMekanismの階層型マルチブロックを参考にする — 4層抽象(MultiblockManager→Data→Cache→FormationProtocol)の設計。
レシピ・データ駆動設計
- 大規模レシピインデックスはMekanism逆引きインデックスを参考にする — IngredientType別のO(1)ルックアップ。
- プラグインAPIはJEI/Jadeの段階的登録を参考にする — 登録フェーズを分割してロード順序問題を回避。
- データ駆動装備/武器はSuperbWarfare GunData JSONを参考にする — JSON定義パラメータ + アタッチメント合成システム。
- Codecファースト設計はEMIのComponentChangesパターンを参考にする — CodecがあればJSON⇔Javaの双方向変換が保証される。
レンダリング
- インスタンスレンダリングはCreate Flywheelを参考にする — BERフォールバック付きインスタンスレンダリング。
- カスタムモデルアニメーションはSuperbWarfare GeoRenderを参考にする — GeckoLibモデル + アニメーション状態マシン。
- エフェクトレンダリングはBotaniaの花エフェクトを参考にする — 軽量パーティクル + イベント駆動描画。
スペル/エフェクトシステム
- 構築型スペルはArs Nouveau Glyph/Context/Resolverを参考にする — Glyph(部品)→Context(実行環境)→Resolver(効果解決)の3層分離。
- イベント駆動ブロックはBotania機能花を参考にする — BlockEntityなしでBlockが機能する設計。ManaPoolやSparkの連携。
AI/エンティティ
- 高度エンティティAIはTouhouLittleMaidのBrainベースを参考にする — GoalSelectorよりBrain/Activity/Scheduleの方が拡張性が高い。
- 使い魔システムはArs Nouveau Familiar / Goety Summonを参考にする — プレイヤー追従・オーダー発行・スキル実行の一連の流れ。
- カスタムモデル/アニメーションはTouhouLittleMaidを参考にする — JSアニメーション定義 + マルチレイヤーモデルローダー。
スクリプト連携
- JSエンジン統合はKubeJS/Rhinoを参考にする — イベントブリッジ・型ラッパー・サンドボックスの3層設計。
- プラグインスクリプトのサンドボックス分離はKubeJSのセキュリティモデルを参考にする — ClassFilter + カスタムクラスローダー + タイムアウト制御。
パーティクルシステム
- カスタムパーティクルのフルライフサイクルを理解する — ParticleType登録→Particleクラス実装→Provider+SpriteSet→テクスチャ/particles.json→スポーン→(任意)ネットワーク同期。Botaniaの軽量設計方針も参考にする。
- サーバー発動パーティクルはSimpleChannelで送信する — 常時エフェクトは
Block.animateTick()でクライアントローカルで十分。レシピ完了などサーバー判断が必要な場合のみパケットを使う。 - パーティクルパフォーマンスを意識する — 同時表示2000超でFPS低下。
addAlwaysVisibleParticleは必要な場面だけ。負荷に応じた動的スポーン制御を検討する。
カスタムシェーダー
- カスタムシェーダーは
RegisterShadersEventでCoreShaderとして登録する — GLSL(.vsh/.fsh) + RenderType.CompositeRenderType + CompositeState の3点セット。 - PostChainポストプロセスはフルスクリーンGLパスのため高コスト — 1pass=1フルスクリーン描画。必要な場面だけ使い、軽量なエフェクトはParticle/シェーダーで済ませる。
ワールドジェン/鉱石生成
- ワールドジェンはConfiguredFeature/PlacedFeatureの2段階分離を理解する — Feature(生成ロジック)→ConfiguredFeature(設定)→PlacedFeature(配置)の3層パイプライン。
- カスタム鉱脈はFeatureクラス継承 + Partパイプラインで実装する — trunk→branch→leafの複数Part置換。StoneDepth + TagMatch RuleTestの組み合わせで鉱石タイプ別制御。
- 鉱石追加はBiome Modification APIで行う —
BiomeLoadingEvent+BiomeSelectors+FeatureOrderの順序制御。
設定システム
- ConfigはForgeConfigSpecで型安全に定義する — SpecPair + CommonConfig/ClientConfig/ServerConfigの3分割。カテゴリpush/popでグループ化。
- 動的ConfigやホットリロードはCachedConfig + JSONパターンを検討する — キャッシュ無効化 + ConfigEvent.Reloading購読。CodecベースJSON Configでランタイム変更。
- マルチローダー対応はInterfaceベースConfigを検討する — Configインターフェース + Forge/Fabric実装分離。CachedConfigラッパーで遅延読み込み。
Mixin戦略
- Mixinは@Mixin + @Inject + @Atの基本3点を押さえる — HEAD/RETURN/INVOKE選択基準。CallbackInfo vs CallbackInfoReturnableの使い分け。@Accessor/@Invokerでprivate公開。
- Mixinはdomain別パッケージ + mixin.jsonプラグインで組織化する — IMixinConfigPluginで条件付き適用。shouldApplyMixin()で他Mod競合回避。
- Mixin以外の選択肢を常に先に検討する — イベント購読 / Interface Injection / Capability / CoreModの順。
サンドボックス/スクリプトセキュリティ
- スクリプトサンドボックスはClassFilter + カスタムClassLoaderの直列で実装する — ホワイトリスト/ブラックリスト2段階フィルター。ASM ClassVisitorでバイトコード検証。
- スクリプト実行にはタイムアウト制御 + 例外ハンドリングを必須とする — Watchdogスレッドによる割り込み。InstructionCounterでPrecise制御。
パフォーマンス/キャッシュ
- 高頻度ルックアップはLoadingCache + LRU + TTLでキャッシュする — Caffeine/LRU + ヒット率/ミス率のMetrics計測を組み込む。
- BlockEntityキャッシュはチャンク単位の無効化 + ワールドアンロードリスナーで設計する — ChunkedBECache + WorldEvent.Unload購読。スナップショット反復でCME回避。
Mod統合/互換
- 他Mod統合はServiceLoaderベースのSPIで設計する — IModIntegration + ModIntegrationManagerで一括管理。ModList.get().isLoaded()でOptional分岐。
- JEI/Jade/Curios統合は専用Pluginクラスで疎結合に保つ — IXeiPlugin / ITooltipProvider / ICuriosSlot実装。Data Componentで共通データ共有。
レジストリ管理
- 登録はDeferredRegister + 型安全ラッパーで統一する — 16種のバニラレジストリ対応。RegisterEventでの動的追加も理解。
- カスタムレジストリはRegistryBuilder + NewRegistryEventで作成する — Codec + StreamCodec実装必須。フリーズ前にDatagen。
- DataFixerUpperでレジストリ名変更に備える — RenameDataFix / BlockStateRenameFixで破壊的変更回避。MissingMappingsEventで未登録エントリのリマップ。
❌ やってはいけないこと
- チュートリアルレベルの質問にこのSkillを使わない — 基礎は
1201-forge-moddingスキルを参照。 - 外部Modの実装をそのままコピペしない — ライセンス違反になる。設計思想のみ参考にする。
- 独自電力型をいきなり作らない — FE(Forge Energy)で十分なケースが大半。どうしても必要な場合のみGregTech EUやBotania Manaを参考にする。
- マルチブロックをスクラッチで実装しない — Multiblocked2などのフレームワーク利用を先に検討する。
- 大規模ネットワークを単純なループで実装しない — AE2/MekanismのNetwork-Level Tickingパターンを理解してから設計する。
- GUI描画でバニラ範囲を超える場合に直接GLステートを操作しない — ModernUIの抽象化またはLDLibのWidgetを活用する。
- GUIスレッドでワールド操作をしない — ModernUIのメッセージパイプかSimpleChannelを使う。
- パーティクルシステムをスクラッチで書かない —
Particle/TextureSheetParticleの継承とParticleProviderのファクトリパターンを理解してから実装する。 - MCのレンダリングパイプラインを無視してGL呼び出しを直接書かない — カスタムシェーダーは
RegisterShadersEvent+RenderTypeの枠組みに従う。 - 独自Featureをスクラッチで書かない — 標準OreFeatureで十分なケースが大半。Trident/Partパイプラインが必要かどうかを先に判断する。
- Mixinの@Overwriteを避ける — compat問題の原因。@Inject / @Redirect / Interface Injectionで代替できないか必ず検討する。
- サンドボックスなしで外部スクリプトを実行しない — ClassFilter + カスタムClassLoader + タイムアウト制御の3点セットが必須。
- 大規模Modで全設定を1ファイルに詰め込まない — CommonConfig/ClientConfig/ServerConfigに分割する。
設計パターンリファレンス
| 設計カテゴリ | 内容 | ファイル | 読むタイミング | |---|---|---|---|---| | BlockEntity実装 | BE登録4方式、BEライフサイクル、ティック戦略、データ保存/読込、ネットワーク同期5方式、Capability提供、GUI連携、設計判断フローチャート | references/patterns/BE_IMPLEMENTATION.md | BEを新規実装・設計する際の最初に読むべき参照 | | エネルギーシステム | GregTech EU, Botania Mana, Ars Source, Goety Soul, Mekanism Chemical, FE互換 | references/patterns/POWER_SYSTEMS.md | 独自電力/エネルギー型を実装する際 | | GUI/UIフレームワーク | LDLib ModularUI Widgetツリー, ModernUIスレッド分離, ContainerData | references/patterns/GUI_FRAMEWORKS.md | カスタムGUIや高度なUIを実装する際 | | ネットワーク/同期 | AE2 GridNodeティック, Mekanism DynamicNetwork, Create Catnip, SyncedBlockEntity | references/patterns/NETWORK_SYNC.md | ブロック間ネットワーク・同期システムを実装する際 | | マルチブロック | GregTech MetaMachine+Pattern, Multiblocked2 JSON定義, Mekanism 4層抽象 | references/patterns/MULTIBLOCK.md | マルチブロック構造を実装する際 | | レシピ・データ駆動 | Mekanism逆引きインデックス, JEI/EMI Plugin, SuperbWarfare JSON駆動, KubeJSデータ | references/patterns/RECIPE_DATA.md | レシピシステム・データ駆動設計を実装する際 | | レンダリング | Create Flywheel, SuperbWarfare GeoRender, Botaniaエフェクト, BER, VertexConsumer実践, Flywheel Instance, GeckoLib実装手順, EntityRenderer | references/patterns/RENDERING.md | インスタンスレンダリングやカスタムモデルを実装する際 | | パーティクルシステム | ParticleType登録, Particleクラス実装, Provider/SpriteSet, テクスチャ設定, スポーン方法, Network同期, 応用パターン(軌跡/ビーム/バースト), 完全E2E例 | references/patterns/PARTICLE_SYSTEM.md | カスタムパーティクルエフェクトを実装する際 | | カスタムシェーダー | CoreShader登録, GLSLソース, RenderType+CompositeState, BER+シェーダー連携, PostChainポストプロセス | references/patterns/SHADER_SYSTEM.md | 発光/カスタム描画効果にシェーダーを使いたい際 | | スペル/エフェクト | Ars Nouveau Glyph 3層分離, Botania機能花 イベント駆動 | references/patterns/SPELL_EFFECT.md | 構築型スペルやエフェクトブロックを実装する際 | | AI/エンティティ | TouhouLittleMaid Brain, Ars Familiar, Goety Summon, Botania Spark | references/patterns/AI_ENTITY.md | 高度なエンティティAIや使い魔を実装する際 | | スクリプト連携 | KubeJS/Rhino イベントブリッジ・サンドボックス・CodecTypeWrapper | references/patterns/SCRIPTING.md | JSスクリプト連携やプラグインシステムを実装する際 | | ビルドアーキテクチャ | マルチモジュールBuild, Xplat/Forge/Fabric分離, ServiceLoader抽象, アノテーションプロセッサ | references/patterns/BUILD_ARCHITECTURE.md | 大規模Modのビルド構成・マルチローダー対応を設計する際 | | レジストリ管理 | カスタムレジストリ+フリーズ, 型安全RegistryObject, DoubleDeferredRegister, Addonアノテーション発見 | references/patterns/REGISTRY_MANAGEMENT.md | 多数のオブジェクトを体系的に登録するレジストリ設計を行う際 | | コンポジション/Trait | BEBehaviour, MachineTrait, Capability Resolver/Proxy, Composition over Inheritance | references/patterns/COMPOSITION_TRAIT.md | 継承ではなくTrait合成でマシン/BEを設計する際 | | 設定システム | ファイル分割, CachedConfig+無効化, インターフェースベース設定, 動的Config生成, JSON/ホットリロード | references/patterns/CONFIG_SYSTEMS.md | 大規模Modの設定管理アーキテクチャを設計する際 | | Mixin戦略 | Mixin不使用戦略, プロパティ制御, Xplat/Forge/Fabric三段階分割, Interface Injection代替 | references/patterns/MIXIN_STRATEGY.md | Mixinの組織化や使用判断・代替手法を検討する際 | | サンドボックス/スクリプト | クラスフィルター, アノテーション公開面制御, TypeInfo階層, ScriptPack, カスタムイベントシステム | references/patterns/SANDBOX_SCRIPTING.md | スクリプトエンジンのサンドボックス分離・型変換設計を行う際 | | パフォーマンス/キャッシュ | RecipeDB木構造, 入力キャッシュ階層, LazyTagLookup, ForkJoinPool並列処理, EnumMap効率化 | references/patterns/PERFORMANCE_CACHE.md | 大規模レシピ検索・低レイテンシ同期・並列処理を最適化する際 | | 統合/互換モジュール | LookingAt抽象化, XEI統合, 互換ファサード, IMC拡張, Plugin発見パターン | references/patterns/INTEGRATION_MODULE.md | 他Modとの疎結合な統合システム・プラグイン設計を行う際 | | ワールドジェン/鉱石 | 三相パイプライン, Codec Dispatch鉱脈, データ駆動ローダー, DimensionMarker, チャンク消費管理 | references/patterns/WORLDGEN_ORES.md | 大規模なワールドジェン・鉱石生成システムを設計する際 |
補足: Addon開発のための各Modトピック
以下のModはAddon開発で直接参照するケースが多いため、関連性の高い設計パターンへのリンクを記載する。
| Mod | ファイル | 主に関心を持つべき設計パターン | |---|---|---|---| | Mekanism | mods/MEKANISM.md | エネルギーシステム / ネットワーク/同期 / マルチブロック / レシピ・データ駆動 | | Create | mods/CREATE.md | ネットワーク/同期 / マルチブロック(Contraption) / レンダリング | | GregTech Modern | mods/GREGTECH_MODERN.md | エネルギーシステム(EU) / マルチブロック / GUI/UI | | Botania | mods/BOTANIA.md | エネルギーシステム(Mana) / スペル/エフェクト / AI/エンティティ | | AE2 | mods/AE2.md | ネットワーク/同期(ME Network) | | Ars Nouveau | mods/ARS_NOUVEAU.md | スペル/エフェクト / エネルギーシステム(Source) / AI/エンティティ | | Goety 2 | mods/GOETY_2.md | エネルギーシステム(Soul) / AI/エンティティ(Summon) | | Farmer's Delight | mods/FARMERS_DELIGHT.md | レシピ・データ駆動 / ネットワーク/同期(SyncedBE) | | LDLib | mods/LDLIB.md | GUI/UIフレームワーク | | ModernUI | mods/MODERNUI.md | GUI/UIフレームワーク / レンダリング | | KubeJS/Rhino | mods/KUBEJS_RHINO.md | スクリプト連携 | | TouhouLittleMaid | mods/TOUHOU_LITTLE_MAID.md | AI/エンティティ / レンダリング | | SuperbWarfare | mods/SUPERB_WARFARE.md | レシピ・データ駆動 / レンダリング | | Multiblocked2 | mods/MULTIBLOCKED2.md | マルチブロック | | JEI | mods/JEI.md | レシピ・データ駆動(プラグインAPI) | | Jade | mods/JADE.md | レシピ・データ駆動(ツールチップ) | | EMI | mods/EMI.md | レシピ・データ駆動(Codecシリアライズ) |
関連スキル
- Forge 1.20.1 基礎 →
1201-forge-moddingスキル - Mixin実装 →
minecraft-mixinスキル - NeoForge 1.21.1 版 →
1211-mods-exsampleスキル
ライセンス
このSkill自体は MIT License で提供されます。
重要: 本Skillは17のオープンソースMinecraft Modの内部構造を分析したものです。
分析テキストはオリジナル作成ですが、参照元のModソースコードは各Modのライセンスに従います。
Modのライセンス情報は mods-references/ 内の各Modディレクトリにあります。
| Mod | ライセンス | 備考 |
|---|---|---|
| Mekanism | MIT | |
| Create | MIT (コード), ARR (アセット) | コードのみMIT、アセットはAll Rights Reserved |
| Just Enough Items (JEI) | MIT | |
| Jade | CC BY-NC-SA 4.0 | 非商用利用 |
| EMI | MIT | |
| KubeJS | LGPL v3 | |
| Rhino | MPL 2.0 | |
| ModernUI | LGPL v3 | |
| TouhouLittleMaid | MIT (コード), CC BY-NC-SA 4.0 (アセット) | デュアルライセンス |
| Botania | Botania License (オープン、要帰属表示) | カスタムオープンライセンス |
| Applied Energistics 2 | LGPL v3 | |
| Ars Nouveau | LGPL v3 | |
| Goety 2 | LGPL v3 | |
| SuperbWarfare | MIT | |
| Farmer's Delight | MIT | |
| GregTech Modern | LGPL v3 | |
| LDLib-Architectury | LGPL v3 | |
| Multiblocked2 | LGPL v3 |