提供: Minecraft Modding Wiki
この記事は"Minecraft Forge Universal 13.19.0.xxx~"を前提MODとしています。 |
ワールド上に設置できる簡単な無機能ブロックの追加方法。
ブロックの追加
ソースコード
SampleMod.java
package com.example.block; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.GameRegistry.ObjectHolder; import net.minecraftforge.fml.relauncher.Side; @Mod(modid = SampleMod.MOD_ID, name = SampleMod.MOD_NAME, version = SampleMod.MOD_VERSION, dependencies = SampleMod.MOD_DEPENDENCIES, acceptedMinecraftVersions = SampleMod.MOD_ACCEPTED_MC_VERSIONS, useMetadata = true) @EventBusSubscriber public class SampleMod{ /** * ModID文字列 */ public static final String MOD_ID = "samplemod"; /** * MOD名称 */ public static final String MOD_NAME = "SampleMod"; /** * MODのバージョン */ public static final String MOD_VERSION = "0.0.1"; /** * 前に読み込まれるべき前提MODをバージョン込みで指定 */ public static final String MOD_DEPENDENCIES = "required-after:forge@[1.11-13.19.0.2130,)"; /** * 起動出来るMinecraft本体のバージョン。記法はMavenのVersion Range Specificationを検索すること。 */ public static final String MOD_ACCEPTED_MC_VERSIONS = "[1.11]"; @ObjectHolder(MOD_ID) public static class BLOCKS{ public static final Block sample_block = null; } @ObjectHolder(MOD_ID) public static class ITEMS{ public static final Item sample_block = null; } /** * アイテム登録用イベント */ @SubscribeEvent protected static void registerItems(RegistryEvent.Register<Item> event){ event.getRegistry().registerAll( new ItemBlock(BLOCKS.sample_block).setRegistryName(MOD_ID, "sample_block") ); } /** * ブロック登録用イベント */ @SubscribeEvent protected static void registerBlocks(RegistryEvent.Register<Block> event){ event.getRegistry().registerAll( new Block(Material.ROCK) .setRegistryName(MOD_ID, "sample_block")/*登録名の設定*/ .setCreativeTab(CreativeTabs.BUILDING_BLOCKS)/*クリエイティブタブの選択*/ .setUnlocalizedName("blockSample")/*システム名の設定*/ .setHardness(1.5F)/*硬さ*/ .setResistance(1.0F)/*爆破耐性*/ ); } @EventHandler public void preInit(FMLPreInitializationEvent event){ if (event.getSide() == Side.CLIENT) ModelLoader.setCustomModelResourceLocation(ITEMS.sample_block, 0, new ModelResourceLocation(ITEMS.sample_block.getRegistryName(), "inventory")); } }
解説
以前とは違い、登録用イベントが発火されるようになった。
アイテムとブロックのインスタンス保持はForgeの中の人の手法に沿ったものであるが、別に従来の方法でも問題ない。ここでは細かな解説をしない。
LangやModel用Jsonについては過去のチュートリアルを参照のこと。
また、1.11からMOD ID等のリソースに関連する文字列はすべて小文字が推奨されるようになった。
例えば、Langファイルは「ja_JP.lang」ではなく「ja_jp.lang」が推奨される。