ブロックの追加 (1.16.5)

概要

特殊な機能を持たないブロックを追加します。

GitHubでこの記事の時点の状態を確認できます。

動作確認

2021年3月21日

  • Minecraft 1.16.5
  • Forge 36.1.0

解説

TitaniumMod

TitaniumMod/src/main/java/com/tntmodders/titaniummod/TitaniumMod.java

package com.tntmodders.titaniummod;

import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.material.MaterialColor;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraftforge.common.ToolType;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

@Mod(TitaniumMod.MOD_ID)
public class TitaniumMod {
    public static final String MOD_ID = "titaniummod";

    public TitaniumMod() {
        IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
        Blocks.register(modEventBus);
        Items.register(modEventBus);
    }

    public static class Blocks {
        private static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MOD_ID);
        public static final RegistryObject<Block> TITANIUM_BLOCK = BLOCKS.register("titanium_block", () -> new Block(AbstractBlock.Properties
                .of(Material.METAL, MaterialColor.METAL)
                .requiresCorrectToolForDrops()
                .strength(5.0F, 6.0F)
                .sound(SoundType.METAL)
                .harvestTool(ToolType.PICKAXE)
                .harvestLevel(1)
        ));

        public static void register(IEventBus eventBus) {
            BLOCKS.register(eventBus);
        }
    }

    public static class Items {
        private static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MOD_ID);
        public static final RegistryObject<Item> TITANIUM_BLOCK = ITEMS.register("titanium_block", () -> new BlockItem(Blocks.TITANIUM_BLOCK.get(), new Item.Properties()
                .tab(ItemGroup.TAB_BUILDING_BLOCKS)));
        public static final RegistryObject<Item> TITANIUM_INGOT = ITEMS.register("titanium_ingot", () -> new Item(new Item.Properties()
                .tab(ItemGroup.TAB_MATERIALS)));

        public static void register(IEventBus eventBus) {
            ITEMS.register(eventBus);
        }
    }
}

BLOCKS.register("titanium_block", ...)でブロックの登録名を指定します。ブロックIDはtitaniummod:titanium_blockとなります。

BlockクラスのインスタンスはMinecraftのブロックの種類を表します。硬さや爆破耐性など、ブロックの種類によって変わる性質を保持しています。

AbstractBlock.Properties.of(Material.METAL, MaterialColor.METAL)で、燃えるかどうかなどの基本的な性質をまとめたMaterialと、地図上の表示色であるMaterialColorを指定します。

requiresCorrectToolForDropsで、ブロックを回収するために適切な道具が必要であると設定します。

strength(5.0F, 6.0F)でブロックの硬さと爆破耐性を指定します。第一引数は硬さで、数値が大きいほど壊すために時間がかかります。第二引数は爆破耐性で、数値が大きいほど爆発で壊れにくくなります。

sound(SoundType.METAL)でブロックの設置、破壊、上を歩いた時などに発生する音の種類を指定します。

harvestTool(ToolType.PICKAXE)でブロックを回収するための適正な道具の種類を指定します。斧(AXE)、ツルハシ(PICKAXE)、シャベル(SHOVEL)、クワ(HOE)の中から選べます。指定しない場合は、どの道具を使っても早く壊せなくなります。

harvestLevel(1)でブロックを回収するために必要な道具の素材水準を指定します。初期値は-1で、0が木か金、1が石、2が鉄、3がダイヤモンドの道具を要求します。

BlockItemは、プレイヤーのインベントリの中にある時など、アイテムとしてのブロックを表すクラスです。ほとんどのブロックは破壊されると対応するアイテムをドロップし、対応するアイテムを右クリックするとブロックをワールドに設置します。このような対応関係を示すための、Itemを継承したクラスです。

tab(ItemGroup.TAB_BUILDING_BLOCKS)で通常のアイテムと同様に、クリエイティブタブを指定します。今回は「建築ブロック」タブを指定します。

Block State

TitaniumMod/src/main/resources/assets/titaniummod/blockstates/titanium_block.json

{
  "variants": {
    "": {
      "model": "titaniummod:block/titanium_block"
    }
  }
}

ブロックの状態とモデルとの対応をリソースパックと同様の形式のJSONで記述します。今回は状態を扱わないので、モデルを1つ指定します。

ブロックモデル

TitaniumMod/src/main/resources/assets/titaniummod/models/block/titanium_block.json

{
  "parent": "minecraft:block/cube_all",
  "textures": {
    "all": "titaniummod:block/titanium_block"
  }
}

ブロックモデルをリソースパックと同様の形式のJSONで記述します。今回は正六面体のフルブロックで全面同じテクスチャを使います。

アイテムモデル

TitaniumMod/src/main/resources/assets/titaniummod/models/item/titanium_block.json

{
  "parent": "titaniummod:block/titanium_block"
}

アイテムとして表示されるモデルをリソースパックと同様の形式のJSONで記述します。今回はブロックのモデルを指定します。

テクスチャ

TitaniumMod/src/main/resources/assets/titaniummod/textures/block/titanium_block.png

titanium_block.png

ブロックの各面に表示される16×16ピクセルのpng画像ファイルです。

英語翻訳

TitaniumMod/src/main/resources/assets/titaniummod/lang/en_us.json

{
  "block.titaniummod.titanium_block": "Block of Titanium",
  "item.titaniummod.titanium_ingot": "Titanium Ingot"
}

ブロック名の翻訳を追加しました。

日本語翻訳

TitaniumMod/src/main/resources/assets/titaniummod/lang/ja_jp.json

{
  "block.titaniummod.titanium_block": "チタンブロック",
  "item.titaniummod.titanium_ingot": "チタンインゴット"
}

ブロック名の翻訳を追加しました。

ルートテーブル

TitaniumMod/src/main/resources/data/titaniummod/loot_tables/blocks/titanium_block.json

{
  "type": "minecraft:block",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "titaniummod:titanium_block"
        }
      ],
      "conditions": [
        {
          "condition": "minecraft:survives_explosion"
        }
      ]
    }
  ]
}

ブロックを適正な道具で破壊した際にドロップするアイテムを、データパックと同様の形式のJSONで記述します。今回は常にチタンブロックをアイテムとして1つドロップするよう指定します。フォルダ名が複数形なので注意してください。

"condition": "minecraft:survives_explosion"により、他のブロックと同様、爆発により壊された時に1/(爆発力)の確率でアイテムをドロップするようになります。

関連クラス

  • net.minecraft.block.Blocks:バニラのブロックが記述されています。

リンク


前:アイテムの追加

次:レシピの追加

コメントはこちらです。(スパム対策の為コメントは手動承認になっています。未承認のコメントは表示されないので連投はお控え下さい。)

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