[MC1.12]MOD製作チュートリアル > メタデータを持つブロックの追加

概要

メタデータを付与したブロックを追加する。
詳しいソースコードはこちら

ソースコード

  • AluminiumMod.java
//package・import省略
 
@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 Item COLOR_ALUMINIUM = new ItemColorAluminium();
    public static final Block COLOR_ALUMINIUM_BLOCK = new BlockColorAluminium();
    public static final AluminiumRecipeHolder HOLDER = new AluminiumRecipeHolder();
    @Mod.Instance("aluminiummod")
    public static AluminiumMod aluminiumInstance;
 
    @Mod.EventHandler
    public void construct(FMLConstructionEvent event) {
        MinecraftForge.EVENT_BUS.register(this);
    }
 
    @SubscribeEvent
    public void registerItems(RegistryEvent.Register<Item> event) {
        event.getRegistry().register(ALUMINIUM);
        event.getRegistry().register(COLOR_ALUMINIUM);
        event.getRegistry().register(new ItemBlock(ALUMINIUM_BLOCK).setRegistryName("aluminiummod", "aluminium_block"));
        //ItemClothを使って染料の色で16色に定義されているブロックのアイテムを登録する。
        event.getRegistry().register(new ItemCloth(COLOR_ALUMINIUM_BLOCK).setRegistryName("aluminiummod", "color_aluminium_block"));
    }
 
    @SubscribeEvent
    public void registerBlocks(RegistryEvent.Register<Block> event) {
        event.getRegistry().register(ALUMINIUM_BLOCK);
        //ブロックは普通に。
        event.getRegistry().register(COLOR_ALUMINIUM_BLOCK);
    }
 
    @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"));
        //メタデータの分だけモデルを登録する。
        for (int i = 0; i < 16; i++) {
            ModelLoader.setCustomModelResourceLocation(COLOR_ALUMINIUM, i, new ModelResourceLocation(new ResourceLocation("aluminiummod", "color_aluminium_" + i), "inventory"));
            //アイテムのモデルはメタデータを持つアイテムと同様に。
            ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(COLOR_ALUMINIUM_BLOCK), i, new ModelResourceLocation(new ResourceLocation("aluminiummod", "color_aluminium_block_" + i), "inventory"));
        }
    }
/** 以下省略。 */
 

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

  • color_aluminium_block.json
src/main/resources/assets/aluminiummod/blockstates/に配置する
{
  "variants": {
    "color=white": {
      "model": "aluminiummod:color_aluminium_block_0"
    },
    "color=orange": {
      "model": "aluminiummod:color_aluminium_block_1"
    },
    "color=magenta": {
      "model": "aluminiummod:color_aluminium_block_2"
    },
    "color=light_blue": {
      "model": "aluminiummod:color_aluminium_block_3"
    },
    "color=yellow": {
      "model": "aluminiummod:color_aluminium_block_4"
    },
    "color=lime": {
      "model": "aluminiummod:color_aluminium_block_5"
    },
    "color=pink": {
      "model": "aluminiummod:color_aluminium_block_6"
    },
    "color=gray": {
      "model": "aluminiummod:color_aluminium_block_7"
    },
    "color=silver": {
      "model": "aluminiummod:color_aluminium_block_8"
    },
    "color=cyan": {
      "model": "aluminiummod:color_aluminium_block_9"
    },
    "color=purple": {
      "model": "aluminiummod:color_aluminium_block_10"
    },
    "color=blue": {
      "model": "aluminiummod:color_aluminium_block_11"
    },
    "color=brown": {
      "model": "aluminiummod:color_aluminium_block_12"
    },
    "color=green": {
      "model": "aluminiummod:color_aluminium_block_13"
    },
    "color=red": {
      "model": "aluminiummod:color_aluminium_block_14"
    },
    "color=black": {
      "model": "aluminiummod:color_aluminium_block_15"
    }
  }
}
 

  • en_US.lang
src/main/resources/assets/aluminiummod/lang/に配置する
#AluminiumMod English Language File
tile.color_aluminium_block.0.name=white colored aluminium block
tile.color_aluminium_block.1.name=orange colored aluminium block
tile.color_aluminium_block.2.name=magenta colored aluminium block
tile.color_aluminium_block.3.name=light blue colored aluminium block
tile.color_aluminium_block.4.name=yellow colored aluminium block
tile.color_aluminium_block.5.name=lime colored aluminium block
tile.color_aluminium_block.6.name=pink colored aluminium block
tile.color_aluminium_block.7.name=gray colored aluminium block
tile.color_aluminium_block.8.name=sliver colored aluminium block
tile.color_aluminium_block.9.name=cyan colored aluminium block
tile.color_aluminium_block.10.name=purple colored aluminium block
tile.color_aluminium_block.11.name=blue colored aluminium block
tile.color_aluminium_block.12.name=brown colored aluminium block
tile.color_aluminium_block.13.name=green colored aluminium block
tile.color_aluminium_block.14.name=red colored aluminium block
tile.color_aluminium_block.15.name=black colored aluminium block
 

  • ja_JP.lang
src/main/resources/assets/aluminiummod/lang/に配置する
#アルミニウムMOD 日本語言語ファイル
tile.color_aluminium.block.0.name=白色アルミニウムブロック
tile.color_aluminium.block.1.name=橙色アルミニウムブロック
tile.color_aluminium.block.2.name=紅紫色アルミニウムブロック
tile.color_aluminium.block.3.name=空色アルミニウムブロック
tile.color_aluminium.block.4.name=黃色アルミニウムブロック
tile.color_aluminium.block.5.name=黄緑色アルミニウムブロック
tile.color_aluminium.block.6.name=桃色アルミニウムブロック
tile.color_aluminium.block.7.name=灰色アルミニウムブロック
tile.color_aluminium.block.8.name=銀色アルミニウムブロック
tile.color_aluminium.block.9.name=青緑色アルミニウムブロック
tile.color_aluminium.block.10.name=紫色アルミニウムブロック
tile.color_aluminium.block.11.name=青色アルミニウムブロック
tile.color_aluminium.block.12.name=茶色アルミニウムブロック
tile.color_aluminium.block.13.name=緑色アルミニウムブロック
tile.color_aluminium.block.14.name=赤色アルミニウムブロック
tile.color_aluminium.block.15.name=黒色アルミニウムブロック
 

解説

AluminiumMod.java

ここはだいたいブロック追加と一緒。モデルの登録だけメタデータ分やろう。

ItemCloth.class

色付き羊毛等を登録する際のItemBlock継承アイテム。これを使うことでメタデータを持つブロックを楽に追加できる。

color_aluminium_block_<メタデータ>.json

各メタデータごとにテクスチャを指定するモデルを作る。ブロックの追加参照。

-color_aluminium_block.json[blockstate]

BlockStateごとにモデルを割り当てる。
今回は登録しているBlockStateがColorという名称で、その要素の名称ごとに割り振れる。

コメント

この項目に関する質問などをどうぞ。
名前: