【Minecraft】Fabric Mod开发完整流程2 - 创造模式物品栏与第一个方块

创造模式物品栏


添加到当前已有物品栏

再添加自定义的创造模式物品栏之前,请确保你的确有这个需求!否则建议直接添加到当前已有的物品栏内部

创建新文件:com/example/item/ModItemGroup.java

package com.example.item;


import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemGroups;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;


public class ModItemGroup {
    
    

    // 定义我们要把什么物品添加到物品栏里面
    private static void addItemsToGroup(FabricItemGroupEntries entries){
    
    
        entries.add(ModItems.ZER_DIAMOND);
        entries.add(ModItems.ZER_INGOT);
    }

    // 注册物品栏方法
    public static void registerItemGroup(){
    
    
        // 添加到已有的物品栏INGREDIENTS里面
        ItemGroupEvents.modifyEntriesEvent(ItemGroups.INGREDIENTS).register(ModItemGroup::addItemsToGroup);
    }
}

最后别忘了在 TutorialMod.java 里面执行初始化

package com.example;

import com.example.item.ModItemGroup;
import com.example.item.ModItems;
import net.fabricmc.api.ModInitializer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TutorialMod implements ModInitializer {
    
    
	...

	@Override
	public void onInitialize() {
    
    
		ModItems.registerModItems();

        // 在这里注册物品栏哦!
        // 由于我们需要使用到自定义物品,所以注册物品栏顺序必须晚于物品注册
		ModItemGroup.registerItemGroup();
	}
}

最终结果:
在这里插入图片描述


注册自定义物品栏

其他内容保持不变,我们仅需修改 ModItemGroup.java

package com.example.item;


import com.example.TutorialMod;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemGroups;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;


public class ModItemGroup {
    
    
    // 注册的物品栏
    private static final ItemGroup ZER_GROUP = FabricItemGroup.builder()
            // 物品栏显示的名称
            // Text.translatable表示根据lang文件下的不同语言来翻译名称
            .displayName(Text.translatable("itemgroup.tutorialmod"))

            // 选择一个物品作为物品栏图标
            .icon(() -> new ItemStack(ModItems.ZER_INGOT))

            // 选择你要加入物品栏的物品
            .entries((displayContext, entries) -> {
    
    
                entries.add(ModItems.ZER_DIAMOND);
                entries.add(ModItems.ZER_INGOT);
            }).build();

    // 注册物品栏
    public static void registerItemGroup() {
    
    
        TutorialMod.LOGGER.debug(TutorialMod.MOD_ID + "已经创建好物品栏了");

        // 在这里注册自定义物品栏
        Registry.register(
                Registries.ITEM_GROUP,
                new Identifier(TutorialMod.MOD_ID, "zer_group"),
                ZER_GROUP
        );
    }
}

别忘了在 en_us.json 或者 zh_cn.json 添加对应名称翻译哦!

{
    
    
	"item.tutorialmod.zer_diamond": "Zhiller's Diamond",
	"item.tutorialmod.zer_ingot": "Zhiller's Ingot",

	"itemgroup.tutorialmod": "Zhiller's ItemGroup"
}

打开游戏,发现创造模式下物品栏多出来了一个,点进去就可以看见我们注册好的物品栏了

物品栏内部有两个我们上一期制作的自定义物品

在这里插入图片描述


创建方块

资源文件下载:https://kaupenjoe.net/files/Minecraft/Videos/MBKJ2023-51%20-%20Fabric%201.20.X%20Blocks/


方块注册流程

方块注册和物品注册基本上没啥区别

扫描二维码关注公众号,回复: 16141167 查看本文章

但要注意,对于方块,需要注册两次:一次是注册手上拿着的物品,一次是注册放在地上的方块

创建管理方块注册的类:com/example/block/ModBlocks.json

package com.example.block;

import com.example.TutorialMod;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier;

public class ModBlocks {
    
    

    // copyOf表示直接复制现有方块的属性(比如硬度、可开采性以及亮度可堆叠啥的)
    // sounds表示直接复制现有方框的声音(如行走表面声音、破坏声音)
    public static final Block ZER_BLOCK = regBlock("zer_block",
            new Block(FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).sounds(BlockSoundGroup.AMETHYST_BLOCK)));

    public static final Block RAW_ZER_BLOCK = regBlock("raw_zer_block",
            new Block(FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).sounds(BlockSoundGroup.AMETHYST_BLOCK)));

    // 再注册可放置的实体方块
    private static Block regBlock(String name, Block block){
    
    
        regBlockItem(name, block);
        return Registry.register(
                Registries.BLOCK,
                new Identifier(TutorialMod.MOD_ID,name),
                block
        );
    }

    // 先注册方块物品
    private static Item regBlockItem(String name, Block block){
    
    
        return Registry.register(
                Registries.ITEM,
                new Identifier(TutorialMod.MOD_ID,name),
                new BlockItem(block, new FabricItemSettings())
        );
    }

    public static void registerModBlocks(){
    
    
        TutorialMod.LOGGER.debug(TutorialMod.MOD_ID+"的方块已加载完毕");
    }
}

最后别忘了在主入口中执行初始化

package com.example;

import com.example.block.ModBlocks;
import com.example.item.ModItemGroup;
import com.example.item.ModItems;
import net.fabricmc.api.ModInitializer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TutorialMod implements ModInitializer {
    
    
    ...

	@Override
	public void onInitialize() {
    
    
		ModItems.registerModItems();
		ModBlocks.registerModBlocks(); // 初始化方块管理类
		ModItemGroup.registerItemGroup();
	}
}

材质纹理处理

blockstates

方块状态文件夹下创建 blockstates/zer_block.json

{
    
    
	"variants": {
    
    
		"": {
    
    
			"model": "tutorialmod:block/zer_block"
		}
	}
}

models/block

在这里设置方块的渲染模型,创建文件 models/block/zer_block.json

{
    
    
	"parent": "block/cube_all",
	"textures": {
    
    
		"all": "tutorialmod:block/zer_block"
	}
}

models/item

创建手持方块的模型,创建文件 models/item/zer_block.json

这里不需要写啥了,直接继承前面定义的方块模型即可

{
    
    
	"parent": "tutorialmod:block/zer_block"
}

然后就是翻译文件的内容添加啦,这里就不多做赘述了,大家按照这个模板来做就可以了


成果展示

中途我切换了一下资源包,改成了下面红色的宝石,之前是蓝色的,纹理名称都没有改变,只是图片变了而已,没有影响滴~

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/delete_you/article/details/132203752