提供: Minecraft Modding Wiki
この記事は"Minecraft Forge Universal 12.16.0.xxx~"を前提MODとしています。 |
ワールド上に設置できる簡単な無機能ブロックの追加方法。
登録方法以外に変わった点はないので、BlockStateの扱いについては1.8のブロック追加を参照のこと。
また、Blockstate用のJsonにForgeの提供する書式を採用しているが、バニラの方法で書いても問題ない。
ブロックの追加
注意:一度入れたMODを外すと、再び入れてもテクスチャが反映されなくなります。デバッグ時にご注意を。
ソースコード
- SampleMod.java
package com.example.block; import net.minecraft.block.Block; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.ItemBlock; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.registry.GameData; import net.minecraftforge.fml.common.registry.GameRegistry; @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) 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.9-12.16.0.1853,)"; /** 起動出来るMinecraft本体のバージョン。記法はMavenのVersion Range Specificationを検索すること。 */ public static final String MOD_ACCEPTED_MC_VERSIONS = "[1.9]"; /** 追加したいブロックのインスタンスを格納するための変数。レシピ等で利用。 */ public static Block sampleBlock; @EventHandler public void preInit(FMLPreInitializationEvent event){ sampleBlock = new SampleBlock(); //ブロックの登録。登録文字列はMOD内で被らなければ何でも良い。 ResourceLocation registryName = new ResourceLocation(MOD_ID, "sampleblock"); ItemBlock sampleItemBlock = new ItemBlock(sampleBlock); GameRegistry.register(sampleBlock, registryName); GameRegistry.register(sampleItemBlock, registryName); //テクスチャ・モデル指定JSONファイル名の登録。 //今回は基本的な説明に留めるため、BlockStateについては解説しない。 //詳しくは1.8のブロック追加を見るように。 if(event.getSide().isClient()){ ModelLoader.setCustomModelResourceLocation(sampleItemBlock, 0, new ModelResourceLocation(new ResourceLocation(MOD_ID, "sampleblock"), "inventory")); } } }
- SampleBlock.java
package com.example.block; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; public class SampleBlock extends Block{ public SampleBlock() { super(Material.ROCK); setCreativeTab(CreativeTabs.BUIDING_BLOCKS);/*クリエイティブタブの選択*/ setUnlocalizedName("blockSample");/*システム名の設定*/ /*以下のものは消しても結構です*/ setHardness(1.5F);/*硬さ*/ setResistance(1.0F);/*爆破耐性*/ setSoundType(SoundType.STONE);/*ブロックの上を歩いた時の音*/ /*setBlockUnbreakable();*//*ブロックを破壊不可に設定*/ /*setTickRandomly(true);*//*ブロックのtick処理をランダムに。デフォルトfalse*/ /*disableStats();*//*ブロックの統計情報を保存しない*/ setLightOpacity(1);/*ブロックの透過係数。デフォルト0(不透過)*/ setLightLevel(1.0F);/*明るさ 1.0F = 15*/ /*this.setDefaultState(getBlockState().getBaseState());*//*初期BlockStateの設定*/ } }
- sampleblock.json(BlockState用)
{ "forge_marker": 1, "defaults": { "model": "cube_all", "textures": { "all": "blocks/dirt" }, "transform": "forge:default-block" }, "variants": { "normal":[{}], "inventory":[{}] } }