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)); }