はじめに
Minecraft 1.12.2の時に比べて書き方が大きく変わっている印象を受けました。
基本的なファイルを配置し、MinecraftがModを読み込むところまで進めます。
2019/10/29 下記例外が発生するため、pack.mcmetaの修正
Caused by: com.google.gson.stream.MalformedJsonException: Expected name at line 5 column 6 path $.pack.pack_format
💻開発環境
ここでは環境は以下のようにします。
- Windows 10
- JDK 8u211
- Minecraft 1.14.4
- Minecraft Forge 1.14.4 (28.1.0)
- IntelliJ IDEA 2019.1.4
パッケージの作成
まずはパッケージ(フォルダ)を作成しておきます。
パッケージの名前の付け方には一般的な決め方があります。
- GroupId: 組織名のこと。一般的にはドメインを逆から書く形式
- ArtifactId: プロジェクトの名前
これに従って名前を決めた時、パッケージを作成すると以下のようになります。
項目 | 値 |
---|---|
GroupId | jp.yuyu |
ArtifactId | biwako_mod |
C:\Users\HIRO\IdeaProjects\biwako_mod
└─src
└─main
├─java
│ └─jp
│ └─yuyu
│ └─biwako_mod
└─resources
└─assets
└─biwako_mod
pack.mcmeta
リソースパックの詳細を記載するファイルです。
前回落としてきたMdk、forge-1.14.4-28.1.0-mdk.zip
の中にサンプルが入っているのでそれを参考に書いてみます。
resources
フォルダ内にファイルを作成します。
1.7以前は"pack_format": 1に、1.8以降からは"pack_format": 2,に、1.11以降から1.12までは"pack_format": 3に,1.13以降は"pack_format":4にする必要があります。
リソースパック/作り方 - Minecraft Japan Wiki - アットウィキより
今回はMinecraft 1.14.4なので、"pack_format":4
になります。
└─resources
│ *pack.mcmeta
│
└─assets
└─biwako_mod
{
"pack": {
"description": "Biwako Mod resources",
"pack_format": 4
}
}
mods.toml
Mod情報を記載するファイルです。
Minecraft 1.12.2ではmcmod.info
だったものですね。
同様にforge-1.14.4-28.1.0-mdk.zip
の中にサンプルが入っているのでそれを参考に書いてみます。
resources/META-INF
フォルダを作成してその中にmods.toml
を配置します。
また、ロゴファイルはresources
フォルダ内に配置して、そのファイルパスを指定することにします。
└─resources
│ pack.mcmeta
│ *logo.png
│
├─assets
│ └─biwako_mod
│
└─*META-INF
*mods.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="[28,)" #mandatory (28 is current forge version)
# A list of mods - how many allowed here is determined by the individual mod loader
[[mods]] #mandatory
# The modid of the mod
modId="biwako_mod" #mandatory
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
version="1.0.0"
# A display name for the mod
displayName="Biwako Mod" #mandatory
# A URL for the "homepage" for this mod, displayed in the mod UI
displayURL="https://github.com/Hiroya-W/biwakoMC" #optional
# A file name (in the root of the mod JAR) containing a logo for display
logoFile="logo.png" #optional
# A text field displayed in the mod UI
authors="Hiroya_W" #optional
# The description text for the mod (multi line!) (#mandatory)
description='''
Biwako is the largest lake in Japan.
'''
# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
[[dependencies.biwako_mod]] #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="[28,)" #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.biwako_mod]]
modId="minecraft"
mandatory=true
versionRange="[1.14.4]"
ordering="NONE"
side="BOTH"
メインクラス
作成
BiwakoMod.java
を以下の位置に配置します。
└─src
└─main
├─java
│ └─jp
│ └─yuyu
│ └─biwako_mod
│ *BiwakoMod.java
ひな型
-
@Mod
アノテーションにはMOD_ID
名のみ記述する。
なので、1.12.2でのMOD_NAME
、MOD_VERSION
はmods.toml
のみで管理するのだと思う。 -
@Mod
アノテーションのあるクラスのコンストラクタで、初期化処理のリスナを登録する -
setup
メソッドが1.12.2のpreInit
メソッドに相当する。 -
doClientStuff
はクライアント側でのみ実行する初期化処理を記述する。
1.12.2のClientProxy
に相当する。
詳しくは【Forge】1.13.2での自作したEntityとEntityRenderの登録方法に詳しく書かれていました。
そして、おそろくこれがメインクラスのひな型になる。
package jp.yuyu.biwako_mod;
import net.minecraft.block.Block;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent;
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.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
// The value here should match an entry in the META-INF/mods.toml file
@Mod(BiwakoMod.MOD_ID)
public class BiwakoMod
{
public static final String MOD_ID = "biwako_mod";
// Directly reference a log4j logger.
private static final Logger LOGGER = LogManager.getLogger();
public BiwakoMod() {
// Register the setup method for modloading
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
// Register the doClientStuff method for modloading
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);
// Register ourselves for server and other game events we are interested in
MinecraftForge.EVENT_BUS.register(this);
}
private void setup(final FMLCommonSetupEvent event)
{
// some preinit code
LOGGER.info("HELLO FROM PREINIT");
}
private void doClientStuff(final FMLClientSetupEvent event) {
// do something that can only be done on the client
LOGGER.info("HELLO FROM Client Setup");
}
// You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD
// Event bus for receiving Registry Events)
@Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)
public static class RegistryEvents {
@SubscribeEvent
public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {
// register a new block here
LOGGER.info("HELLO from Register Block");
}
}
}
Minecraftの起動
Githubにてプロジェクトを公開しています。