提供: Minecraft Modding Wiki
移動先: 案内検索

この記事は"Minecraft Forge Universal 12.16.0.xxx~"を前提MODとしています。

Wood pickaxe.png
初心者向けのチュートリアルです。
C block.png
Blockに関係のあるチュートリアルです。

ワールド上に設置できる簡単な無機能ブロックの追加方法。
登録方法以外に変わった点はないので、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":[{}]
  }
}