[MC1.12]MOD製作チュートリアル > ブロックの追加

概要

何の機能もない基本的なブロックを追加する。
前のチュートリアルと同様の部分は割愛している。

ソースコード

  • AluminiumMod.java
package com.tntmodders.tutorial;
 
import net.minecraft.block.Block;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLConstructionEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
 
@Mod(modid = "aluminiummod", version = "1.0", name = "AluminiumMod")
public class AluminiumMod {
    public static final Item ALUMINIUM = new ItemAluminium();
    public static final Block ALUMINIUM_BLOCK = new BlockAluminium();
    public static final AluminiumRecipeHolder HOLDER = new AluminiumRecipeHolder();
 
    @Mod.EventHandler
    //この関数でMODファイル自体をイベントの発火先にする。
    public void construct(FMLConstructionEvent event) {
        MinecraftForge.EVENT_BUS.register(this);
    }
 
    //アイテムを登録するイベント。 旧preinitのタイミングで発火する。
    @SubscribeEvent
    public void registerItems(RegistryEvent.Register<Item> event) {
        event.getRegistry().register(ALUMINIUM);
        event.getRegistry().register(new ItemBlock(ALUMINIUM_BLOCK).setRegistryName("aluminiummod", "aluminium_block"));
    }
 
    //ブロックを登録するイベント。 旧preinitのタイミングで発火する。
    @SubscribeEvent
    public void registerBlocks(RegistryEvent.Register<Block> event) {
        event.getRegistry().register(ALUMINIUM_BLOCK);
    }
 
    //モデルを登録するイベント。@SideOnlyによってクライアント側のみ呼ばれる。旧preinitのタイミングで発火する。
    @SubscribeEvent
    @SideOnly(Side.CLIENT)
    public void registerModels(ModelRegistryEvent event) {
        ModelLoader.setCustomModelResourceLocation(ALUMINIUM, 0, new ModelResourceLocation(new ResourceLocation("aluminiummod", "aluminium"), "inventory"));
        ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(ALUMINIUM_BLOCK), 0, new ModelResourceLocation(new ResourceLocation("aluminiummod", "aluminium_block"), "inventory"));
    }
}
 

  • BlockAluminium.java
package com.tntmodders.tutorial;
 
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
 
public class BlockAluminium extends Block {
    public BlockAluminium() {
        super(Material.IRON);
        this.setRegistryName("aluminiummod","aluminium_block");
        this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
        this.setUnlocalizedName("aluminium_block");
    }
}
 

アセット

  • aluminium_block.json[item]
src/main/resources/assets/aluminiummod/models/item/に配置する
{
  "parent": "aluminiummod:block/aluminium_block"
}
 

  • aluminium_block.json[block]
src/main/resources/assets/aluminiummod/models/block/に配置する
{
  "parent": "block/cube_all",
  "textures": {
    "all": "aluminiummod:blocks/aluminium_block"
  }
}
 

  • aluminium_block.json[blockstate]
src/main/resources/assets/aluminiummod/blockstates/に配置する
{
  "forge_marker": 1,
  "defaults": {
    "textures": {
      "particle": "aluminiummod:blocks/aluminium_block"
    },
    "model": "aluminiummod:aluminium_block",
    "uvlock": false
  },
  "variants": {
    "normal": [{
 
    }],
    "inventory": [{
 
    }]
  }
}
 

  • en_US.lang
#AluminiumMod English Langage File
item.aluminium.name=aluminium
tile.aluminium_block.name=aluminium block
 

  • ja_JP.lang
#アルミニウムMOD 日本語言語ファイル
item.aluminium.name=アルミニウム
tile.aluminium_block.name=アルミニウムブロック
 

  • aluminium_block.png
src/main/resources/assets/aluminiummod/textures/blocks/に配置する

解説

AluminiumMod.java

@Modの使い方は1.7.10版参照。MODIDは小文字推奨。

public void registerItems(RegistryEvent.Register<Item> event)

アイテム登録用のイベント。1.12では、ItemBlockをItemのレジスターに登録しなければいけない。

public void registerBlocks(RegistryEvent.Register<Block> event)

ブロック登録用のイベント。アイテムとほぼ同仕様。

BlockAluminium.java

登録したレジスター名はblockstateの描画の方で使用する。基本的にモデル名と一緒にしておくと良い。

aluminium_block.json[item]

アイテムのモデルjsonはsrc/resources/assets/<modid>/models/item/ に配置する。名称はsetCustonResourceLocationに渡したModelResourceLocationでの名称にする。
これはblockの方のモデルを継承している。アイテムと同様、display等の要素で描画を操作できる。

aluminium_block.json[block]

ブロックのモデルjsonはsrc/resources/assets/<modid>/models/block/ に配置する。名称はアイテムのモデルjsonと同様。
テクスチャの指定方法もアイテムと同様である。

aluminium_block.json[blockstate]

blockstateのモデルjsonはsrc/resources/assets/<modid>/blockstates/
forge式記法でインベントリとワールド描画が同様のblockにおいてあるモデルを使用することを指定する。
また、破壊時のパーティクルをテクスチャで指定できる。

en_US.lang, ja_JP.lang

アイテムの名称は tile.<翻訳名>.name=<名称> で登録できる。

コメント

この項目に関する質問などをどうぞ。
  • 画像保存先がtextures/items/ となっていますが、textures/blocks/ ではないでしょうか? - 名無しさん 2017-08-07 23:40:50
    • ご指摘有難うございます。訂正いたしました。 - Tom Kate 2017-08-08 17:54:23
最終更新:2017年08月08日 17:54