创造模式物品栏
添加到当前已有物品栏
再添加自定义的创造模式物品栏之前,请确保你的确有这个需求!否则建议直接添加到当前已有的物品栏内部
创建新文件: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 {...@Overridepublic 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/
方块注册流程
方块注册和物品注册基本上没啥区别
但要注意,对于方块,需要注册两次:一次是注册手上拿着的物品,一次是注册放在地上的方块
创建管理方块注册的类: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 {...@Overridepublic 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"
}
然后就是翻译文件的内容添加啦,这里就不多做赘述了,大家按照这个模板来做就可以了
成果展示
中途我切换了一下资源包,改成了下面红色的宝石,之前是蓝色的,纹理名称都没有改变,只是图片变了而已,没有影响滴~