ブロックの追加(1.12.2)

概要

何の機能もない基本的なブロックを追加する。

前のチュートリアルと同様の部分は割愛する。

 

ソースコード

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();

    @Mod.EventHandler
    //この関数でMODファイル自体をイベントの発火先にする。
    public void construct(FMLConstructionEvent event) {
        MinecraftForge.EVENT_BUS.register(this);
    }

    //アイテムを登録するイベント。 旧preinitのタイミングで発火する。
    @SubscribeEvent
    public void registerItems(RegistryEvent.Register event) {
        event.getRegistry().register(ALUMINIUM);
        event.getRegistry().register(new ItemBlock(ALUMINIUM_BLOCK).setRegistryName("aluminiummod", "aluminium_block"));
    }

    //ブロックを登録するイベント。 旧preinitのタイミングで発火する。
    @SubscribeEvent
    public void registerBlocks(RegistryEvent.Register 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

src/main/resources/assets/aluminiummod/lang/に配置する

#AluminiumMod English Language File
item.aluminium.name=aluminium
tile.aluminium_block.name=aluminium block

 

ja_jp.lang

src/main/resources/assets/aluminiummod/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は小文字推奨。

 

registerItems

(RegistryEvent.Register<Item> event)

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

 

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=<名称> で登録できる。

5件のコメント

  1. PHPのエラーが出てます
    なんだこれ

  2. pngファイルはどこにいれるのですか?

    • Tom Kate

      ご連絡ありがとうございます、pngファイルのパスに関して追記しました。
      詳細はgithubの構成を御覧ください。

  3. アルミニウムのアイコンが反映されないのですが、どうしたらいいですか?

成瀬 へ返信するコメントをキャンセル

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください