Skip to content

Repository files navigation

SDM Mod

Minecraft Version Mod Loader

Minecraft (Java Edition) Fabric 向け MOD リポジトリです。


📖 概要 (Overview)

このリポジトリは、System Design Management 向けの Minecraft Fabric MOD を開発するためのものです。

⚙️ 必須環境 (Requirements)

開発・テストは以下の環境を前提としています。

セットアップ手順

Firstly, clone this repository using Git:

  • 開発者向け
git clone [email protected]:System-Design-Management/sdm-mod.git
  • mod を利用する方向け
git clone https://github.com/System-Design-Management/sdm-mod.git

Once you've opened the project in your IDE, it should automatically load the project's Gradle configuration and perform the necessary setup tasks.

IntelliJ IDEA

  • If you're using the command line, you can use the following Gradle commands to start the game:
    • ./gradlew runServer: Start the game in server mode.(ログのみ表示される)
    • ./gradlew runClient: Start the game in client mode.(ゲーム画面が起動)
  • mod の挙動をゲーム画面で確認するときは、サーバーモードでゲームを開始したままクライアントモードでゲームを開始すればよい。

IDE 開発時にバックアップしたワールドを使う方法

./gradlew runClient で起動する開発環境は、通常の .minecraft/saves/ ではなく、このリポジトリの run/saves/ をワールド保存先として使います。

既存ワールドのバックアップを開発環境で使いたい場合は、バックアップしたワールドフォルダを run/saves/ の下に配置してください。

例:

run/saves/MyWorld/

この状態で ./gradlew runClient を起動すると、ワールド選択画面に MyWorld が表示されます。

通常の Minecraft で使っているワールドを直接編集すると破損時の影響が大きいため、コピーしたバックアップを run/saves/ に置いて利用することを推奨します。

開発用ワールドを自動コピー&動画再生する方法

毎回 run/saves/ に手で配置しなくてよいように、ローカル設定ファイルから自動同期できます。

  1. ルートの local.dev.properties.example を参考に、local.dev.properties を作成する
  2. devWorldSourceDir に元ワールドのパスを書く
  3. devWorldNamerun/saves/ 側で使いたいフォルダ名を書く
  4. opVideoPath,edVideoPath,vlcLibPathにそれぞれオープニング動画、エンディング動画、VLC.appのパスを書く(VLC.appについては後述する)
  5. ./gradlew runClient または ./gradlew runServer を実行する

例:

devWorldSourceDir=backup/20260329
devWorldName=MyWorld

この設定がある場合、起動前に Gradle の syncDevWorld タスクが走り、run/saves/MyWorld/ に自動で同期します。

注意:

  • local.dev.properties.gitignore 対象なので、各開発者がローカルで設定します。
  • devWorldSourceDir はプロジェクトルートからの相対パスとして書けます。
  • 同期先は run/saves/<devWorldName>/ です。
  • 元ワールドの内容が更新されたら、次回の runClient / runServer 実行時に再同期されます。

Gradle コマンドが使えない場合

このリポジトリでは ./gradlew を使う想定ですが、gradlew が存在しない状態だと以下のようなエラーになります。

  • zsh: no such file or directory: ./gradlew
  • zsh: permission denied: ./gradle

./gradle は実行ファイルではなくディレクトリのため、./gradle runServer は実行できません。

その場合は、まずローカルに Gradle をインストールして wrapper を再生成してください。

macOS:

brew install gradle
gradle wrapper
./gradlew runServer

Windows (PowerShell):

winget install Gradle.Gradle
gradle wrapper
.\gradlew.bat runServer

クライアントを起動する場合は、wrapper 再生成後に以下を実行してください。

macOS:

./gradlew runClient

Windows (PowerShell):

.\gradlew.bat runClient

Fabric公式ドキュメントを参考にしてください。 IDEはIntelliJ IDEA (community版) を推奨しています。(無料)

MOD の導入先

./gradlew build を実行すると、このプロジェクトの配布用 jar は build/libs/sdm-mod-1.0-SNAPSHOT.jar に生成されます。

この jar を実際の Minecraft に導入する場合は、Fabric を導入済みの Minecraft の mods フォルダに配置してください。

  • macOS: ~/Library/Application Support/minecraft/mods/
  • Windows: %AppData%/.minecraft/mods/
  • Linux: ~/.minecraft/mods/

