1211-mods-exsample

star 1

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版パターン集。

code-onigiri By code-onigiri schedule Updated 6/9/2026

name: 1211-mods-exsample description: > 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版パターン集。 license: MIT compatibility: Minecraft 1.21.1 NeoForge, JDK 21+ metadata: author: code-onigiri version: "2.0.0" mods: - Mekanism - Create - JustEnoughItems - Jade - EMI - KubeJS/Rhino - ModernUI - TouhouLittleMaid - Botania - Applied-Energistics-2 - Ars-Nouveau - SuperbWarfare - Farmer's-Delight - GregTech-Modern - LDLib-Architectury - Multiblocked2


概要

この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設計

  1. BEが必要かどうかを最初に判断する — Botania機能花はBlock.tick() + scheduleTickで動作。BEは持続状態/Tick/ネットワーク参加が必要な場合のみ。
  2. BE登録方式はModの規模に合わせて選ぶ — 小規模: DeferredRegister / 中規模: Registrate / 大規模: 型安全ラッパーかMachineBuilder / マルチローダー: abstract bind。
  3. 保存データと同期データは分離して考える — 永続化(Data Component)・全量同期(getUpdateTag)・差分同期(Payload System/SyncData/@SyncToClient)の3層構造。
  4. NeoForgeではData Component + Payload Systemが基本同期方式 — 低頻度: Data Component + getUpdateTag / 高頻度: Payload Systemカスタムパケット / 宣言的: @SyncToClient。
  5. Capabilityは@Nullable T直接取得に移行 — 1.20.1のLazyOptional/CapabilityTokenは廃止。BlockCapabilityを使う。

エネルギーシステム

  1. 独自電力型のData Component化はGregTech / Mekanismを参考にする — FloatingLongやChemicalStackをDataComponentとして定義し、Codec+StreamCodecで永続化+同期。
  2. 魔法エネルギーのNeoForge適応はBotania(80+ Component) / Ars Nouveauを参考にする — Mana/Sourceの保持と送受信をData Component + AttachmentTypeで再設計。
  3. 他Modエネルギーとの互換はMekanismのBlockCapability/ItemCapabilityラッパーを参考にする@Nullable T 直接取得パターンに移行。

GUI/UIフレームワーク

  1. NeoForge対応WidgetツリーはLDLib ModularUIを参考にする — Widget親子構造 + SyncData自動双方向同期。1.21.1ではData Componentと連携。
  2. 高パフォーマンスUIはModernUIのスレッド分離+Granite GPUを参考にする — 1.21.1ではPayload Systemでのメッセージパイプ置き換え。
  3. Containerのデータ同期はData Component + Payload Systemの組み合わせを理解する — ContainerDataに代わるData Component同期パターン。

ネットワーク/同期

  1. Payload Systemへの移行はCreate CatnipPacketRegistry / Mekanism PayloadRegistrarを参考にする — SimpleChannel → CustomPacketPayload record + StreamCodec + PayloadRegistrar
  2. 大規模ネットワークグラフはAE2 ME Network(27 Component化)を参考にする — MEネットワークのData Component + Payload 移行パターン。
  3. ブロック状態の自動同期はFarmer's DelightのPayload版調理Componentを参考にする — 調理状態のComponent管理 + Payload同期。

マルチブロック

  1. NeoForge対応マルチブロックはGregTech / Multiblocked2を参考にする — Trait分離 + Capability直接取得 + Payload移行。
  2. Mekanismの4層マルチブロック抽象は1.21.1でも維持 — MultiblockManager/Data/Cache/FormationProtocol の構造はそのままCapability直接取得に置き換え。

レシピ・データ駆動設計

  1. Data Component対応レシピAPIはJEI/EMIの1.21.1 Pluginを参考にする — ComponentChanges + Codecシリアライズ + サブタイプ統合。
  2. Interface InjectionによるMod連携はKubeJSの手法を参考にする — Mixinより安全なInterface Injectionで25+クラスに注入。CodecTypeWrapperでJS/JSON双方向変換。
  3. データ駆動装備はSuperbWarfareのGunData Component化を参考にする — GunDataをData Component化 + AttachmentシステムのPayload移行。

