(この記事は一連の解説記事の一つになります)
基本ファイル
基本となるファイル類を設定していきます。前回でコピペしたファイル群があるので、これらを自分用に変更していきます。
パッケージ名
パッケージ命名規約を読むと、所持するドメインを名前空間として用いることで、競合を避けることが求められるとのことです。しかしドメインを所持していないので、以下のようにしました。
D:\projects\mc_liveinwater\src\main\java
└ com
└ example
└ examplemod
└ ExampleMod.java
D:\projects\mc_liveinwater\src\main\java
└ jp
└ koteko
└ liveinwater
└ LiveInWater.java
assetsフォルダ、dataフォルダ
テクスチャや効果音などのファイルを配置する assets\liveinwater
フォルダ、レシピやドロップ表などのファイルを配置するdata\liveinwater
フォルダを作成しておきます。
D:\projects\mc_liveinwater\src\main\resources
├ assets
│ └ liveinwater
├ data
│ └ liveinwater
├ META-INF
│ └ mods.toml
└ pack.mcmeta
pack.mcmeta
pack.mcmeta
ファイルはリソースパックの詳細を記載するファイルです。
詳しくはWikiを参照しましょう。1.15以降なのでpack_format
は5です。コメント行は不要なので削除します。
{
"pack": {
"description": "live in water Mod resources",
"pack_format": 5
}
}
mods.toml
mods.toml
ファイルはMod情報を記載するファイルです。
依存などの情報に加え、mod導入時の画面に表示される情報もここに含まれるため、必要に応じて変更しましょう。
長いですが、各項目の説明がコメントで書かれているだけなのでよく読んで適切に設定しましょう。mandatory
は必須、 optional
は任意項目です。
# 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).
# The overall format is standard TOML format, v0.5.0.
# Note that there are a couple of TOML lists in this file.
# Find more information on toml format here: https://github.com/toml-lang/toml
# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
modLoader="javafml" #mandatory
# A version range to match for said mod loader - for regular FML @Mod it will be the forge version
loaderVersion="[32,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions.
# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties.
# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here.
license="MIT License"
# A URL to refer people to when problems occur with this mod
#issueTrackerURL="http://my.issue.tracker/" #optional
# A list of mods - how many allowed here is determined by the individual mod loader
[[mods]] #mandatory
# The modid of the mod
modId="liveinwater" #mandatory
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
version="${file.jarVersion}" #mandatory
# A display name for the mod
displayName="live in water Mod" #mandatory
# A URL to query for updates for this mod. See the JSON update specification <here>
#updateJSONURL="http://myurl.me/" #optional
# A URL for the "homepage" for this mod, displayed in the mod UI
#displayURL="http://example.com/" #optional
# A file name (in the root of the mod JAR) containing a logo for display
#logoFile="examplemod.png" #optional
# A text field displayed in the mod UI
#credits="Thanks for this example mod goes to Java" #optional
# A text field displayed in the mod UI
#authors="Love, Cheese and small house plants" #optional
# The description text for the mod (multi line!) (#mandatory)
description='''
live in water
– deep, silent, sea.
'''
# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
[[dependencies.liveinwater]] #optional
# the modid of the dependency
modId="forge" #mandatory
# Does this dependency have to exist - if not, ordering below must be specified
mandatory=true #mandatory
# The version range of the dependency
versionRange="[32,)" #mandatory
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
ordering="NONE"
# Side this dependency is applied on - BOTH, CLIENT or SERVER
side="BOTH"
# Here's another dependency
[[dependencies.liveinwater]]
modId="minecraft"
mandatory=true
versionRange="[1.16.1]"
ordering="NONE"
side="BOTH"
license
については、いずれ配布を考えるなら、コメントにある参考ページなどをよく読み、きちんと設定するべきでしょう。(私は詳しくないので一旦 MIT License としておきました。)
そのほか必須でないものは適宜コメントアウトしました。
メインファイル
LiveInWater.java
(元はExampleMod.java
)がModのメインクラスとなります。明らかに使わなそうなものなど消してすっきりさせます。
package jp.koteko.liveinwater;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent;
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@Mod("liveinwater")
public class LiveInWater
{
private static final Logger LOGGER = LogManager.getLogger();
public LiveInWater() {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueIMC);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::processIMC);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);
MinecraftForge.EVENT_BUS.register(this);
}
private void setup(final FMLCommonSetupEvent event)
{
LOGGER.info("SETUP START");
LOGGER.info("SETUP END");
}
private void doClientStuff(final FMLClientSetupEvent event) {
// do something that can only be done on the client
}
private void enqueueIMC(final InterModEnqueueEvent event)
{
// some example code to dispatch IMC to another mod
}
private void processIMC(final InterModProcessEvent event)
{
// some example code to receive and process InterModComms from other mods
}
@SubscribeEvent
public void onServerStarting(FMLServerStartingEvent event) {
LOGGER.info("server starting");
}
}
ファイル名(LiveInWater.java
)とクラス名(public class LiveInWater
)およびコンストラクタ(public LiveInWater()
)が一致していることを確かめましょう。またmodIdの指定(@Mod("liveinwater")
)が上で編集したmods.toml
での指定と同じであるか確認しましょう。
このクラスが行っていることのイメージとしては、4つのライフサイクルをレールに乗せて、そのレールをForge上に挿入してやる感じです。これらの扱いはまだ詳しくないので一応4つ残しておきます。
また末尾の方にブロックを登録するコードがあったと思いますが、これは別にクラスを用意したほうがすっきりするのでこのファイル上では削除しました。
起動確認
最後に念のためゲームが起動することを確認しておきます。起動したらmodsを開いて情報が更新されていることを確認します。
VERSION
がNONEですが、これは実際にModのjarファイルを構成するときに付与するので、ここではNONEになります。
参考
Structuring Your Mod - Forge Documentation
[Java]MinecraftのModを作成しよう 1.14.4【0. 基本ファイル】
Minecraft 1.14.4 Forge Modの作成 その2 【基本的なファイルの配置】