我的世界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的包 然后creativetab包下创建一个类使其继承CreativeTabs类 在你新建的类中写入以下代码(根据自身情况需要改动):
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包中的文件 然后再英文语言文件和中文语言文件中分别加入物品栏的名称,也就是itemGroup开头的那一行 现在你就可以在游戏中看到修改语言文件后物品栏的样子了

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_

最后打开游戏查看物品栏背景是否被替换

以上就是我制作的创造模式物品栏,感兴趣的小伙伴也来试一试吧

posted @ 2024-09-05 18:21  方块特工  阅读(783)  评论(0)    收藏  举报