レンダリング

  1. NeoForgeインスタンスレンダリングはCreate Flywheel Visual/Renderer二重パスを参考にする — BERフォールバック付きインスタンスレンダリングのNeoForge適応。
  2. カスタムモデルはSuperbWarfare GeoRender+Data Component同期を参考にする — GeckoLib + Data Componentによるアニメーション状態同期。

スペル/エフェクトシステム

  1. スペルData Component化はArs Nouveauを参考にする — SpellDataをData Component化 + Payload Systemでの同期。
  2. 機能花のCapability直接取得はBotaniaを参考にする — LazyOptional廃止に伴い、@Nullable T 直接取得 + Data Attachment に移行。

AI/エンティティ

  1. Data Attachment移行はTouhouLittleMaid / Botania Familiarを参考にする — EntityデータのAttachmentType化とPayload同期。
  2. JSONアニメーション定義はTouhouLittleMaidを参考にする — カスタムモデルパイプライン+JSアニメーションのNeoForge適応。

スクリプト連携

  1. Interface InjectionベースのJS統合はKubeJSを参考にする — MixinではなくInterface Injectionでクラス拡張 + Componentラッパー。
  2. CodecTypeWrapperパターン — KubeJSのCodecTypeWrapperでCodec→JSラッパー変換。

パーティクルシステム

  1. カスタムパーティクルのフルライフサイクルを理解する — ParticleType登録(+Codec/StreamCodec)→Particleクラス実装→Provider+SpriteSet→テクスチャ/particles.json→スポーン。1.21.1ではParticleTypeコンストラクタにMapCodec+StreamCodecが必要。
  2. サーバー発動パーティクルはPayload Systemで送信する — SimpleChannel非推奨に伴い、CustomPacketPayload + StreamCodec + PayloadRegistrar を使用。

カスタムシェーダー

  1. カスタムシェーダーはRegisterShadersEventでCoreShaderとして登録する — GLSL + RenderType.CompositeRenderType + CompositeState の3点セット。1.21.1のShader APIは1.20.1と互換。
  2. PostChainポストプロセスはフルスクリーンGLパスのため高コスト — 軽量エフェクトはParticle/シェーダーで済ませ、PostChainは画面全体の色調変更など限定的に使う。

ワールドジェン/鉱石生成

  1. ワールドジェンはConfiguredFeature/PlacedFeatureの2段階分離を理解する — 1.21.1ではデータ駆動JSONが基本。DatagenでJSONを生成し、neoforge:biome_modifierでバイオーム注入。
  2. カスタム鉱脈はFeatureクラス継承 + Partパイプラインで実装する — 1.20.1のBiomeModification APIは廃止。datapack JSONベースのbiome_modifierに移行。
  3. 鉱石生成データはConfiguredFeatureProviderでDatagenする — 1.21.1では全FeatureがJSONデータ駆動。DatapackBuiltinEntriesProviderで一元管理。

設定システム

  1. ConfigはForgeConfigSpecで型安全に定義する — NeoForgeでもForgeConfigSpec互換。SpecPair + CommonConfig/ClientConfig/ServerConfigの3分割。
  2. 動的ConfigやホットリロードはCachedConfig + JSONパターンを検討する — ConfigEvent.Reloading購読 + CodecベースJSON Config。
  3. マルチローダー対応はInterfaceベースConfigを検討する — Configインターフェース + Forge/Fabric実装分離。NeoForgeではneoforge.mods.toml

