agentsclimarketplace

1201 forge modding

Skill code-onigiri/mc-modding-skill/.agent/skills/1201-forge-modding

Minecraft開発用スキル

Install
npx -y skills add code-onigiri/mc-modding-skill --skill 1201-forge-modding

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

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

7.7 KB, as published. Nobody here has run it

概要

この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プロジェクトとしてインポート
  • 2. gradle.properties / build.gradle / mods.toml を確認・編集
  • 3. メインModクラス(@Mod)と DeferredRegister + RegistryObject のセットアップ
  • 4. Block/Item/Entity などの登録とプロパティ定義
  • 5. Data Provider(Recipe, LootTable, BlockState, Tags)の実装
  • 6. 必要に応じてNetworking(SimpleChannel)、Capability、WorldGenを追加
  • 7. 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・MDKreferences/SETUP.mdプロジェクト初期セットアップ時
Registry・Event・Sidednessの基礎references/CORE_CONCEPTS.mdメインクラスを書く前
Block・Item・BlockEntity・Menuの実装references/BLOCKS_AND_ITEMS.mdBlock/Itemを追加する際
DataGen(Recipe, LootTable, Tags, Models)references/DATA.mdJSONを書く必要がある際
Networking(SimpleChannel)references/NETWORKING.mdGUI同期・サーバー/クライアント通信が必要な際
Capability・描画・WorldGenreferences/ADVANCED.md高度な機能実装時
コマンド(Brigadier)references/COMMANDS.md独自コマンドを追加する際
GameTest(自動テスト)references/GAMETEST.md統合テストを書く際
WorldGen(ワールド生成)references/WORLDGEN.md鉱脈・構造物・バイオームを追加する際
Resource Pack(モデル・テクスチャ・サウンド・言語)references/RESOURCE_PACK.mdアセットファイルを手書きする際
Datapack(バニラデータ形式)references/DATAPACK.mdModがデータパックJSONを内包する際
Image Generation(テクスチャ・プロモーションアート)references/IMAGEGEN.md画像生成・ブリーフ作成時
CI・リリース・バージョン管理references/CI_RELEASE.mdGitHub Actions・Modrinth・CurseForge連携
クラス・メソッド早見表references/QUICK_REFERENCE.mdクラス名を忘れた際
クラッシュ対応・ログの読み方references/TROUBLESHOOTING.mdビルド/実行が失敗した際

Scripts

ScriptPurpose
scripts/check-build.shJDK, Gradle, key files確認 + clean build
scripts/validate-datapack.shdatapack JSON, pack.mcmeta, function tag参照の検証
scripts/validate-resource-pack.shmod asset JSON, model/texture/sound参照の検証
scripts/scaffold-asset-brief.shテクスチャ/プロモーションアート用Markdown brief生成
scripts/validate-test-layout.shJUnit 5 / GameTest / MockBukkit プロジェクトレイアウト検証

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.