Mac向けマインクラフトMOD開発環境のセットアップ


# Mac向けマインクラフトMOD開発環境のセットアップ

- [著者の環境情報](#環境情報)
- [これからダウンロードする3つのツールについて](#これからダウンロードする3つのツールについて)
- [インストールについて](#インストールについて)
- [コマンドライン操作のセクション](#コマンドライン操作のセクション)
- [主要なファイルの説明](#主要なファイルの説明)
- [主に開発において変更や作成をするファイル](#主に開発において変更や作成をするファイル)

## 環境情報

### OS
- **バージョン**: macOS Ventura [13.0.1]

### Java
- **バージョン**: java version [1.8.0_381]
- **インストールパス**: [/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home]

### Forge
- **バージョン**: forge [1.12.2]

### IDE
- **名称**: [Eclipse]
- **バージョン**: [4.29.0]

## まず、マインクラフトのJava Editionを購入してインストールしましょう！(お子さんはお父さんやお母さんと一緒にやりましょう！)
ここではインストール方法は述べませんので調べてみて下さい！

## これからダウンロードする3つのツールについて

マインクラフトのMOD開発を始めるには、**forge**、**Java**、**Eclipse**という3つのツールが必要です。それぞれのツールが何であるか、なぜ必要なのか、そしてバージョンを合わせる理由について説明します。

### Forgeとは

- **Forge**は、マインクラフトのMODを作成するためのフレームワークです。これを使うことで、マインクラフトのゲーム内の機能を拡張したり、新しい機能を追加したりすることができます。
- **なぜ必要か？**：Forgeがあることで、MOD開発が格段に簡単になります。また、Forgeを使用することで、他のForgeを使用したMODとの互換性も持たせることができます。

### Javaとは

- **Java**は、プログラミング言語の一つで、マインクラフトもJavaで書かれています。MODを作成するためには、このJava言語を使用してコードを書く必要があります。
- **なぜ必要か？**：マインクラフトのMODはJavaで書かれるため、Javaの開発環境が必要です。
- **m1とインテルチップの違い**：最近のMacには、Appleが独自に開発した**M1**チップが搭載されています。これは従来の**インテルチップ**とは異なるアーキテクチャを持っているため、ソフトウェアもそれぞれのチップに合わせて最適化されています。Javaもこの例外ではなく、**M1**と**インテル**の両方のチップに対応したバージョンが提供されています。

### Eclipseとは

- **Eclipse**Javaのプログラムを書くための統合開発環境(IDE)の一つです。コードの編集、デバッグ、実行など、開発に必要な機能が一つにまとまっています。
- **なぜ必要か？**：Eclipseを使用することで、MODの開発が効率的に行えます。特に初心者の方にとっては、コードの補完機能やエラーの表示機能などが非常に役立ちます

### バージョンを合わせる理由
- **互換性の確保**：ソフトウェアやライブラリは、バージョンによって動作や仕様が異なることがあります。異なるバージョンの組み合わせで開発を進めると、意図しないエラーや不具合が発生する可能性があります。バージョンを合わせることで、そのような問題を回避できます。

- **開発効率の向上**：全員が同じバージョンを使用している場合、問題が発生した際の対応がスムーズになります。異なるバージョンで開発を行っていると、同じ問題でも原因や解決策が異なることがあるため、デバッグに時間がかかることがあります。

- **ドキュメントや情報の共有**：同じバージョンを使用していると、ドキュメントやオンラインの情報を共有しやすくなります。異なるバージョンでは、情報が古くなっている場合や、適用できない場合があるため、情報の正確性を確保するためにもバージョンを合わせることが推奨されます。

- **学習コストの削減**：初心者の方にとって、バージョンごとの違いを学ぶことは追加の学習コストとなります。同じバージョンを使用することで、そのようなコストを削減し、学習を効率的に進めることができます。

バージョンを合わせることは、開発の効率や安定性を高めるために非常に重要です。特にチームでの開発や初心者の方が関与するプロジェクトでは、バージョンの統一は必須と言えるでしょう。

## インストールについて

### 1. forgeのインストール
- 手順1: forgeのダウンロード
    - forge1.12.2(Download Recommended)[Minecraft Forge MDK (Mod Development Kit) のダウンロード](https://files.minecraftforge.net/net/minecraftforge/forge/index_1.12.2.html)でforgeをインストールしてください。installerとMDKとダウンロードします。
![forgedmg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134368/4af36745-f08a-32a4-cbf3-d204d0c5e696.png)

- 手順2: forgeのインストール
    - ダウンロードしたinstallerを右クリックして実行し、指示に従ってforgeをインストールしてください。clientを選択しましょう。
    - MDKをダウンロードするとZipファイルが手元におりてきます。解凍の指示は後のセクションでします。
- 手順3: forgeの確認
    - マインクラフトを起動します。
    - ゲームのバージョン一覧からforge1.12.2が表示されていることを確認してください。

### 2. Java8のインストール
- 手順1: Java Development Kit (JDK) のインストール: MOD開発にはJavaの知識が必要です。
まず、JDKをインストールしてください。m1チップがARM64 DMG Installer、インテルチップがx64 DMG Installerをインストールしてください。インストールするためにはOracleに登録が必要です。ダウンロード後、右クリックからインストーラーを開き指示に従ってインストールします。
- 手順2: Javaのバージョンはforge1.12.2と互換性のあるJava8をインストールします。
- 手順3: インストーラーの指示に従ってインストールを行なって下さい。

[Java8 Download for mac](https://www.oracle.com/java/technologies/downloads/#java8-mac)
![java8dmg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134368/92030c9e-532a-3d8a-a388-e1913e4013d9.png)

### 3. eclipseのダウンロード
- IDEであるEclipseをダウンロードします。インストーラーがダウンロードできたら、実行し、指示に従ってインストールしましょう！
[Eclipse Download Page](https://www.Eclipse.org/downloads/download.php?file=/oomph/epp/2023-09/R/Eclipse-inst-jre-mac64.dmg&mirror_id=105)
![Eclipsedmg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134368/dabb7fc6-5ea1-eb78-601c-b6814eeb3087.png)


## コマンドライン操作のセクション

コマンドラインは、テキストベースのインターフェースを使用してコンピュータと対話する方法の一つです。このセクションでは、コマンドラインの基本的な概念と操作について説明します。

### コマンドライン(terminal)とは何か、何ができるか

- コマンドライン（またはターミナル）は、ユーザーがテキストコマンドを入力してコンピュータと対話するインターフェースです。

- これにより、ファイルの操作、プログラムの実行、システム設定の変更など、多くのタスクを効率的に実行することができます。GUI（グラフィカルユーザーインターフェース）を使用する場合よりも、より詳細な操作や高度なタスクを実行することが可能です。

- [コマンドラインの基本操作](https://qiita.com/ryu-ten/items/f302a213cb696d5bf458)

### コマンドライン(CUI)とGUIの関係性(ファサード)

- CUI（Character User Interface）は、テキストベースのユーザーインターフェースを指し、コマンドラインはその一例です。一方、GUI（Graphical User Interface）は、アイコンやウィンドウを使用してユーザーと対話するインターフェースです。

- CUIとGUIの主な違いは、ユーザーがシステムとどのように対話するかにあります。CUIはコマンドをテキストで入力することで操作を行い、GUIはマウスやタッチスクリーンを使用してグラフィカルな要素を操作します。

- ファサードとは、建物の正面や外観を指す言葉ですが、ここではCUIとGUIの関係性を示すためのメタファーとして使用されています。GUIはシステムの「外観」であり、ユーザーにとって親しみやすく直感的な操作を提供します。一方、CUIはその「裏側」であり、より詳細な操作や設定を可能にします。



### 1. Java8の確認
- まず、java8がインストールされているかを確認します。

```bash
🚀 ~ ✅ $ java -version
java version "1.8.0_381"
Java(TM) SE Runtime Environment (build 1.8.0_381-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)
```

- java8の環境変数の設定がまだの場合は以下を.bash_profileまたは.zshrcに記述したあと、source ~/.bash_profileまたは.zshrcで設定を保存してください。

```bash
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home"
```

- **補足**: もし、javaがどこにインストールされたか知りたい場合は以下のコマンドを実行してください。
```bash
🚀 ~ ✅ $ echo $JAVA_HOME
```
このコマンドを実行すると、Javaのインストールパスが表示されます。

### 2. MDKの解凍
次に、先ほどダウンロードしたMDKを任意のディレクトリで解凍します。
私は、ホームディレクトリ(~)でminecraftというディレクトリを作りそこでmdkを解凍しました。

```bash
🚀 ~ ✅ $ mkdir minecraft/
🚀 ~ ✅ $ cd minecraft/
```

**GUIで解凍するなら以下を実行した後、ファインダーで解凍してください。**
ダウンロードしたMDKを今開いたファインダーのminecraftにドラッグ&ドロップで移動させて解凍する。zipファイルは解凍後に消すか移動させる。
```bash
🚀 minecraft/ ✅ $ open .
```

**コマンドラインで解凍してもいいよ！**
```bash
🚀 minecraft/ ✅ $ unzip forge-1.12.2-14.23.5.2859-mdk.zip
🚀 minecraft/ ✅ $ rm forge-1.12.2-14.23.5.2859-mdk.zip
```

### 3. MDKプロジェクトの作成
解凍した後、のちにEclipseがこのディレクトリを認識するために解凍したプロジェクトにcdで移動し、以下を実行しましょう！少し時間がかかるので、よいネットワーク環境で実行しましょう！
また、ディレクトリはわかりやすい名前に変更していただいても構いません！今回はこのまま進めます！
```bash
🚀 minecraft/ ✅ $ cd forge-1.12.2-14.23.5.2859-mdk
🚀 forge-1.12.2-14.23.5.2859-mdk/ ✅ $ ./gradlew eclipse
```

### 4. Eclipseでのプロジェクトのインポート
実行が完了したらEclipseを開き、ワークスペースにプロジェクトをインポートしましょう！

1. Eclipseのメニューバーで「File」を選択します。
2. 「Import...」をクリックします。
3. 「General」の下の「Existing Projects into Workspace」を選択し、「Next」をクリックします。
4. 「Select root directory:」の部分で、インポートしたいプロジェクトのルートディレクトリを選択します。下記のようにプロジェクトのルートディレクトリがどこにあるか探し、直接打ち込んでBrowseして開いても構いません。
5. インポートしたいプロジェクトがリストに表示されるので、チェックボックスをオンにして、「Finish」をクリックします。

![eclipceInport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134368/2d5b668f-0331-3a69-e5b7-b44dba9a7543.png)

プロジェクトの位置はコマンドラインで`pwd`を実行することで確認できます。私の場合は、`/Users/ryu-ten/minecraft/forge-1.12.2-14.23.5.2859-mdk`にプロジェクトがあるようですね！
```bash
🚀 forge-1.12.2-14.23.5.2859-mdk ✅ $ pwd
/Users/ryu-ten/minecraft/forge-1.12.2-14.23.5.2859-mdk
```

### 5. プロジェクトの中身の確認
さて、これで開発の準備が整いました。ではプロジェクトの中身を見てみましょう。コマンドラインで、現在いるディレクトリより深い場所をツリー構造で表示するコマンドを使ってみましょう。私のエイリアスをコピペしただけなので、説明は省きます。

```bash
🚀 forge-1.12.2-14.23.5.2859-mdk ✅ $ find . -type d \( -name node_modules -o -name .git -o -name build -o -name coverage \) -prune -o -name '*.log' -prune -o -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g
```

```bash:ツリー構造
.
|____LICENSE-Paulscode IBXM Library.txt
|____CREDITS.txt
|____gradle
| |____wrapper
| | |____gradle-wrapper.jar
| | |____gradle-wrapper.properties
|____gradlew
|____.gitignore
|____build.gradle
|____changelog.txt
|____README.txt
|____LICENSE-Paulscode SoundSystem CodecIBXM.txt
|____gradle.properties
|____LICENSE.txt
|____gradlew.bat
|____src
| |____main
| | |____resources
| | | |____mcmod.info
| | | |____pack.mcmeta
| | |____java
| | | |____com
| | | | |____example
| | | | | |____examplemod
| | | | | | |____ExampleMod.java
```

## 主要なファイルの説明

- **build.gradle**: 
    - Gradleビルドツールの設定ファイル。
    - MODのビルドや依存関係の管理など、多くの設定がこのファイルで行われる。

- **gradlew** と **gradlew.bat**: 
    - Gradleのラッパースクリプト。
    - 開発者はGradleを直接インストールすることなく、Gradleタスクを実行できます。

- **src**: このディレクトリは、MODのソースコードやリソースを格納する場所です。
    - **src/main/java**: 
        - MODのJavaソースコードが格納される。
        - 特に、MODの機能を実装する際の主要なコードがこのディレクトリ内に存在する。
    - **src/main/resources**: 
        - このディレクトリには、MODのリソースファイル（テクスチャ、モデル、言語ファイルなど）が格納される。

- **.gitignore**: 
    - Gitバージョン管理を使用する場合、このファイルはリポジトリに追加しないファイルやディレクトリを指定する。

- **LICENSE.txt** とその他のLICENSEファイル: 
    - これらのファイルは、MODや使用しているライブラリのライセンス情報を提供する。

- **README.txt**: 
    - このファイルは、MODの説明や使用方法、開発者の情報などを提供するためのもの。


## 主に開発において変更や作成をするファイル

- **ExampleMod.java (src/main/java/com/example/examplemod/ExampleMod.java)**
    - **概要**:
        - このファイルはMODのメインクラスとして機能する。
        - MODの初期化やイベントの登録、コンフィグの読み込みなど、MODの基本的な動作がこのファイルで定義される。

- **mcmod.info (src/main/resources/mcmod.info)**
    - **概要**: 
        - このファイルはMODのメタデータを定義するJSONファイル。
        - MODの名前、バージョン、作者、説明などの情報が含まれる。

- **pack.mcmeta (src/main/resources/pack.mcmeta)**
    - **概要**: 
        - リソースパックのメタデータを定義するファイル。
        - 主にリソースパックのバージョンや説明を記述する。

- **リソースファイル (src/main/resources)**
    - **概要**: 
        - このディレクトリには、MODのテクスチャ、モデル、言語ファイル、サウンドなどのリソースが格納される。

開発を進める際には、上記のファイルを中心に変更や追加を行い、MODの機能を実装していきます。
それでは実際にワールドを改変して遊んでいきましょう！

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Mac向けマインクラフトMOD開発続編(工事中...)