1211 mods exsample
Skill code-onigiri/mc-modding-skill/.agent/skills/1211-mods-exsample
Minecraft開発用スキル
npx -y skills add code-onigiri/mc-modding-skill --skill 1211-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.21.1 NeoForge Moddingにおける実践的な実装パターン集。 エネルギー・GUI・ネットワーク・マルチブロック・レシピ・レンダリング・ スペル/AI/スクリプトなどの設計パターンを、16の主要Modの実装から抽出して解説。 Forge 1.20.1 → NeoForge 1.21.1 の移行差分(Data Component・Payload System・ Data Attachment)を加味したNeoForge版パターン集。
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.2 KB, as published. Nobody here has run it
概要
このSkillは Minecraft 1.21.1 NeoForge における設計パターンを、主要Modの実装から抽出したリファレンスです。 Forge 1.20.1からの移行(LazyOptional→直接Capability、NBT→Data Component、SimpleChannel→Payload System等) に加え、NeoForge 1.21.1特有のAPI(Data Component / Data Attachment / Payload System)を活用した 設計パターンを提供します。
✅ やるべきこと — 設計パターン別
BlockEntity設計
- BEが必要かどうかを最初に判断する — Botania機能花はBlock.tick() + scheduleTickで動作。BEは持続状態/Tick/ネットワーク参加が必要な場合のみ。
- BE登録方式はModの規模に合わせて選ぶ — 小規模: DeferredRegister / 中規模: Registrate / 大規模: 型安全ラッパーかMachineBuilder / マルチローダー: abstract bind。
- 保存データと同期データは分離して考える — 永続化(Data Component)・全量同期(getUpdateTag)・差分同期(Payload System/SyncData/@SyncToClient)の3層構造。
- NeoForgeではData Component + Payload Systemが基本同期方式 — 低頻度: Data Component + getUpdateTag / 高頻度: Payload Systemカスタムパケット / 宣言的: @SyncToClient。
- Capabilityは
@Nullable T直接取得に移行 — 1.20.1のLazyOptional/CapabilityTokenは廃止。BlockCapabilityを使う。
エネルギーシステム
- 独自電力型のData Component化はGregTech / Mekanismを参考にする — FloatingLongやChemicalStackをDataComponentとして定義し、Codec+StreamCodecで永続化+同期。
- 魔法エネルギーのNeoForge適応はBotania(80+ Component) / Ars Nouveauを参考にする — Mana/Sourceの保持と送受信をData Component + AttachmentTypeで再設計。
- 他Modエネルギーとの互換はMekanismのBlockCapability/ItemCapabilityラッパーを参考にする —
@Nullable T直接取得パターンに移行。
GUI/UIフレームワーク
- NeoForge対応WidgetツリーはLDLib ModularUIを参考にする — Widget親子構造 + SyncData自動双方向同期。1.21.1ではData Componentと連携。
- 高パフォーマンスUIはModernUIのスレッド分離+Granite GPUを参考にする — 1.21.1ではPayload Systemでのメッセージパイプ置き換え。
- Containerのデータ同期はData Component + Payload Systemの組み合わせを理解する — ContainerDataに代わるData Component同期パターン。
ネットワーク/同期
- Payload Systemへの移行はCreate CatnipPacketRegistry / Mekanism PayloadRegistrarを参考にする — SimpleChannel →
CustomPacketPayloadrecord +StreamCodec+PayloadRegistrar。 - 大規模ネットワークグラフはAE2 ME Network(27 Component化)を参考にする — MEネットワークのData Component + Payload 移行パターン。
- ブロック状態の自動同期はFarmer's DelightのPayload版調理Componentを参考にする — 調理状態のComponent管理 + Payload同期。
マルチブロック
- NeoForge対応マルチブロックはGregTech / Multiblocked2を参考にする — Trait分離 + Capability直接取得 + Payload移行。
- Mekanismの4層マルチブロック抽象は1.21.1でも維持 — MultiblockManager/Data/Cache/FormationProtocol の構造はそのままCapability直接取得に置き換え。
レシピ・データ駆動設計
- Data Component対応レシピAPIはJEI/EMIの1.21.1 Pluginを参考にする — ComponentChanges + Codecシリアライズ + サブタイプ統合。
- Interface InjectionによるMod連携はKubeJSの手法を参考にする — Mixinより安全なInterface Injectionで25+クラスに注入。CodecTypeWrapperでJS/JSON双方向変換。
- データ駆動装備はSuperbWarfareのGunData Component化を参考にする — GunDataをData Component化 + AttachmentシステムのPayload移行。
レンダリング
- NeoForgeインスタンスレンダリングはCreate Flywheel Visual/Renderer二重パスを参考にする — BERフォールバック付きインスタンスレンダリングのNeoForge適応。
- カスタムモデルはSuperbWarfare GeoRender+Data Component同期を参考にする — GeckoLib + Data Componentによるアニメーション状態同期。
スペル/エフェクトシステム
- スペルData Component化はArs Nouveauを参考にする — SpellDataをData Component化 + Payload Systemでの同期。
- 機能花のCapability直接取得はBotaniaを参考にする — LazyOptional廃止に伴い、
@Nullable T直接取得 + Data Attachment に移行。
AI/エンティティ
- Data Attachment移行はTouhouLittleMaid / Botania Familiarを参考にする — EntityデータのAttachmentType化とPayload同期。
- JSONアニメーション定義はTouhouLittleMaidを参考にする — カスタムモデルパイプライン+JSアニメーションのNeoForge適応。
スクリプト連携
- Interface InjectionベースのJS統合はKubeJSを参考にする — MixinではなくInterface Injectionでクラス拡張 + Componentラッパー。
- CodecTypeWrapperパターン — KubeJSのCodecTypeWrapperでCodec→JSラッパー変換。
パーティクルシステム
- カスタムパーティクルのフルライフサイクルを理解する — ParticleType登録(+Codec/StreamCodec)→Particleクラス実装→Provider+SpriteSet→テクスチャ/particles.json→スポーン。1.21.1ではParticleTypeコンストラクタにMapCodec+StreamCodecが必要。
- サーバー発動パーティクルはPayload Systemで送信する — SimpleChannel非推奨に伴い、CustomPacketPayload + StreamCodec + PayloadRegistrar を使用。
カスタムシェーダー
- カスタムシェーダーは
RegisterShadersEventでCoreShaderとして登録する — GLSL + RenderType.CompositeRenderType + CompositeState の3点セット。1.21.1のShader APIは1.20.1と互換。 - PostChainポストプロセスはフルスクリーンGLパスのため高コスト — 軽量エフェクトはParticle/シェーダーで済ませ、PostChainは画面全体の色調変更など限定的に使う。
ワールドジェン/鉱石生成
- ワールドジェンはConfiguredFeature/PlacedFeatureの2段階分離を理解する — 1.21.1ではデータ駆動JSONが基本。DatagenでJSONを生成し、
neoforge:biome_modifierでバイオーム注入。 - カスタム鉱脈はFeatureクラス継承 + Partパイプラインで実装する — 1.20.1のBiomeModification APIは廃止。datapack JSONベースのbiome_modifierに移行。
- 鉱石生成データは
ConfiguredFeatureProviderでDatagenする — 1.21.1では全FeatureがJSONデータ駆動。DatapackBuiltinEntriesProviderで一元管理。
設定システム
- ConfigはForgeConfigSpecで型安全に定義する — NeoForgeでもForgeConfigSpec互換。SpecPair + CommonConfig/ClientConfig/ServerConfigの3分割。
- 動的ConfigやホットリロードはCachedConfig + JSONパターンを検討する — ConfigEvent.Reloading購読 + CodecベースJSON Config。
- マルチローダー対応はInterfaceベースConfigを検討する — Configインターフェース + Forge/Fabric実装分離。NeoForgeでは
neoforge.mods.toml。
Mixin戦略
- Mixinは@Mixin + @Inject + @Atの基本3点を押さえる — NeoForge 1.21.1はJAVA_21互換、MixinBooter不要。@Accessor/@Invokerでprivate公開。
- Mixinはdomain別パッケージ + mixin.jsonプラグインで組織化する — IMixinConfigPluginで条件付き適用。shouldApplyMixin()で他Mod競合回避。
- Mixin以外の選択肢を常に先に検討する — イベント購読 / Interface Injection / Capability / CoreModの順。
サンドボックス/スクリプトセキュリティ
- スクリプトサンドボックスはClassFilter + カスタムClassLoaderの直列で実装する — ホワイトリスト/ブラックリスト2段階フィルター。ASM ClassVisitorでバイトコード検証。
- スクリプト実行にはタイムアウト制御 + 例外ハンドリングを必須とする — Watchdogスレッドによる割り込み。GraalVMではStatement LimitsでPrecise制御。
パフォーマンス/キャッシュ
- 高頻度ルックアップはLoadingCache + LRU + TTLでキャッシュする — Caffeine/LRU + ヒット率/ミス率のMetrics計測を組み込む。
- BlockEntityキャッシュはチャンク単位の無効化 + ワールドアンロードリスナーで設計する — ChunkedBECache + WorldEvent.Unload購読。
Mod統合/互換
- 他Mod統合はServiceLoaderベースのSPIで設計する — IModIntegration + ModIntegrationManagerで一括管理。Payload SystemベースのクロスMod通信。
- JEI/Jade/Curios統合は専用Pluginクラスで疎結合に保つ — Data Component + Payloadでデータ共有。NeoForgeではCapability直接取得で連携。
レジストリ管理
- 登録はDeferredRegister + 型安全ラッパーで統一する — 1.21.1では
DeferredRegister.Blocks/Itemsのショートカット利用可能。RegisterEventでの動的追加。 - カスタムレジストリはRegistryBuilder + NewRegistryEventで作成する — Codec + StreamCodec実装必須。1.21.1ではData ComponentとのCodec統一が重要。
- DataFixerUpperでレジストリ名変更に備える — RenameDataFixで破壊的変更回避。MissingMappingsEventで未登録エントリのリマップ。
❌ やってはいけないこと
- LazyOptionalを使わない — 1.21.1で廃止。
@Nullable T直接取得に移行。 - Data AttachmentをItemStackに使わない — ItemStackにはData Componentを使う。
- SimpleChannelを使わない — Payload Systemに移行。
new ResourceLocation()を使わない —ResourceLocation.fromNamespaceAndPath()を使う。@OnlyInをModコードで使わない — NeoForge内部専用。@Mod(dist = Dist.CLIENT)またはFMLClientSetupEventで分離。- チュートリアルレベルの質問にこのSkillを使わない — 基礎は
1211-neoforge-moddingスキルを参照。 - 外部Modの実装をそのままコピペしない — ライセンス違反になる。設計思想のみ参考にする。
- パーティクルシステムをスクラッチで書かない —
Particle/TextureSheetParticleの継承とParticleProviderのファクトリパターンを理解してから実装する。 - MCのレンダリングパイプラインを無視してGL呼び出しを直接書かない — カスタムシェーダーは
RegisterShadersEvent+RenderTypeの枠組みに従う。 - 独自Featureをスクラッチで書かない — 標準Feature + データ駆動JSONで十分なケースが大半。Partパイプラインは本当に必要な場合のみ。
- Mixinの@Overwriteを避ける — compat問題の原因。Interface Injection / @Inject / @Redirectで代替する。
- サンドボックスなしで外部スクリプトを実行しない — ClassFilter + カスタムClassLoader + タイムアウト制御の3点セットが必須。
- 大規模Modで全設定を1ファイルに詰め込まない — CommonConfig/ClientConfig/ServerConfigに分割する。
Forge 1.20.1 → NeoForge 1.21.1 移行チェックリスト
| 項目 | Forge 1.20.1 | NeoForge 1.21.1 |
|---|---|---|
| Capability | LazyOptional<T> | 直接 @Nullable T |
| ItemStackデータ | NBT (CompoundTag) | Data Component (DataComponentType<T>) |
| BE/Entityデータ | Capability + NBT | Data Attachment (AttachmentType<T>) |
| ネットワーク | SimpleChannel + registerMessage | CustomPacketPayload + StreamCodec + PayloadRegistrar |
| ResourceLocation | new ResourceLocation(...) | ResourceLocation.fromNamespaceAndPath(...) |
| DeferredRegister | DeferredRegister.create(...) | DeferredRegister.Blocks/Items.create(...) |
| クライアント分離 | @OnlyIn(Dist.CLIENT) | @Mod(dist=Dist.CLIENT) / FMLClientSetupEvent |
| イベントバス | bus = Bus.MOD / Bus.FORGE | bus = Bus.MOD / Bus.GAME |
| Mixin compat level | JAVA_17 | JAVA_21 |
| 設定ファイル | mods.toml | neoforge.mods.toml |
設計パターンリファレンス
| 設計カテゴリ | 内容 | ファイル | 読むタイミング | |---|---|---|---|---| | BlockEntity実装 | BE登録4方式、BEライフサイクル、ティック戦略、データ保存/読込、ネットワーク同期5方式、Capability提供、GUI連携、設計判断フローチャート | references/patterns/BE_IMPLEMENTATION.md | BEを新規実装・設計する際の最初に読むべき参照 | | エネルギーシステム | GregTech EU, Botania Mana, Ars Source, Mekanism Chemical, FE互換 (Data Component化含む) | references/patterns/POWER_SYSTEMS.md | 独自電力/エネルギー型をNeoForgeで実装する際 | | GUI/UIフレームワーク | LDLib ModularUI NeoForge対応, ModernUI Granite GPU, Data Component連携 | references/patterns/GUI_FRAMEWORKS.md | NeoForgeでカスタムGUIを実装する際 | | ネットワーク/同期 | AE2 ME Network 27 Component化, Create Catnip→Payload, Mekanism PayloadRegistrar | references/patterns/NETWORK_SYNC.md | Payload System移行やネットワーク同期を実装する際 | | マルチブロック | GregTech MetaMachine, Multiblocked2, Mekanism 4層抽象 (Capability直接取得版) | references/patterns/MULTIBLOCK.md | NeoForgeでマルチブロック構造を実装/移行する際 | | レシピ・データ駆動 | JEI/EMI 1.21.1 Plugin, KubeJS Interface Injection, SuperbWarfare Component化 | references/patterns/RECIPE_DATA.md | Data Component対応レシピ・データ駆動を実装する際 | | レンダリング | Create Flywheel Visual/Renderer二重パス, GeoRender + Data Component同期, VertexConsumer実践, EntityRenderer | references/patterns/RENDERING.md | NeoForgeでインスタンスレンダリングを適応する際 | | パーティクルシステム | ParticleType登録, Particleクラス実装, Provider/SpriteSet, テクスチャ設定, Payload同期, 応用パターン, 1.20.1→1.21.1移行ポイント | references/patterns/PARTICLE_SYSTEM.md | カスタムパーティクルエフェクトをNeoForgeで実装する際 | | カスタムシェーダー | CoreShader登録, GLSLソース, RenderType+CompositeState, PostChain, 1.21.1互換ノート | references/patterns/SHADER_SYSTEM.md | 発光/カスタム描画効果にシェーダーを使いたい際 | | スペル/エフェクト | Ars Nouveau Spell Component化+Payload同期, Botania機能花 Capability直接取得 | references/patterns/SPELL_EFFECT.md | スペルシステムをData Component化する際 | | AI/エンティティ | TouhouLittleMaid Data Attachment化, Botania Familiar, Ars Familiar | references/patterns/AI_ENTITY.md | エンティティデータのAttachment移行やAIを実装する際 | | スクリプト連携 | KubeJS Interface Injection + CodecTypeWrapper, Componentラッパー | references/patterns/SCRIPTING.md | NeoForgeでJS連携を実装する際 | | 移行ガイド | Forge 1.20.1 → NeoForge 1.21.1 全体移行パターン | references/MIGRATION_GUIDE.md | 既存Modを1.21.1に移行する際 | | ビルドアーキテクチャ | マルチモジュール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 | ネットワーク/同期(Payload化) / マルチブロック(Contraption) / レンダリング | | GregTech Modern | mods/GREGTECH_MODERN.md | エネルギーシステム(EU/Component化) / マルチブロック / GUI/UI | | Botania | mods/BOTANIA.md | エネルギーシステム(Mana/80+ Component) / スペル/エフェクト / AI/エンティティ | | AE2 | mods/AE2.md | ネットワーク/同期(ME Network 27 Component化) | | Ars Nouveau | mods/ARS_NOUVEAU.md | スペル/エフェクト / エネルギーシステム(Source) / AI/エンティティ | | Farmer's Delight | mods/FARMERS_DELIGHT.md | レシピ・データ駆動 / ネットワーク/同期(Payload) | | LDLib | mods/LDLIB.md | GUI/UIフレームワーク | | ModernUI | mods/MODERNUI.md | GUI/UIフレームワーク / レンダリング | | KubeJS/Rhino | mods/KUBEJS_RHINO.md | スクリプト連携(Interface Injection) | | TouhouLittleMaid | mods/TOUHOU_LITTLE_MAID.md | AI/エンティティ / レンダリング | | SuperbWarfare | mods/SUPERB_WARFARE.md | レシピ・データ駆動 / レンダリング(GeoRender) | | Multiblocked2 | mods/MULTIBLOCKED2.md | マルチブロック | | JEI | mods/JEI.md | レシピ・データ駆動(プラグインAPI) | | Jade | mods/JADE.md | レシピ・データ駆動(ツールチップ) | | EMI | mods/EMI.md | レシピ・データ駆動(Codecシリアライズ) |
関連スキル
- NeoForge 1.21.1 基礎 →
1211-neoforge-moddingスキル - Mixin実装 →
minecraft-mixinスキル - Forge 1.20.1 版 →
1201-mods-exsampleスキル
ライセンス
このSkill自体は MIT License で提供されます。
重要: 本Skillは16のオープンソースMinecraft Modの内部構造を分析したものです。
分析テキストはオリジナル作成ですが、参照元のModソースコードは各Modのライセンスに従います。
Modのライセンス情報は mods-references-neoforge/ 内の各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 | |
| SuperbWarfare | MIT | |
| Farmer's Delight | MIT | |
| GregTech Modern | LGPL v3 | |
| LDLib-Architectury | LGPL v3 | |
| Multiblocked2 | LGPL v3 |