開発環境で ./gradlew runClient を使って起動する場合は、実行用ディレクトリが run/ になるため、外部 mod は run/mods/ に配置します。 このプロジェクト自身の mod は起動時に自動で読み込まれるため、build/libs/sdm-mod-1.0-SNAPSHOT.jarrun/mods/ にコピーする必要はありません。

アイテムの実装方法

新しいアイテムをMODに追加する手順です。ここでは my_item(日本語名: 魔法の石)を例に説明します。

概要:必要なファイル一覧

アイテム1つを追加するには、以下の6種類のファイルが必要です。

src/main/
├── java/.../sdm_mod/
│   └── ModItems.java                          ← (1) アイテム登録(Java)
└── resources/assets/sdm_mod/
    ├── items/
    │   └── my_item.json                       ← (2) モデル定義(1.21.4+で必須)
    ├── models/item/
    │   ├── my_item.json                       ← (3) 3Dモデル形状
    │   └── my_item_icon.json                  ← (4) インベントリ用アイコン(3Dの場合)
    ├── textures/item/
    │   ├── my_item.png                        ← (5) 3Dモデル用テクスチャ
    │   └── my_item_item.png                   ← (6) インベントリアイコン用テクスチャ
    └── lang/
        ├── ja_jp.json                         ← (7) 日本語名
        └── en_us.json                         ← (7) 英語名

2Dのフラットなアイテム(学生証のような画像そのままの見た目)の場合は、(3)(5) のみで (4)(6) は不要です。


Step 1: ModItems.java にアイテムを登録する

src/main/java/jp/ac/u_tokyo/sdm/sdm_mod/ModItems.java を開き、既存アイテムの下に1行追加します。

public static final Item MY_ITEM = register(
    "my_item",
    settings -> new Item(settings)
);
  • MY_ITEM はJava内の変数名(大文字スネークケース)
  • "my_item" がゲーム内のID(小文字スネークケース)。この名前を以降のファイルで統一して使います。

Step 2: items/my_item.json を作成する

src/main/resources/assets/sdm_mod/items/my_item.json を作成します。

3Dモデルを使う場合(インベントリとゲーム内で別の見た目にする):

{
  "model": {
    "type": "minecraft:select",
    "property": "minecraft:display_context",
    "cases": [
      {
        "when": ["gui", "fixed"],
        "model": {
          "type": "minecraft:model",
          "model": "sdm_mod:item/my_item_icon"
        }
      }
    ],
    "fallback": {
      "type": "minecraft:model",
      "model": "sdm_mod:item/my_item"
    }
  }
}

2Dフラットアイテムの場合(シンプル):

{
  "model": {
    "type": "minecraft:model",
    "model": "sdm_mod:item/my_item"
  }
}

ここで指定した "sdm_mod:item/my_item" は、次のStep 3で作るファイルを指しています。


Step 3: モデルJSONを作成する

3Dモデルの場合

Blockbench で3Dモデルを作り、File > Export > Export Block/Item Model でエクスポートします。

出力されたJSONを src/main/resources/assets/sdm_mod/models/item/my_item.json に配置した後、必ず以下の修正を行います:

修正内容 理由
"format_version": "..." の行を削除 Minecraftが認識しないフィールド
"texture_size": [...] の行を削除 残すとUV座標がずれてテクスチャが壊れる
テクスチャ参照に sdm_mod:item/ を追加 パスが合わないと紫チェック柄になる
// 修正前(Blockbench出力そのまま)
"textures": {
  "0": "my_item"
}

// 修正後
"textures": {
  "0": "sdm_mod:item/my_item"
}

さらに、インベントリ用アイコンのモデル my_item_icon.json も作成します:

{
  "parent": "minecraft:item/generated",
  "textures": {
    "layer0": "sdm_mod:item/my_item_item"
  }
}

2Dフラットアイテムの場合

{
  "parent": "minecraft:item/generated",
  "textures": {
    "layer0": "sdm_mod:item/my_item"
  }
}

Step 4: テクスチャ画像を配置する

PNG画像を src/main/resources/assets/sdm_mod/textures/item/ に置きます。

