はじめに
今回は、マイクラのMod開発としてオリジナルブロックの追加をやってみたいと思います。
前提
以下記事を参考にModの開発環境が構築されていること。
【参照】
【開発環境構築】VSCodeでMinecraft(Java版)のMOD作成環境を構築する – SEもりのLog (selifemorizo.com)
【Java + Mod開発】Minecraftで作成するModの名前を変更してみる – SEもりのLog (selifemorizo.com)
【Java + Mod開発】オリジナルのアイテムを追加してみる – SEもりのLog (selifemorizo.com)
フォルダ構成を作成する
赤字のフォルダ・ファイルが今回必要な追加対象になります。
│ .gitattributes
│ .gitignore
│ build.gradle
│ changelog.txt
│ CREDITS.txt
│ gradle.properties
│ gradlew
│ gradlew.bat
│ LICENSE.txt
│ README.txt
│ runClient.launch
│ runData.launch
│ runGameTestServer.launch
│ runServer.launch
│ settings.gradle
│
├─.vscode
│ settings.json
└─src
├─generated
│ └─resources
├─main
│ ├─java
│ │ └─com
│ │ └─mori
│ │ └─morimod
│ │ │ Config.java
│ │ │ MoriMod.java
│ │ │
│ │ ├─blocks
│ │ │ MoriModBlock.java
│ │ │
│ │ └─items
│ │ MoriModItem.java
│ │
│ └─resources
│ │ pack.mcmeta
│ │
│ ├─assets
│ │ └─morimod
│ │ ├─blockstates
│ │ │ moriblock.json
│ │ │
│ │ ├─lang
│ │ │ en_us.json
│ │ │ ja_jp.json
│ │ │
│ │ ├─models
│ │ │ ├─block
│ │ │ │ moriblock.json
│ │ │ │
│ │ │ └─item
│ │ │ moriblock.json
│ │ │ moriitem.json
│ │ │
│ │ └─textures
│ │ ├─block
│ │ │ moriblock.png
│ │ │
│ │ └─item
│ │ moriitem.png
│ │
│ └─META-INF
│ mods.toml
│
ソース編集
MoriModBlock.java
ブロックMod用のjavaファイルを作成します。
package com.mori.morimod.blocks;
import java.util.function.Supplier;
import com.mori.morimod.MoriMod;
import com.mori.morimod.items.MoriModItem;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
import net.minecraft.world.level.material.MapColor;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
/**
* ブロックMod用クラス
*/
public class MoriModBlock {
// MODIDは自身で設定したものを指定します
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MoriMod.MODID);
// 既存ブロックの設定をコピーしたブロックの設定が可能(↓は鉄ブロック)
// public static final RegistryObject<Block> MORIBLOCK = registerBlock("moriblock",
// () -> new Block(BlockBehaviour.Properties.copy(Blocks.IRON_BARS)));
// ブロックの設定(下は草ブロックの設定をパクってきたもの)
public static final RegistryObject<Block> MORIBLOCK =
registerBlock("moriblock",
() -> new Block(BlockBehaviour.Properties.of()
.mapColor(MapColor.GRASS)
.randomTicks()
.strength(0.6F)
.sound(SoundType.GRASS)));
private static <T extends Block> RegistryObject<T> registerBlock(String name, Supplier<T> block) {
RegistryObject<T> returnObj = BLOCKS.register(name, block);
registerBlockItem(name, returnObj);
return returnObj;
}
/**
* ブロックをアイテムとして登録するメソッド
*/
private static <T extends Block> RegistryObject<Item> registerBlockItem(String name, RegistryObject<T> block) {
return MoriModItem.ITEMS.register(name, () -> new BlockItem(block.get(), new Item.Properties()));
}
public static void register(IEventBus eventBus) {
BLOCKS.register(eventBus);
}
}
MoriMod.java
Modの大元のクラスでブロックMod用のクラスを読み込みます。
@Mod(MoriMod.MODID)
public class MoriMod
{
~~~~~~~~~~~~~~~
public MoriMod()
{
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
MoriModItem.register(modEventBus);
MoriModBlock.register(modEventBus);
~~~~~~~~~~~~~~~
}
~~~~~~~~~~~~~~~
// Add the example block item to the building blocks tab
private void addCreative(BuildCreativeModeTabContentsEvent event)
{
// クリエイティブモードのタブにアイテムをセット
// INGREDIENTSは材料のグループになる
if (event.getTabKey() == CreativeModeTabs.INGREDIENTS) {
event.accept(MoriModItem.MORIITEM.get());
}
// クリエイティブモードのタブにアイテムをセット
// BUILDING_BLOCKSは建材
if (event.getTabKey() == CreativeModeTabs.BUILDING_BLOCKS) {
event.accept(MoriModBlock.MORIBLOCK.get());
}
}
~~~~~~~~~~~~~~~
}
設定の追加
blockstates/moriblock.json
{
"variants": {
"": {
"model": "morimod:block/moriblock"
}
}
}
block/moriblock.json
{
"parent": "block/cube_all",
"textures":{
"all": "morimod:block/moriblock"
}
}
item/moriblock.json
{
"parent": "item/generated",
"textures":{
"layer0": "morimod:item/moriitem"
}
}
テクスチャ格納
画像サイズは、できる限り小さくしたほうが良いです。
この例はは大きくして張っています。
ja_jp.json
{
"item.morimod.moriitem": "もり アイテム",
"block.morimod.moriblock": "もり ブロック"
}
実行確認
実行して独自のアイテムが作成されていることを確認しましょう!
クリエイティブモードに変更する
/gamemode creative
建材の確認
建材のグループに独自のブロックが追加されていることを確認。
操作してみる
置いたり持ったりできたら今回は完了です。
公式サイト
最後に
以上、ログになります。
これからも継続していきましょう!!
コメント