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

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

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

ワールド上に設置できる簡単な無機能ブロックの追加方法。

ブロックの追加

ソースコード

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().isClient())
            ModelLoader.setCustomModelResourceLocation(ITEMS.sample_block, 0, new ModelResourceLocation(ITEMS.sample_block.getRegistryName(), "inventory"));
    }
}

解説

以前とは違い、登録用イベントが発火されるようになった。
アイテムとブロックのインスタンス保持はForgeの中の人の手法に沿ったものであるが、別に従来の方法でも問題ない。ここでは細かな解説をしない。
LangやModel用Jsonについては過去のチュートリアルを参照のこと。