MinecraftFabricMod编写Part2添加物品

介绍

添加一个基本的物品是编写模组的第一步。 你将需要创建一个Item对象,注册它,并赋予它一个纹理。要向物品添加其他行为,你将需要一个自定义的Item类。 在本教程以及以后的所有教程中,fishmod命名空间均用作模组的ID的占位符。如果你有单独的模组ID,则应当使用它。

注册物品

首先,创建一个Item的实例。我们将其存放在模组主类的顶部。Item的构造方法接受一个Item.Settings(或FabricItemSettings)对象,该对象用于设置物品属性,例如创造模式物品栏中的分类、耐久和堆叠数量。

这里使用原版注册方式来注册,基本语法是Registry#register(Registry Type, Identifier, Content),注册表类型是存储在Registry对象中的静态字段,标识符用来给内容“加标签”。内容则是您添加的东西的一个实例。这可以随时调用,只要发生在初始化阶段。

public class ExampleMod implements ModInitializer {

    public static final Item FISH_FUEL = new Item(new FabricItemSettings().group(ItemGroup.MISC));
 
    @Override
    public void onInitialize()
    {
        Registry.register(Registry.ITEM, new Identifier("fishmod", "fish_fuel"), FISH_FUEL);
    } 
}

现在物品已添加到Minecraft中,运行runClient Gradle任务以查看它的情况,在岩浆图标的选项中可以找到他。

添加物品纹理

为物品注册纹理需要物品模型.json文件和纹理图像文件。 您将需要将它们添加到资源目录中。每个的直接路径是:

物品模型: <根目录>/resources/assets/tutorial/models/item/fish_fuel.json
物品纹理: <根目录>/resources/assets/tutorial/textures/item/fish_fuel.png

如果您在第一步中运行正常,游戏将以类似于以下的方式报错缺少纹理文件:

[Server-Worker-1/WARN]: Unable to load model: 'tutorial:fabric_item#inventory' referenced from: tutorial:fabric_item#inventory: java.io.FileNotFoundException: tutorial:models/item/fabric_item.json

他告诉你它想要的资源路径。

一个非常简单的物品模型长这个样子:

{
  "parent": "builtin/generated",
  "textures": {
    "layer0": "tutorial:item/fabric_item"
  }
}

物品模型会将所有属性继承自父模型,例如对工具、方块等物品十分有用的自定义手持模型(item/handheld)。这里的builtin/generated父模型告诉MC用给出的纹理文件生成一个模型,而textures/layer0则是纹理图像文件的位置。

创建物品类

要想让物品有自定义行为,则需要创建一个新的物品类。其默认的构造方法需要一个Item.Settings对象。

public class FishFuel extends Item {
 
    public FishFuel(Settings settings) {
        super(settings);
    }
}

使该物品在右击时播放声音:

public class FishFuel extends Item {
 
    public FishFuel(Settings settings) {
        super(settings);
    }
 
    @Override
    public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand) {
        playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, 1.0F, 1.0F);
        return TypedActionResult.success(playerEntity.getStackInHand(hand));
    }
}

用新物品类的实例替换旧的Item对象:

public class ExampleMod implements ModInitializer {
public static final FishFuel FISH_FUEL = new FishFuel(new FabricItemSettings().group(ItemGroup.MISC)); }

如果你正确的执行了操作,现在使用物品时应该会播放声音。

如果我想更改物品的堆叠大小怎么办?

使用FabricItemSettings内的maxCount(int size)来指定最大堆叠数。请注意,如果你的物品是有耐久的(及耐久归零后会被破坏),那么此物品无法设置最大堆叠数,否则游戏将抛出运行时错误(RuntimeException)。

public class ExampleMod implements ModInitializer {

    public static final FabricItem FABRIC_ITEM = new FabricItem(new FabricItemSettings().group(ItemGroup.MISC).maxCount(64));
}

 



posted @ 2022-05-27 09:04  Qigfrog  阅读(296)  评论(0编辑  收藏  举报