はじめに
今回はツールの追加第一弾として剣を追加してみたいと思います。
MODの作成において主に以下のサイトを参考にさせていただきます。
チュートリアル一覧
また、今回は以下のYoutube動画が大変参考になりました。
【マインクラフト】MODの作り方 part2 アイテム&ツール作成編
💻開発環境
- Windows 10
- JDK 8u211
- Minecraft 1.12.2
- Minecraft Forge 1.12.2 (14.23.5.2838)
- IntelliJ IDEA 2019.1.3
ツールを作るための素材をアイテムとして登録
琵琶湖の水をアイテムとして登録します。
メンバーの追加
@GameRegistry.ObjectHolder(MOD_ID)
public static class Items {
public static final Item biwakoBurger = null; /** 琵琶湖バーガー */
public static final Item biwakoWater = null; /** 琵琶湖の水 */
}
アイテムとモデルの登録
アイテムの登録は、コンマ(,)をつけて同じように書く。
モデルの登録はメンバー名変更するだけ。
@Mod.EventBusSubscriber
public static class ObjectRegistryHandler {
@SubscribeEvent
public static void addItems(RegistryEvent.Register<Item> event) {
event.getRegistry().registerAll(
new Item()
.setRegistryName(MOD_ID, "biwakoburger")
.setCreativeTab(CreativeTabs.FOOD)
.setTranslationKey("biwakoburger"),
new Item()
.setRegistryName(MOD_ID,"biwakowater")
.setCreativeTab(CreativeTabs.MATERIALS)
.setTranslationKey("biwakowater")
);
}
@SubscribeEvent
public static void addBlocks(RegistryEvent.Register<Block> event) {
}
@SubscribeEvent
public static void registerModels(ModelRegistryEvent event) {
ModelLoader.setCustomModelResourceLocation(Items.biwakoBurger, 0, new ModelResourceLocation(Items.biwakoBurger.getRegistryName(), "inventory"));
ModelLoader.setCustomModelResourceLocation(Items.biwakoWater, 0, new ModelResourceLocation(Items.biwakoWater.getRegistryName(), "inventory"));
}
}
jsonファイル
琵琶湖の水には、バニラに用意されている水バケツ
のテクスチャを利用しようと思う。
そこで、バニラのアイテムのjsonファイルを見てみる。
右側のプロジェクトウィンドウの一番下に外部ライブラリ-
があり、
これのforgeSrc-1.12.2-14.23.5.2838.jar/assets/minecraft/models/item
にjsonが入っている。
ちなみに、水バケツはwater_bucket.json
という名前で置かれていた。
biwakowater.json
ファイルを作成し、water_bucket.json
の中身をコピペする。
{
"parent": "item/generated",
"textures": {
"layer0": "items/bucket_water"
}
}
langファイル
こんな感じ。
# 日本語言語ファイル
item.biwakoburger.name=琵琶湖バーガー
item.biwakowater.name=琵琶湖の水
# English Language File
item.biwakoburger.name=Biwako Burger
item.biwakowater.name=Water of Biwako
minecraftの起動
ここまでは前回と同じ手順。
琵琶湖ソードを追加
まずはソードを追加してみます。
メンバーの追加
ソードのメンバを新しく追加します。ソードも変数をItemとするようです。
@GameRegistry.ObjectHolder(MOD_ID)
public static class Items {
public static final Item biwakoBurger = null; /** 琵琶湖バーガー */
public static final Item biwakoWater = null; /** 琵琶湖の水 */
public static final Item biwakoSword = null; /** 琵琶湖ソード , 滋賀剣*/
}
ソード追加クラス
src/main/java/jp/yuyu/biwako_mod
にソード追加用のクラスを作成します。
ファイル名はAddSword.java
としました。
ItemSwordクラスを継承させ、以下のように記述しておきます。
package jp.yuyu.biwako_mod;
import net.minecraft.item.ItemSword;
public class AddSword extends ItemSword {
public AddSword(ToolMaterial material){
super(material);
}
}
アイテムの登録
少し長くなってきましたので、次回からは一部のみ記載することにします。
無機能アイテムを登録したときと同じように、addItemsメソッド内でアイテムの登録を行います。
先程作ったAddSwordクラスのインスタンスを作成し、
引数には、EnumHelper.addToolMaterialメソッドを用いてツールのパラメータを設定します。
パラメータは以下の通りに設定してみました。
また、CreativeTabの設定はせずとも、ItemSwordクラスがやってくれるようです。
名前 | 値 |
---|---|
name | BIWAKOWATER_MATERIAL |
harvestLevel | 1 |
maxUses | 1000 |
efficiency | 5 |
damage | 7 |
enchantabillity | 1 |
@Mod.EventBusSubscriber
public static class ObjectRegistryHandler {
@SubscribeEvent
public static void addItems(RegistryEvent.Register<Item> event) {
event.getRegistry().registerAll(
new Item()
.setRegistryName(MOD_ID, "biwakoburger")
.setCreativeTab(CreativeTabs.FOOD)
.setTranslationKey("biwakoburger"),
new Item()
.setRegistryName(MOD_ID,"biwakowater")
.setCreativeTab(CreativeTabs.MATERIALS)
.setTranslationKey("biwakowater"),
new AddSword(EnumHelper.addToolMaterial("BIWAKOWATER_MATERIAL",1,1000,5,7,1))
.setRegistryName(MOD_ID,"biwakosword")
.setTranslationKey("biwakosword")
);
}
@SubscribeEvent
public static void addBlocks(RegistryEvent.Register<Block> event) {
}
/**
* モデル登録用イベント
*/
@SubscribeEvent
public static void registerModels(ModelRegistryEvent event) {
ModelLoader.setCustomModelResourceLocation(Items.biwakoBurger, 0, new ModelResourceLocation(Items.biwakoBurger.getRegistryName(), "inventory"));
ModelLoader.setCustomModelResourceLocation(Items.biwakoWater, 0, new ModelResourceLocation(Items.biwakoWater.getRegistryName(), "inventory"));
ModelLoader.setCustomModelResourceLocation(Items.biwakoSword, 0, new ModelResourceLocation(Items.biwakoSword.getRegistryName(), "inventory"));
}
}
ソードのテクスチャ
models/item/biwakosword.json
を作成します。
テクスチャは用意できなかったので、代わりにバニラのダイヤモンドソードのテクスチャを使用します。
無機能アイテムと違い、ソードの場合はparentの値をitem/handheldにします。
{
"parent": "item/handheld",
"textures": {
"layer0": "items/diamond_sword"
}
}
langの設定
# English Language File
item.biwakoburger.name=Biwako Burger
item.biwakowater.name=Water of Biwako
item.biwakosword.name=Biwako Sword
# 日本語言語ファイル
item.biwakoburger.name=琵琶湖バーガー
item.biwakowater.name=琵琶湖の水
item.biwakosword.name=滋賀県
minecraftの起動
レシピの登録
レシピ登録のJsonファイル
Jsonファイルを使ってレシピ登録ができるようです。
resources/assets/biwako_mod/recipes/biwakosword_recipe.json
を作成します。
ファイル名は何でも良いようですので、わかりやすい名前をつけておきます。
patternには、作業台にアイテムをどう配置するかを記述し、
アルファベットに対するアイテムが何なのかをkeyとして記述します。
{
"type": "minecraft:crafting_shaped",
"pattern": [
"W",
"W",
"S"
],
"key": {
"W": [
{
"item": "biwako_mod:biwakowater",
"data": 0
}
],
"S": [
{
"item": "minecraft:stick",
"data": 0
}
]
},
"result": {
"item": "biwako_mod:biwakosword",
"data": 0,
"count": 1
}
}
クラフト後に返ってくるアイテム
滋賀県(琵琶湖ソード)は琵琶湖の水を素材として使用します。
クラフト後にはバケツが返ってきてほしいのです。
これはレシピ用のJsonファイルに記述するのではなく、アイテムの登録時に設定します。
setContainerItemというメソッドの引数にバニラのバケツを渡せばOKです。
new Item()
.setRegistryName(MOD_ID,"biwakowater")
.setCreativeTab(CreativeTabs.MATERIALS)
.setTranslationKey("biwakowater")
.setContainerItem(Item.getByNameOrId("bucket")),
minecraftの起動
左側のレシピには、一度クラフトすると表示されるようになりました。
ケーキで試して挙動が同じか確かめた痕跡が残ってるSSですが、
ちゃんとクラフト後にはバケツが残りますね!
返ってくるアイテムはIDでも指定できるようで、適当にID指定したら砂利が返ってきたのも写ってますね...。
おわりに
ツール作成第一弾、ソードの追加ができました。
アイテムの登録に関しては、なんとなくわかってきた気がします(ほんとに気がするだけ)。
色合いを変えるだけでもいいから、専用テクスチャを用意しておきたいのと、
ツールのパラメータをいい感じに調整したいですね。
現在開発中の琵琶湖MOD
ですが、Githubにてプロジェクトを公開しています。
次回は琵琶湖ツールを完成させます。
Minecraft 1.12.2 Forge Modの作成 その1 【開発環境の準備 IntelliJ IDEA】
Minecraft 1.12.2 Forge Modの作成 その2 【mcmod.infoの編集と無機能アイテムの追加】
Minecraft 1.12.2 Forge Modの作成 その3 【剣の追加とレシピ登録,クラフト後に返ってくるアイテムの設定】
Minecraft 1.12.2 Forge Modの作成 その4 【ブロックの追加】
2018/08/08 初版