概要
特殊な機能を持たないブロックを追加します。
動作確認
2020年11月28日
- Minecraft 1.16.4
- Forge 35.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.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
.create(Material.IRON)
.setRequiresTool()
.hardnessAndResistance(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()
.group(ItemGroup.BUILDING_BLOCKS)));
public static final RegistryObject<Item> TITANIUM_INGOT = ITEMS.register("titanium_ingot", () -> new Item(new Item.Properties()
.group(ItemGroup.MATERIALS)));
public static void register(IEventBus eventBus) {
ITEMS.register(eventBus);
}
}
}
BLOCKS.register("titanium_block", ...)
でブロックの登録名を指定します。ブロックIDはtitaniummod:titanium_block
となります。
Block
クラスのインスタンスはMinecraftのブロックの種類を表します。硬度や爆破耐性など、ブロックの種類によって変わる性質を保持しています。バニラのブロックはnet.minecraft.block.Blocks
にすべて記述されています。
create(Material.IRON)
で、燃えるかどうかなどの基本的な性質をまとめたMaterial
を指定します。
setRequiresTool
で、ブロックを回収するために道具が必要であると設定します。
hardnessAndResistance(5.0F, 6.0F)
でブロックの硬さと爆破耐性を指定します。第一引数は硬さで、数値が大きいほど壊すために時間がかかります。第二引数は爆破耐性で、数値が大きいほど爆発で壊れにくくなります。
sound(SoundType.METAL)
でブロックの設置、破壊、上を歩いた時などに発生する音の種類を指定します。
harvestTool(ToolType.PICKAXE)
でブロックを回収するための適正な道具の種類を指定します。斧(AXE
)、ツルハシ(PICKAXE
)、シャベル(SHOVEL
)の三つから選べます。指定しない場合は、どの道具を使っても早く壊せなくなります。
harvestLevel(1)
でブロックを回収するために必要な道具の素材水準を指定します。デフォルトは-1で、0が木か金、1が石、2が鉄、3がダイヤモンドの道具を要求します。
BlockItem
は、プレイヤーのインベントリの中にある時など、アイテムとしてのブロックを表すクラスです。ほとんどのブロックは破壊されると対応するアイテムをドロップし、対応するアイテムを右クリックするとブロックをワールドに設置します。このような対応関係を示すための、Itemを継承したクラスです。
group(ItemGroup.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": "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
ブロックの各面に表示される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/(爆発力)
の確率でアイテムをドロップするようになります。