用户:MashKJo/1.12.2模组开发教程/7.自定义创造模式物品栏
读者可能已经注意到了:之前笔者添加的新物品,都是放在“杂项”这一创造模式物品栏中的——那么我们可不可以自定义我们的Mod的独有创造模式物品栏呢?当然可以。
所有创造模式物品栏都是net.minecraft.creativetab.CreativeTabs
的实例,这个类是抽象类,且只有一个抽象方法:
ItemStack getTabIconItem()
,这个方法用于决定该创造模式物品栏的显示的图标,它返回一个ItemStack实例。另外,CreativeTabs还有2个构造方法:(String label)
和(int index, String label)
,我们应该用前者,而后者是给原版的CreativeTabs用的——毕竟后者可以显式指定CreativeTabs的数字ID,显然Modder不该用这个,否则兼容性会被搞得一塌糊涂。
如果你没什么特殊的需求,只需要弄个匿名内部类就可以了:
public static final CreativeTabs TUTORIAL_MOD_TAB = new CreativeTabs("tutorial_mod"){
@Override
public ItemStack getTabIconItem(){
return new ItemStack(TutorialModItems.RUBY);
}
};
此外,创造模式物品栏名称的本地化键名为"itemGroup." + label
,例如,上述代码定义的创造模式物品栏,其名称的本地化键名为itemGroup.tutorial_mod
。
另外,CreativeTabs类中还有一些方法可以覆写,借此你可以控制:是否有搜索框、搜索框宽度、创造模式物品栏背景图,等等。这里笔者再讲一下设定背景图的方法:setBackgroundImageName。这个方法传入一个String——没错,不是ResourceLocation,很意外吧?这个String中应该包含材质文件的扩展名——其实只能是.png。如,笔者传入"tutorial_mod.png"
,那么该文件的实际路径为assets/[modid]/textures/gui/container/creative_inventory/tabs_tutorial_mod.png
。没错,Mojang在这里不仅硬编码了该文件的父级目录,甚至还包括文件名本身——这是什么离谱的设计??最后,该文件的尺寸,只能是256×256,但其实际显示的地方没这么大,其右下角的部分是透明,这块你根据原版的相关材质改就行。