Mixin戦略

  1. Mixinは@Mixin + @Inject + @Atの基本3点を押さえる — NeoForge 1.21.1はJAVA_21互換、MixinBooter不要。@Accessor/@Invokerでprivate公開。
  2. Mixinはdomain別パッケージ + mixin.jsonプラグインで組織化する — IMixinConfigPluginで条件付き適用。shouldApplyMixin()で他Mod競合回避。
  3. Mixin以外の選択肢を常に先に検討する — イベント購読 / Interface Injection / Capability / CoreModの順。

サンドボックス/スクリプトセキュリティ

  1. スクリプトサンドボックスはClassFilter + カスタムClassLoaderの直列で実装する — ホワイトリスト/ブラックリスト2段階フィルター。ASM ClassVisitorでバイトコード検証。
  2. スクリプト実行にはタイムアウト制御 + 例外ハンドリングを必須とする — Watchdogスレッドによる割り込み。GraalVMではStatement LimitsでPrecise制御。

パフォーマンス/キャッシュ

  1. 高頻度ルックアップはLoadingCache + LRU + TTLでキャッシュする — Caffeine/LRU + ヒット率/ミス率のMetrics計測を組み込む。
  2. BlockEntityキャッシュはチャンク単位の無効化 + ワールドアンロードリスナーで設計する — ChunkedBECache + WorldEvent.Unload購読。

Mod統合/互換

  1. 他Mod統合はServiceLoaderベースのSPIで設計する — IModIntegration + ModIntegrationManagerで一括管理。Payload SystemベースのクロスMod通信。
  2. JEI/Jade/Curios統合は専用Pluginクラスで疎結合に保つ — Data Component + Payloadでデータ共有。NeoForgeではCapability直接取得で連携。

レジストリ管理

  1. 登録はDeferredRegister + 型安全ラッパーで統一する — 1.21.1ではDeferredRegister.Blocks/Itemsのショートカット利用可能。RegisterEventでの動的追加。
  2. カスタムレジストリはRegistryBuilder + NewRegistryEventで作成する — Codec + StreamCodec実装必須。1.21.1ではData ComponentとのCodec統一が重要。
  3. DataFixerUpperでレジストリ名変更に備える — RenameDataFixで破壊的変更回避。MissingMappingsEventで未登録エントリのリマップ。

❌ やってはいけないこと

  1. LazyOptionalを使わない — 1.21.1で廃止。@Nullable T 直接取得に移行。
  2. Data AttachmentをItemStackに使わない — ItemStackにはData Componentを使う。
  3. SimpleChannelを使わない — Payload Systemに移行。
  4. new ResourceLocation() を使わないResourceLocation.fromNamespaceAndPath() を使う。
  5. @OnlyIn をModコードで使わない — NeoForge内部専用。@Mod(dist = Dist.CLIENT) または FMLClientSetupEvent で分離。
  6. チュートリアルレベルの質問にこのSkillを使わない — 基礎は1211-neoforge-moddingスキルを参照。
  7. 外部Modの実装をそのままコピペしない — ライセンス違反になる。設計思想のみ参考にする。
  8. パーティクルシステムをスクラッチで書かないParticle / TextureSheetParticle の継承と ParticleProvider のファクトリパターンを理解してから実装する。
  9. MCのレンダリングパイプラインを無視してGL呼び出しを直接書かない — カスタムシェーダーは RegisterShadersEvent + RenderType の枠組みに従う。
  10. 独自Featureをスクラッチで書かない — 標準Feature + データ駆動JSONで十分なケースが大半。Partパイプラインは本当に必要な場合のみ。
  11. Mixinの@Overwriteを避ける — compat問題の原因。Interface Injection / @Inject / @Redirectで代替する。
  12. サンドボックスなしで外部スクリプトを実行しない — ClassFilter + カスタムClassLoader + タイムアウト制御の3点セットが必須。
  13. 大規模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
Install via CLI
npx skills add https://github.com/code-onigiri/mc-modding-skill --skill 1211-mods-exsample
Repository Details
star Stars 1
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator
code-onigiri
code-onigiri Explore all skills →