1201 mods exsample
Skill code-onigiri/mc-modding-skill/.agent/skills/1201-mods-exsample
Minecraft開発用スキル
npx -y skills add code-onigiri/mc-modding-skill --skill 1201-mods-exsampleAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Minecraft 1.20.1 Forge Moddingにおける実践的な実装パターン集。 エネルギー・GUI・ネットワーク・マルチブロック・レシピ・レンダリング・ スペル/AI/スクリプトなどの設計パターンを、17の主要Modの実装から抽出して解説。 Addon作成に使える部分は各Modトピックとして維持しつつ、Modに依存しない アーキテクチャ知識として整理する。
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
23.7 KB, as published. Nobody here has run it
概要
この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 |