我的世界1.12.2Forge模组开发笔记——创造模式物品栏
第一章 介绍
1 创造模式物品栏
创造模式物品栏,顾名思义就是游戏中在创造模式下按E弹出的物品栏,他有着许多的分类,我们可以将物品放在原版的分类物品栏中,也可以创建一个新的分类物品栏
1.1物品栏的类
Minecraft的所有物品栏都是CreativeTabs类的子类,所以我们想要建立一个新的物品栏也要继承CreativeTabs类注意:下面所有的方法都要使用@Override注解,因为是覆盖父类的方法
public class 类名 extends CreativeTabs
其次,因为CreativeTabs类是抽象类,所以要实现里面的所有抽象方法,即getTabIconItem方法
public ItemStack getTabIconItem()
1.2物品栏的方法
对物品栏这个对象来说,他有显示物品图标的功能、搜索框功能、设置背景材质功能等等,有些不一定有,但有些一定要有
之前我们提到过getTabIconItem方法,它是必须要实现的方法,因为需要给该物品栏设置专属图标public class 类名 extends CreativeTabs
他需要一个返回值,返回值就是注册表中注册好的物品栏变量被转换的ItemStack类
return new ItemStack(ItemRegistryHandler.变量名);
1.3个性化物品栏
我们可以通过一些方式,让物品栏显得与众不同,这些方式包括物品栏的方法、语言文件、材质等
物品栏有一个方法叫hasSearchBar,它可以为物品栏添加搜索框public boolean hasSearchBar()
还有一个方法叫getSearchbarWidth,它可以设置搜索框的宽度
public int getSearchbarWidth()
除了设置搜索框,我们还可以通过getBackgroundImageName方法设置物品栏背景
public String getBackgroundImageName()
语言文件也属于个性化的范畴,如果不设置的话默认会在物品栏上方显示本地名称,语言文件中物品栏的开始标签是ItemGroup
itemGroup.物品栏本地名称=显示的名称
第二章 实践
1 新建物品栏
现在我们在fktg.testmod包(你的或许和我的不同)下创建一个creativetab的包

package fktg.testmod.creativetab;
import fktg.testmod.item.ItemRegistryHandler;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
public class TabTestBlock extends CreativeTabs {
public static final TabTestBlock TAB_TEST_BLOCK = new TabTestBlock();
public TabTestBlock() {
super("testblock"); //物品栏的本地名称
}
@Override
public ItemStack getTabIconItem() {
return new ItemStack(ItemRegistryHandler.ITEM_GOLD_WALL); //物品栏的专属图标
}
}
2 在物品栏中添加物品
在item或block包中选择你想放入物品栏中的类,在构造方法中添加this.setCreativeTab(TabTestBlock.TAB_TEST_BLOCK)
,你的代码可能有部分不同
package fktg.testmod.block;
import fktg.testmod.TestMod;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
public class BlockGoldWall extends Block {
public BlockGoldWall() {
super(Material.GOURD);
this.setUnlocalizedName(TestMod.MODID + ".goldWall");
this.setRegistryName("gold_wall");
this.setHarvestLevel("shovel",0); //挖掘工具(pickaxe、shovel、axe等)和挖掘等级(0是木质工具)
this.setHardness(0.5F); //方块的硬度,即挖掘所需的时间和防爆强度
this.setCreativeTab(TabTestBlock.TAB_TEST_BLOCK); //将方块加入物品栏
}
}
现在启动Minecraft,在创造模式下按E,你就可以找到你添加的物品栏,和物品栏中的内容了
3 物品栏的语言文件
可以在你的物品栏中看到,左上方显示的名称是物品栏的本地名称,我们可以修改语言文件,来让名称国际化 如果你阅读了方块篇那么你应该已经有语言文件了,如果没有也没关系,根据图中的层级关系,创建你没有的lang包中的文件


4 物品栏的背景
如果我们想让物品栏的样子和原版不一样该怎么办呢,可以调用物品栏的getBackgroundImageName方法在你的物品栏类中,覆盖这个方法:
package fktg.testmod.creativetab;
import fktg.testmod.item.ItemRegistryHandler;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
public class TabTestBlock extends CreativeTabs {
public static final TabTestBlock TAB_TEST_BLOCK = new TabTestBlock();
public TabTestBlock() {
super("testblock"); //物品栏的本地名称
}
@Override
public ItemStack getTabIconItem() {
return new ItemStack(ItemRegistryHandler.ITEM_GOLD_WALL); //物品栏的专属图标
}
@Override
public String getBackgroundImageName()
{
return "testblock.png"; //背景材质的名称
}
}
然后制作一个testblock.png文件,注意材质图大小必须是256*256像素的,背景材质位于材质的左上角,当然大家也可以制作更高清的材质,但在其中嵌入背景贴图时必须等比缩放
然后在assets目录下新建minecraft目录,在其中逐级建立textures 、gui 、container 、creative_inventory 目录
将我们制作的材质图放入creative_inventory目录中,注意材质图名称需要前面加tab_
最后打开游戏查看物品栏背景是否被替换
以上就是我制作的创造模式物品栏,感兴趣的小伙伴也来试一试吧