ForgeMDK1.19.2 - 物品,方块,物品栏

物品添加

Main主类里先定义好基础部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@(Main.Mod_ID)
public class Main{
public static final Mod_ID = "模组ID"; //设置好模组id
private static final Logger LOGGER = LogUtils.getLogger(); //log

public Main(){
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
ModItem.register(modEventBus); //注册物品添加
modEventBus.addListener(this::commonSetup);
}
private void commonSetup(final FMLCommonSetupEvent event){

}

@Mod.EventBusSubscriber(modid = Mod_ID,bus = Mod.EventBusSubscriber.Bus.MOD)
public static class ClientModEvents{
@SubscribeEvent
public static void onClientSetup(FMLClientSetupEvent event){

}
}
}

新建一个ModItem类用于添加注册物品。

1
2
3
4
5
6
7
8
9
10
11
public class ModItem {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, Main.Mod_ID);
//注册第一个物品方法 item.properties设置物品的一些属性
public static final RegistryObject<Item> ZIRCON = ITEMS.register("物品id",
()->new Item(new Item.Properties().tab(设置放置的物品栏)));


public static void register(IEventBus eventBus){ //将物品传入到主线
ITEMS.register(eventBus);
}
}

Item.Properties()方法可以设置物品的一些属性,比如放置在哪个物品栏。


物品栏添加

创建一个ModCreativeModTab类用于新增物品栏

1
2
3
4
5
6
7
8
public class ModCreativeModeTab {
public static final CreativeModeTab BKMOD24_TAB = new CreativeModeTab("TabID") {
@Override
public ItemStack makeIcon() {
return new ItemStack(物品);//设置物品的图标
}
};
}

然后创立如下路径的文件放置材质和模型文件以及语言文件
_NSYUZV4@2G24Q_HA3_G_SD.png
lang表示语言文件格式如下

1
2
3
{
"item.modid.id": "id",
}

models表示模型文件
textures表示材质文件
models和textures下面的分支文件代表了是物品的材质模型还是方块的模型还是其他的。
一个物品的模型json文件案例

1
2
3
4
5
6
{
"parent": "item/generated",
"textures": {
"layer0": "modid:item/物品id"
}
}

方块添加

新建一个ModBlocks类用于添加方块与添加物品的类大致一样。

1
2
3
4
5
6
public class ModBlocks {
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, Main.Mod_ID);

public static final RegistryObject<Block> SIVER_BLOCK = BLOCKS.register("siver_block",
()-> new Block(BlockBehaviour.Properties.copy(Blocks.IRON_BLOCK)));
}

在这里面BLOCKS变量和ITEMS变量是一样的用法。
我用BLOCKS添加了一个新的方块siver_block.
因为只添加了方块,还没有添加方块对应的物品,所以要在物品类里面添加一个物品方块。

1
2
public static final RegistryObject<Item> SIVER_BLOCK = ITEMS.register("siver_block",
()-> new BlockItem(ModBlocks.SIVER_BLOCK.get(),new Item.Properties().tab(CreativeModeTab.TAB_MISC)));

这里面的注册名称和方块名称一样即可。
然后就是关于材质和方块状态以及物品方块的材质以及json的添加了。

/modid/blockstates/方块id

1
2
3
4
5
6
7
{
"variants": {
"": {
"model": "bkmod24:block/siver_block"
}
}
}

/modid/models/block/方块id

1
2
3
4
5
6
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "bkmod24:block/siver_block"
}
}

/modid/models/item/方块id

1
2
3
{
"parent": "bkmod24:block/siver_block"
}

然后将材质放置在对应的位置。
这样一个方块才算添加好了。