今天我们来补一补上一期的坑。
4.0.前言(可跳过)
Q 为什么托更?
A 疫情&开学。
4.1.基础部分
4.1.1.创建创造模式物品栏
在主包com.rycb.etech
下新建一个包tab
,作为创造模式物品栏的包。
在com.rycb.etech.tab
包下新建类ECTab.java
并继承CreativeTabs
类,作为你的创造模式物品栏。
package com.rycb.easycraft.tab;
import com.rycb.easycraft.init.ModItems;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
/**
* @author RYCBStudio/Java Department
* <p>Create Time: 2022/8/23 9:08</p>
* <p>Use the IntelliJ IDEA</p>
* <p>Location: Easycraft/com.rycb.easycraft.tab/ECTab.java</p>
* <h1><center>ECTab</center></h1>
*/
public class ECTab extends CreativeTabs {
public ECTab() {
super("ec_tab");
}
@Override
public ItemStack getTabIconItem() {
return new ItemStack(ModItems.OMEGA_GEM);
}
}
super("ec_tab")
中的"ec_tab"
是你的创造模式物品栏注册名,用于本地化;
接下来我们来看这一段:
src/main/java/com/rycb/easycraft/tab/ECTab.java
:
//...省略部分代码
@Override
public ItemStack getTabIconItem() {
return new ItemStack(ModItems.OMEGA_GEM);
}
//...
这里的getTabIconItem
是你的物品栏的图标物品,比如此处为OMEGA_GEM
。
这样,你的物品栏基本就完成了。
4.1.2.注册创造模式物品栏
创建完物品栏,就该注册它了。
这里提供了三种注册方法:
4.1.2.1.方法一:在主类中注册
只需在主类EasyCraft.java
中添加这样一条语句即可:
public static CreativeTabs EC_TAB = new ECTab();
4.1.2.2.方法二:新建一个类进行注册
在此感谢 FMLTutor
在创造模式物品栏包下下新建类CreativeTabsLoader
:
src/main/java/com/github/ustc_zzzz/fmltutor/creativetab/CreativeTabsLoader.java:
package com.github.ustc_zzzz.fmltutor.creativetab;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
public class CreativeTabsLoader
{
public static CreativeTabs tabFMLTutor;
public CreativeTabsLoader()
{
tabFMLTutor = new CreativeTabsFMLTutor();
}
}
再在主类EasyCraft
中加入实例化它的代码:
new CreativeTabsLoader();
4.1.2.3.方法三:匿名类实现
在此感谢 Harbinger
因为该方法比较复杂,对程序员的技术水平及对 MinecraftForge 的掌握程度要求较高,且容易造成代码混乱,不适于批量添加物品,故请读者自行查阅。
4.1.3.将你的物品放进物品栏
创造模式物品栏是完成了,可怎么把它放进我们的物品栏里呢?
还记得第三节的创建的ItemBasicBase.java
吗?
package com.rycb.etech.items.base;
import com.rycb.etech.EasyTech;
import com.rycb.etech.init.ModItems;
import com.rycb.etech.util.IHasModel;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
public class ItemBasicBase extends Item implements IHasModel {
/**
*
* @param UnlocalizedName 未初始化名
* @param RegistryName 注册名
* @param tab 创造模式物品栏
*/
public ItemBasicBase(String UnlocalizedName, String RegistryName, CreativeTabs tab) {
setUnlocalizedName(UnlocalizedName);
setCreativeTab(tab);
setRegistryName(RegistryName);
ModItems.ITEMS.add(this);
}
@Override
public void registerModels() {
EasyTech.proxy.registerItemRender(this, 0, "inventory");
}
}
其中,setCreativeTab()
方法就是将物品放进物品栏的。
随机在ModItems.java
中抽取一个幸运儿,来具体展示:
src/main/java/com/rycb/easycraft/init/ModItems.java (部分)
:
public static final Item DARK_INGOT = new ItemBasicBase("ingotDark", "dark_ingot", EasyCraft.EC_TAB);
这里的EasyCraft.EC_TAB
就是你的自定义物品栏啦~
4.1.4.进行本地化
在en_us.lang
中加入这样一条语句:
itemGroup.ec_tab=Easy Craft
在zh_cn.lang
中加入这样一条语句:
itemGroup.ec_tab=简单工艺
接着,运行游戏,你就能发现你的创造模式物品栏物品栏了~
4.2.进阶部分
CreativeTab
类提供了hasSearchBar
方法,可以用于设置是否有搜索框,这里我们通过覆写这个方法设置为true:
src/main/java/com/rycb/easycraft/tab/ECTab.java
(部分):
@Override
public boolean hasSearchBar()
{
return true;
}
我们就可以在打开的创造模式物品栏上看到搜索框了。同时还有的是一个名为getSearchbarWidth
的方法,用于设置搜索框的宽度。
现在我们再进一步,设置一下创造模式物品栏的背景。这里我们需要的是一个名为setBackgroundImageName
的方法,这个方法传入的参数最终会和一个非常长的路径接合,这里我们先设置一下:
public CreativeTabsFMLTutor()
{
super("fmltutor");
this.setBackgroundImageName("etech.png");
}
然后我们需要新建文件夹assets/minecraft/textures/gui/container/creative_inventory(注意这里的名称是minecraft不是Mod id),然后建立一个以tab_开头的PNG文件,名字由刚刚设置的字符串决定,这里就是tab_etech.png,注意,这里的图片尺寸大小需要是256x256,其他的尺寸大小会出问题,需要设置的背景放置在左上角,其他的位置设置成透明就可以了:
(在此借用一下FMLTutor的背景:)