Eclipse+Forgeでマイクラのmod開発～最小限の作業で空のmodを作る

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/90072677-49f1-b927-8d04-c424faf019da.png)
デバッグ環境を整えるところまでは[以前の記事](https://qiita.com/kawamune/items/ba0d18ade13d98d817d9)と同じです。以前の記事ではMdkにもともと含まれているサンプルのmodを動かしただけなので、今回はオリジナルのmodを作ります。といっても、modに色々させようと思うと学習しないとダメなことが大量にあるので今回は空っぽのmodを最少限度の作業で作ってみましょ。

## 環境

* OS: Windows10
* Jdk: openjdk version "15.0.2" 2021-01-19<br>
※16.xでもいいかもだけどgradleやらなにやら色々変わってしまって心配だったので今回は15で。
* IDE: Eclipse IDE for Java Developers (Version 4.19.0)
* Buildship(Eclipseのgradleプラグイン): 3.0
* Minecraft: Java版 1.16.5
* Forge: 1.16.5

## modの大元になるクラスの作成。

まずはサンプルコードの`src\main\java\com\example\examplemod`を削除します。`com`ディレクトリ事バッサリ削除してOKです。

空のクラスを一個作ります。クラス名、パッケージなどなどなんでもOK。サンプルコードを載せておきます。

```java:EmptyMod.java
package jp.munecraft.mod.test;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import net.minecraftforge.fml.common.Mod;

// ★詳細後述
@Mod("emptymod")
public class EmptyMod {

	// forgeがもともとlog4jを使っているので気楽にLoggerが使えます。
	private static final Logger LOGGER = LogManager.getLogger();
	
	public EmptyMod() {
		// 今回はログを吐くだけ。
		LOGGER.info("Welcome to munecraft mod!!!");
	}	
}

```

空っぽです。コンストラクタが呼ばれたらログを吐くだけ。ポイントは`@Mod`アノテーションですね。このアノテーションを付けたクラスがmodのメインのクラスと認識されます。引数の文字列は***modId***と呼ばれるもので、後でも出てくるので間違えないように同じものを使ってください。
ちなみに***modId***に使える文字や長さには制限があり、forgeのソースによると
> Required to be lowercased in the english locale for compatibility. Will be truncated to 64 characters long.

だそうです。試してみましたが、確かに大文字や`_`といった記号を使うと起動時にエラーになりました。

## modの設定ファイルの作成

いじるファイルは`src/main/resources/META-INF/mods.toml`だけです。中身を見てみよう。

```toml:mods.toml
# This is an example mods.toml file. It contains the data relating to the loading mods.
# There are several mandatory fields (#mandatory), and many more that are optional (#optional).

# （中略）

# A URL to refer people to when problems occur with this mod
#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional
# A list of mods - how many allowed here is determined by the individual mod loader
[[mods]] #mandatory
# The modid of the mod
modId="emptymod" #mandatory ★ここ！
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
# ${file.jarVersion} will substitute the value of the Implementation-Version as read from the mod's JAR file metadata
# see the associated build.gradle script for how to populate this completely automatically during a build
version="${file.jarVersion}" #mandatory
 # A display name for the mod
displayName="Empty mod by munecraft" #mandatory
# A URL to query for updates for this mod. See the JSON update specification https://mcforge.readthedocs.io/en/latest/gettingstarted/autoupdate/
#updateJSONURL="https://change.me.example.invalid/updates.json" #optional

# （後略）

```
最低限いじらないとダメなのは`[[mods]]`セクションの`modId`だけです。ここを先ほど`@Mod`アノテーションで指定した***modId***にそろえなくてはなりません。

## 動かしてみる

[以前の記事](https://qiita.com/kawamune/items/ba0d18ade13d98d817d9)でビルドスクリプトをインポート済みであれば、Eclipseから`runClient`が簡単にできるようになっているはず。で、実行。。

```
[17:06:16] [Render thread/DEBUG] [ne.mi.fm.ja.FMLModContainer/LOADING]: Creating FMLModContainer instance for jp.munecraft.mod.test.EmptyMod with classLoader cpw.mods.modlauncher.TransformingClassLoader@4b039c6d & cpw.mods.modlauncher.TransformingClassLoader@4b039c6d
[17:06:16] [modloading-worker-1/DEBUG] [ne.mi.ve.fo.ForgeVersion/CORE]: Forge Version package package net.minecraftforge.versions.forge, Forge, version 36.1 from cpw.mods.modlauncher.TransformingClassLoader@4b039c6d
[17:06:16] [modloading-worker-1/DEBUG] [ne.mi.ve.fo.ForgeVersion/CORE]: Found Forge version 36.1.0
[17:06:16] [modloading-worker-1/DEBUG] [ne.mi.ve.fo.ForgeVersion/CORE]: Found Forge spec 36.1
[17:06:16] [modloading-worker-1/DEBUG] [ne.mi.ve.fo.ForgeVersion/CORE]: Found Forge group net.minecraftforge
[17:06:16] [modloading-worker-2/INFO] [jp.mu.mo.te.EmptyMod/]: Welcome to munecraft mod!!!
[17:06:16] [modloading-worker-1/DEBUG] [ne.mi.ve.mc.MCPVersion/CORE]: Found MC version information 1.16.5
[17:06:16] [modloading-worker-1/DEBUG] [ne.mi.ve.mc.MCPVersion/CORE]: Found MCP version information 20210115.111550
[17:06:16] [modloading-worker-1/INFO] [ne.mi.co.ForgeMod/FORGEMOD]: Forge mod loading, version 36.1.0, for MC 1.16.5 with MCP 20210115.111550
```

無事に`Welcome to munecraft mod!!!`がコンソールに表示されました！ね？簡単でしょ？本当はこの記事でいじった以外にもいっぱい設定がありますが、それはまた後々。。