我想在Minecraft里开发MOD
我会在Minecraft游戏中进行MOD开发,这将变成一种不断尝试和错误的过程。
总览
添加一个没有特殊功能的方块。
2021年5月12日的活動場所
目录
-
- プログラムの記述
-
- Block Stateの記述
-
- ブロックモデルの記述
-
- アイテムモデルの記述
-
- テクスチャの配置
-
- 翻訳設定
-
- ルートテーブルの記述
- 確認
编程代码
package com.tntmodders.examplemod;
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(ExampleMod.MOD_ID)
public class ExampleMod {
public static final String MOD_ID = "examplemod";
public ExampleMod() {
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> EXAMPLE_BLOCK = BLOCKS.register("example_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> EXAMPLE_BLOCK = ITEMS.register("example_block", () -> new BlockItem(Blocks.EXAMPLE_BLOCK.get(), new Item.Properties()
.tab(ItemGroup.TAB_BUILDING_BLOCKS)));
public static final RegistryObject<Item> EXAMPLE_INGOT = ITEMS.register("example_ingot", () -> new Item(new Item.Properties()
.tab(ItemGroup.TAB_MATERIALS)));
public static void register(IEventBus eventBus) {
ITEMS.register(eventBus);
}
}
}
在 Chinese 中,BLOCKS.register(“example_block”, …) 用来指定注册一个名为”example_block”的方块。
方块的 ID 将会是 examplemod:example_block。
Block类的实例表示Minecraft方块的类型,它保持着根据方块类型而变化的特性,如硬度和爆破耐性。
使用AbstractBlock.Properties.of(Material.METAL, MaterialColor.METAL)函数,指定了具有基本特性如是否可燃烧的Material,以及地图上显示的颜色MaterialColor。
在 requiresCorrectToolForDrops 中,设置了回收方块所需的正确工具必不可少的条件。
以5.0F和6.0F指定方块的硬度和爆破耐力。
第一个参数是硬度,数值越大代表需要更长的时间来破坏。
第二个参数是爆破耐力,数值越大代表更不容易在爆炸中破坏。
使用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的描述
{
"variants": {
"": {
"model": "examplemod:block/example_block"
}
}
}
在JSON中描述块的状态与模型之间的对应关系。
由于本次不涉及状态处理,因此只需指定一个模型。
区块模型的描述
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "examplemod:block/example_block"
}
}
这次使用正六面体的完整块来使用相同的纹理。
物品模型的描述
{
"parent": "examplemod:block/example_block"
}
本次选择了模型的块。
纹理的布局
在src/main/resources/assets/examplemod/textures/block下构建文件结构,
并放置一个16×16像素的png图片文件example_block.png,
该文件将显示在每个方块的各个面上。
中文翻译设定
英语翻译
src/main/resources/assets/examplemod/lang/zh_cn.json
{
“block.examplemod.example_block”: “示例方块”,
“item.examplemod.example_item”: “示例物品”
}
日本語翻訳
src/main/resources/assets/examplemod/lang/ja_jp.json
{
“block.examplemod.example_block”: “試験用ブロック”,
“item.examplemod.example_item”: “試験用アイテム”
}
路由表的描述
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "examplemod:example_block"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}
使用适当的工具摧毁方块时,用JSON描述掉落的物品。
本次指定始终掉落一个试用物品作为物品。
要注意文件夹名称为复数形式。
通过”condition”: “minecraft:survives_explosion”,与其他方块一样,当方块被爆炸破坏时,以1/(爆炸力)的概率掉落物品。
确定
虽然可以确认为阻塞状态,但没有发生丢弃。