📝

Minecraft Modでお城生成コマンドを作ってみた【Fabric 1.21 + Claude活用】

に公開

※ 本記事の大部分はAIが執筆しました。

はじめに

Minecraft Modの学習を目的として、コマンド一つでお城を生成できるModを作ってみました。

開発環境

今回使用した技術スタック:

  • Minecraft: 1.21
  • Modding Framework: Fabric Mod
  • Java: 21
  • 開発環境: Cursor(AI統合エディタ)
  • AI支援: Claude 4 Sonnet

環境構築

Java 21のインストールが必要だったので、Homebrewで導入:

brew install openjdk@21

プロジェクトの初期化は、Fabricの公式テンプレートをクローン:

git clone https://github.com/FabricMC/fabric-example-mod.git castle-mod
Cloning into 'castle-mod'...
remote: Enumerating objects: 930, done.
remote: Counting objects: 100% (47/47), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 930 (delta 33), reused 17 (delta 17), pack-reused 883 (from 3)
Receiving objects: 100% (930/930), 588.77 KiB | 10.51 MiB/s, done.
Resolving deltas: 100% (404/404), done.

その後、Cursorで開発環境を起動:

cd castle-mod
cursor .

お城の設計

以下のような指示で、claude-4-sonnetにお願いしました。

西洋風のお城を作るコマンドを追加したい

  • 石造りの厚い壁
  • 塔(タワー)
  • 城壁
  • 跳ね橋や門
  • 窓は小さめ
  • バトルメント(城壁の凹凸)
  • より四角い構造

実装方法

配列で設計図を作成

手動でブロックを配置するのではなく、配列を使って設計図を作りました:

// 0=空気, 1=石垣, 2=木材, 3=白い壁, 4=金装飾, 5=瓦屋根, 6=窓, 7=入口...
private static final int[][][] CASTLE_BLUEPRINT = {
    createLayer1(), // 29x29の基礎
    createLayer2(), // 27x27の2層目
    // ...
};

ブロックの配置

数字に応じて実際のブロックを配置:

switch (blockType) {
    case 1: // 石垣
        world.setBlockState(pos, Blocks.COBBLESTONE.getDefaultState());
        break;
    case 6: // 窓
        world.setBlockState(pos, Blocks.GLASS_PANE.getDefaultState());
        break;
    // ...
}

使い方

  1. Modを導入
./gradlew runClient
  1. ゲーム内で /western-castle コマンドを実行

  1. プレイヤーの位置にお城が生成される

開発環境でMinecraftを起動してコマンドを実行してみると...

[Server thread/INFO] [Player:城が生成されました!]

無事に城が生成されました!

まとめ

AIツールとの組み合わせにより、簡単に動作確認を済ませることができました。

今回の経験を活かして、今度は他の建築物や、より高度な機能を持つModにも挑戦してみたいと思います!

参考リンク

Discussion