1201-forge-modding

star 1

Minecraft 1.20.1 Forge Moddingに関する開発支援。Modの新規作成、Block/Item/Entityの追加、 DataGen、ネットワーク処理、レシピ・進捗・ルートテーブルの生成、Capabilityの実装、 クラッシュ対応など。Minecraft 1.20.1 Moddingに関するタスクや、Gradle/MDKのセットアップ、 Registry/Event/sidednessに関する質問があった際に使用する。

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

name: 1201-forge-modding description: > Minecraft 1.20.1 Forge Moddingに関する開発支援。Modの新規作成、Block/Item/Entityの追加、 DataGen、ネットワーク処理、レシピ・進捗・ルートテーブルの生成、Capabilityの実装、 クラッシュ対応など。Minecraft 1.20.1 Moddingに関するタスクや、Gradle/MDKのセットアップ、 Registry/Event/sidednessに関する質問があった際に使用する。 license: MIT compatibility: Requires JDK 17+, IntelliJ IDEA, Gradle, internet access for Minecraft/Forge artifacts metadata: author: code-onigiri version: "0.4.0"

概要

このSkillは Minecraft 1.20.1 Forge 向けMod開発の標準パターンと落とし穴をまとめたものです。

✅ やるべきこと

  1. DeferredRegister + RegistryObject を使う — 旧来の RegistryEvent ベースの登録は非推奨。
  2. DataGen を使う — 手書きJSONはミスとメンテナンスコストが爆発する。
  3. Mojang Mappings(official)が標準 — Parchmentでパラメータ名を補完する。
  4. すべてのDeferredRegisterをModBusにregisterする — コンストラクタで IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); を取得し、各 register(modEventBus) を呼ぶ。
  5. Block登録時はBlockItemも登録する — Blockだけではインベントリに出ない。
  6. level.isClientSide で論理サイド判定 — 物理サイドではなく論理サイドで分岐。
  7. Networkingのハンドラでは ctx.enqueueWork() でメインスレッドに戻す — ネットワークスレッドでワールド変更を行うとクラッシュ。
  8. Capability取得時は LazyOptional を使うisPresent() / ifPresent() で安全にアクセス。invalidateCaps() も必ず実装する。
  9. BlockEntityのデータ変更時は setChanged() + level.sendBlockUpdated() を呼ぶ — どちらか欠けると保存/同期されない。
  10. sourceSets.main.resources { srcDir 'src/generated/resources' } を忘れない — DataGenの出力が読み込まれなくなる。

❌ やってはいけないこと

  1. @OnlyIn をModコードで使わない — Forge内部専用。使うとマルチプレイでクラッシュ。クライアント限定コードは @Mod.EventBusSubscriber(value = Dist.CLIENT) または FMLClientSetupEvent で分離する。
  2. ResourceLocation に大文字・ハイフンを使わない — 小文字と _ / . / / のみ。
  3. ContainerDataの各スロットは16bit — 32bit整数(エネルギー量など)は2スロットに分割すること。
  4. PacketのID(int)を重複させない — SimpleChannelのregisterMessageでID衝突は通信破損。
  5. Capabilityを通常のBlockに直接付けない — BlockEntityが必要。
  6. runClientクラッシュ後は ./gradlew --stop — Daemonがポートを占有していることがある。

開発ワークフロー(新規Mod作成時)

    1. Forge MDK(1.20.1)を入手し、Gradleプロジェクトとしてインポート
    1. gradle.properties / build.gradle / mods.toml を確認・編集
    1. メインModクラス(@Mod)と DeferredRegister + RegistryObject のセットアップ
    1. Block/Item/Entity などの登録とプロパティ定義
    1. Data Provider(Recipe, LootTable, BlockState, Tags)の実装
    1. 必要に応じてNetworking(SimpleChannel)、Capability、WorldGenを追加
    1. runClient / runData で動作確認

よく使うGradleタスク

./gradlew build              # 配布用jar生成
./gradlew runClient          # クライアント起動
./gradlew runServer          # サーバー起動
./gradlew runData            # DataGen実行
./gradlew runGameTestServer  # GameTest実行
./gradlew clean              # ビルドキャッシュ削除

一般的なタスクチェックリスト

Blockを追加する

  1. DeferredRegister<Block>RegistryObject<Block> を登録
  2. 同じ名前で DeferredRegister<Item>RegistryObject<BlockItem> を登録
  3. BlockState JSON / Block Model / Texture(DataGen推奨)
  4. 必要に応じて BlockEntity + BlockEntityType を登録
  5. BlockTagsProvider でツール要件・採掘判定を追加

Itemを追加する

  1. DeferredRegister<Item>RegistryObject<Item> を登録
  2. Item Model / Texture(DataGen推奨)
  3. 必要に応じて LanguageProvider で表示名を追加

Entityを追加する

  1. DeferredRegister<EntityType<?>>RegistryObject<EntityType<T>> を登録
  2. EntityAttributeCreationEvent で属性(HP・移動速度など)を設定
  3. EntityRenderersEvent.RegisterRenderers でRendererを登録(クライアント限定)
  4. Spawn Placements(自然スポーン条件)を設定

Recipeを追加する

  1. RecipeProvider を継承したクラスを作成
  2. buildRecipes(Consumer<FinishedRecipe>) でレシピを定義
  3. ./gradlew runData を実行してJSONを生成

詳細リファレンス

トピック ファイル 読むタイミング
環境構築・Gradle・MDK references/SETUP.md プロジェクト初期セットアップ時
Registry・Event・Sidednessの基礎 references/CORE_CONCEPTS.md メインクラスを書く前
Block・Item・BlockEntity・Menuの実装 references/BLOCKS_AND_ITEMS.md Block/Itemを追加する際
DataGen(Recipe, LootTable, Tags, Models) references/DATA.md JSONを書く必要がある際
Networking(SimpleChannel) references/NETWORKING.md GUI同期・サーバー/クライアント通信が必要な際
Capability・描画・WorldGen references/ADVANCED.md 高度な機能実装時
コマンド(Brigadier) references/COMMANDS.md 独自コマンドを追加する際
GameTest(自動テスト) references/GAMETEST.md 統合テストを書く際
WorldGen(ワールド生成) references/WORLDGEN.md 鉱脈・構造物・バイオームを追加する際
Resource Pack(モデル・テクスチャ・サウンド・言語) references/RESOURCE_PACK.md アセットファイルを手書きする際
Datapack(バニラデータ形式) references/DATAPACK.md ModがデータパックJSONを内包する際
Image Generation(テクスチャ・プロモーションアート) references/IMAGEGEN.md 画像生成・ブリーフ作成時
CI・リリース・バージョン管理 references/CI_RELEASE.md GitHub Actions・Modrinth・CurseForge連携
クラス・メソッド早見表 references/QUICK_REFERENCE.md クラス名を忘れた際
クラッシュ対応・ログの読み方 references/TROUBLESHOOTING.md ビルド/実行が失敗した際

Scripts

Script Purpose
scripts/check-build.sh JDK, Gradle, key files確認 + clean build
scripts/validate-datapack.sh datapack JSON, pack.mcmeta, function tag参照の検証
scripts/validate-resource-pack.sh mod asset JSON, model/texture/sound参照の検証
scripts/scaffold-asset-brief.sh テクスチャ/プロモーションアート用Markdown brief生成
scripts/validate-test-layout.sh JUnit 5 / GameTest / MockBukkit プロジェクトレイアウト検証
Install via CLI
npx skills add https://github.com/code-onigiri/mc-modding-skill --skill 1201-forge-modding
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 →