はじめに
今回は、マイクラのMod開発として追加したオリジナルのアイテムに機能を追加していきたいと思います。
前提
ドロップ作成の前提として、以下記事を参考にModの開発環境が構築されていること。
【参照】
【開発環境構築】VSCodeでMinecraft(Java版)のMOD作成環境を構築する – SEもりのLog (selifemorizo.com)
【Java + Mod開発】オリジナルのアイテムを追加してみる – SEもりのLog (selifemorizo.com)
【Java + Mod開発】オリジナルのブロックをMinecraftで追加してみる – SEもりのLog (selifemorizo.com)
アイテムに機能を追加する
右クリックしたアイテムの名前を出力する機能を持ったロッドを今回は追加して見ます。
フォルダ構成
赤字のフォルダ・ファイルが今回必要な追加・修正対象になります。
└─src
├─generated
│ └─resources
├─main
│ ├─java
│ │ └─com
│ │ └─mori
│ │ └─morimod
│ │ │ Config.java
│ │ │ MoriMod.java
│ │ │
│ │ ├─blocks
│ │ │ MoriModBlock.java
│ │ │
│ │ └─items
│ │ │ MoriModItem.java
│ │ │
│ │ └─customize
│ │ JudgeItem.java
│ │
│ └─resources
│ │ pack.mcmeta
│ │
│ ├─assets
│ │ └─morimod
│ │ ├─blockstates
│ │ │ moriblock.json
│ │ │ mo_block.json
│ │ │ ri_block.json
│ │ │
│ │ ├─lang
│ │ │ en_us.json
│ │ │ ja_jp.json
│ │ │
│ │ ├─models
│ │ │ ├─block
│ │ │ │ moriblock.json
│ │ │ │ mo_block.json
│ │ │ │ ri_block.json
│ │ │ │
│ │ │ └─item
│ │ │ judge_rod.json
│ │ │ moriblock.json
│ │ │ moriitem.json
│ │ │ moriitem2.json
│ │ │ mo_block.json
│ │ │ ri_block.json
│ │ │
│ │ └─textures
│ │ ├─block
│ │ │ moriblock.png
│ │ │ mo_block.png
│ │ │ ri_block.png
│ │ │
│ │ └─item
│ │ judge_rod.png
│ │ moriitem.png
│ │ moriitem2.png
│ │
│ ├─data
│ │ ├─minecraft
│ │ │ └─tags
│ │ │ └─blocks
│ │ │ │ needs_diamond_tool.json
│ │ │ │ needs_iron_tool.json
│ │ │ │ needs_stone_tool.json
│ │ │ │
│ │ │ └─mineable
│ │ │ axe.json
│ │ │ hoe.json
│ │ │ pickaxe.json
│ │ │ shovel.json
│ │ │
│ │ └─morimod
│ │ ├─loot_tables
│ │ │ └─blocks
│ │ │ moriblock.json
│ │ │ mo_block.json
│ │ │ ri_block.json
│ │ │
│ │ └─recipes
│ │ moriblock.json
│ │ moriitem_from_block.json
│ │
│ └─META-INF
│ mods.toml
│
ソース編集
customize/JudgeItem.java
追加したアイテムに機能を追加するクラスを作成します。
package com.mori.morimod.items.customize;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.block.state.BlockState;
public class JudgeItem extends Item {
public JudgeItem(Properties properties) {
super(properties);
}
/**
* 右クリック
*/
@Override
public InteractionResult useOn(UseOnContext p_41427_) {
if (!p_41427_.getLevel().isClientSide()) {
BlockPos position = p_41427_.getClickedPos();
Player player = p_41427_.getPlayer();
BlockState blockstate = p_41427_.getLevel().getBlockState(position.below());
player.sendSystemMessage(Component.literal("ブロック名:" + blockstate.getBlock().getName()));
}
p_41427_.getItemInHand().hurtAndBreak(1, p_41427_.getPlayer(),
player -> player.broadcastBreakEvent(player.getUsedItemHand()));
return InteractionResult.SUCCESS;
}
}
MoriModItem.java
アイテム用クラスにブロック鑑定ロッドを追加します。
package com.mori.morimod.items;
import com.mori.morimod.MoriMod;
import com.mori.morimod.items.customize.IronSearcherItem;
import com.mori.morimod.items.customize.JudgeItem;
import net.minecraft.world.item.Item;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
/**
* アイテムMod用クラス
*/
public class MoriModItem {
// MODIDは自身で設定したものを指定します
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MoriMod.MODID);
// アイテムオブジェクトの生成 第一引数のnemeはitemのIDを任意でつけます
public static final RegistryObject<Item> MORIITEM = ITEMS.register("moriitem", () -> new Item(new Item.Properties()));
// 2個目のアイテムを追加したい場合もオブジェクトを追加
public static final RegistryObject<Item> MORIITEM2 = ITEMS.register("moriitem2", () -> new Item(new Item.Properties()));
// ブロック鑑定
public static final RegistryObject<Item> JUDGE_ROD = ITEMS.register("judge_rod",
() -> new JudgeItem(new Item.Properties().durability(512)))
public static void register(IEventBus eventBus) {
ITEMS.register(eventBus);
}
}
設定の追加
judge_rod.json
どのテクスチャをどういう形式で出力させるかを設定するファイルです。
ファイル名は自身でつけたアイテムのIDを設定します。
{
"parent": "item/generated",
"textures":{
"layer0": "morimod:item/judge_rod"
}
}
テクスチャ格納
ja_jp.json
ゲーム内で表示するアイテム名を指定します。
{
"item.morimod.moriitem": "もり アイテム",
"item.morimod.judge_rod": "ブロック鑑定",
"block.morimod.moriblock": "もり ブロック",
"block.morimod.mo_block": "も ブロック",
"block.morimod.ri_block": "り ブロック",
"creativetab.moritab": "もり タブ"
}
実行確認
実行してアイテムの機能が追加されていることを確認してみましょう!
右クリックでブロックのアイテム名が出力されます。
公式サイト
最後に
以上、ログになります。
これからも継続していきましょう!!
コメント