第一个物品
我们需要继承原版得物品类,实例化这个物品类,之后把这个物品类添加到游戏中去。
对于在注册表中的很多类型,这样的添加方式是类似的。
public class RubyItem extends Item {
public RubyItem(Properties pProperties) {
super(pProperties);
}
}
很简单只有一个构造函数,构造函数传入一个item的属性即可。
这里的属性规定了是不是食物,堆叠数量,等内容。你可以进入到该类查看。
之后我们实例化物品注册器和使用注册器注册物品
public class ModItems {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(Registries.ITEM, ExampleMod.MODID);
public static final Supplier<Item> RUBY = ITEMS.register("ruby",() -> new RubyItem(new Item.Properties()));
public static void register(IEventBus eventBus){
ITEMS.register(eventBus);
}
}
下面将我们的ITEMS注册器加入到总线中。
public ExampleMod(IEventBus modEventBus)
{
modEventBus.addListener(this::commonSetup);
ModItems.register(modEventBus);
NeoForge.EVENT_BUS.register(this);
}
进入游戏即可看到我们添加的物品。这就是我们的第一个物品。
因为我们的红宝石item没有和Item有任何的区别,所有有更简单的一种方式注册物品
public class ModItems {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(Registries.ITEM, ExampleMod.MODID);
public static final Supplier<Item> RUBY = ITEMS.register("ruby",() -> new Item(new Item.Properties()));
public static void register(IEventBus eventBus){
ITEMS.register(eventBus);
}
}
下面我们对使用的一些类做一些介绍
Item 类
该 Item 类是Minecraft游戏中的一个核心类,它代表游戏中的物品。每个物品都有其独特的属性和行为,如耐久度、堆叠限制、使用效果等。此类实现了 FeatureElement、ItemLike 和自定义的 IItemExtension 接口,以提供更多的功能和扩展性。
Item.Properties类
Properties 是一个嵌套在 Item 类内部的静态类,用于配置和初始化物品的属性。它包含了一系列的设置方法,用于定义物品的最大堆叠数量、耐久度、合成剩余物品、稀有度等特性。
Registries类
此类定义了一个注册表,其中包含了Minecraft游戏中的各种资源和实体的资源键。每个资源键都代表了一个可以在游戏中注册和检索的不同类型。这些资源键用于访问和操作Minecraft中的各种元素,如方块、物品、实体、生物群系等。
Items类
Items 类是一个静态类,它包含了Minecraft中所有方块对应的物品。每个方块的物品都有一个静态的常量,用于在游戏中快速访问。
模型和材质
在resources下构建这样的目录结构
└───resources
├───assets
│ └───examplemod
│ ├───lang
│ ├───models
│ │ └───item
│ └───textures
│ └───item
└───META-INF
assets是你放模组模型,材质的地方。
在item下面添加一个ruby.json,和你的注册的物品的名称相同。
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "examplemod:item/ruby"
}
}
“parent”: “minecraft:item/generated”指定了这个模型的「父模型」是什么,而”layer0”: “examplemod:item/ruby”指定了具体的材质。examplemod:item:代表这个是在我们自己的assets文件下,item/ruby代表了是textures/item/ruby.png这张图片。
详细的json描述参考wiki,你可以在包中找到游戏原版的json内容
textures/item/ruby.png 放置材质。最好不要大于32*32像素。
启动游戏之后你就可以看见我们有了模型和材质的物品了。
一个制作模型和材质的方便的工具
这里简单提了一下,之后会详细使用它自定义模型。
一个方便的工具用来制作方块和物品等模型:BlockBench。
Item和Item stack
Itemstack 是 物品堆,背包物品槽位里里面放的每一个都是itemstack。
Itemstack是对Item的拓展,添加额外的属性,NBT标签等等,Item是不同的堆叠数量的内容的抽象,有共同的行为。