ファイル名 用途
my_item.png 3Dモデルに貼るテクスチャ(3Dの場合)
my_item_item.png インベントリに表示するアイコン(3Dの場合)
my_item.png 2Dアイテムの場合はこれ1枚でOK

注意: textures/entity/ に置くと紫・黒のチェック柄(Missing Texture)になります。必ず textures/item/ に置いてください。


Step 5: 言語ファイルに名前を追加する

src/main/resources/assets/sdm_mod/lang/ja_jp.jsonen_us.json の両方に追加します。

ja_jp.json:

{
  "item.sdm_mod.my_item": "魔法の石"
}

en_us.json:

{
  "item.sdm_mod.my_item": "Magic Stone"
}

Step 6: 動作確認

./gradlew runClient

ゲームを起動して、クリエイティブモードのアイテム検索で my_item を検索し、正常に表示されることを確認します。

紫・黒チェック柄になった場合:

grep "my_item\|Missing" run/logs/latest.log

ログにエラーパスが出るので、そのパスのファイルを確認してください。ほとんどの場合、テクスチャのパス指定ミスが原因です。


ストーリー開始コマンド

ストーリー開始時の初期化は、ワールド起動時の自動実行ではなくコマンド実行で行います。

  • コマンド: /sdm_story start
  • 実行権限: 権限レベル 2 以上(ゲーム開始時にプレイヤーへコマンド権限を自動付与)

このコマンドを実行すると、以下の初期化が行われます。

  • 実績解除の告知を無効化する
  • 時刻を夜に設定し、以後変化しないようにする
  • 天気を晴れに設定し、以後変化しないようにする
  • ストーリー進行状態を開始地点に戻す
  • 全プレイヤーのインベントリとエンダーチェストを空にする
  • 全プレイヤーの体力、満腹度、呼吸ゲージ、経験値などを初期状態に戻す
  • 全プレイヤーをアドベンチャーモードにする
  • mob の自然スポーンを無効化する
  • プレイヤー以外の生存エンティティを削除する
  • 全プレイヤーの視線先に当たったブロック付近だけを、弱い光で照らす
  • 各プレイヤーを実行主体にして function thepa:give/revolver を順に実行する
  • 各プレイヤーを実行主体にして function thepa:give/bullets を順に実行する

開始地点へのテレポートは、座標確定後に追加予定です。

ストーリー実装の配置方針

ストーリー実装は src/main/java/jp/ac/u_tokyo/sdm/sdm_mod/story 配下に集約し、各フェーズ固有のコードは phase1/ から phase6/ に分けて管理します。

各フェーズフォルダには README.md を置き、そのフェーズの目的、責務、開始条件、完了条件を先に整理してから実装を追加する方針にします。

📚 参考ドキュメント (Reference)

MOD開発の学習には、以下のFabric公式ドキュメントが役立ちます。

🔫 Guns++ 導入方針

このリポジトリでは、銃要素を Java の mod 依存として追加せず、Guns++ 5.8.7+mod を外部の mod jar として利用する方針にします。

  • Point BlankGeckoLib はこのプロジェクトの Gradle 依存に含めません。
  • Guns++build.gradle には追加しません。
  • Guns++ の導入は Minecraft 実行環境側で行います。

必要な配布物

Guns++ V5.8.7 は Fabric / Forge / NeoForge / Quilt に対応し、Minecraft 1.21.6-1.21.10 を対象にしています。

導入手順

  1. guns++-5.8.7.jar を取得する
  2. jar を run/mods/ に配置する
  3. ./gradlew runClient で起動する
  4. タイトル画面の mod 一覧またはログで Guns++ が読み込まれていることを確認する

このリポジトリとの関係

  • このリポジトリは Fabric 1.21.6 の mod 開発用です。
  • Guns++ はゲーム実行時に run/mods/ へ追加して併用します。
  • Java コードから Guns++ のクラスや API を参照する前提ではありません。
  • 連携が必要な場合は、まず Guns++ が公開している連携手段の有無を確認してください。

VLC.app 導入

マイクラ内で動画再生をするためにVLC.appをダウンロードする必要があります。

以下のサイトからダウンロードしてください。

https://www.videolan.org/vlc/index.ja.html

📜 ライセンス (License)

MIT LICENSE

About

Official mod for UTokyo SDM projects. Developed for the May Festival exhibition and beyond.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages