User Tools

Site Tools


Sidebar

Setup

Basics

Items and Item Groups

Blocks and Block Entities

Fluids

Entities

World Generation

Miscellaneous

Mixins

Advanced

Tutorials for Minecraft 1.14

Documentation

Examples


Fabric Сontributors

If you'd like to contribute to Fabric, you might be interested in these links:


Extremely Strange People


Wiki Meta

  • Wiki Meta - Starting point for contributing to the wiki
  • Wiki Agenda - See what is on the current agenda, and what other contributors are currently working on.
tutorial:items

This is an old revision of the document!


Adding an Item

Introduction

One of the first things you'll want to do with Fabric is adding a new item.

You're going to need to create an Item object, register it, and give it a texture. To add additional behavior to the item you will need a custom Item class.

Registering an Item

First, create an instance of Item. We'll store it at the top of our initializer class. The constructor takes in an Item.Settings object, which is used to set item properties such as the inventory category, durability, and stack count.

public class ExampleMod implements ModInitializer
{
    // an instance of our new item
    public static final Item FABRIC_ITEM = new Item(new Item.Settings().itemGroup(ItemGroup.MISC));
    [...]
}

To register an `Item`, you can call register on the static Registry object. This takes in a registry type, Identifier, and an instance of what you're registering. This can be called anywhere as long as it occurs during initialization.

public class ExampleMod implements ModInitializer
{
    // an instance of our new item
    public static final Item FABRIC_ITEM = new Item(new Item.Settings().itemGroup(ItemGroup.MISC));
    
    @Override
    public void onInitialize()
    {
        Registry.register(Registry.ITEM, new Identifier("wikitut", "fabric_item"), FABRIC_ITEM);
    }
}

Your new item has now been added to Minecraft. Run the `runClient` gradle task to see it in action.

Adding Item textures

You're probably annoyed with the black & purple missing texture, so we'll fix that now.

Registering a texture for an item requires an item model .json file and a texture image. You're going to need to add these to your resource directory; the direct path of each is:

  Item model: .../resources/assets/wikitut/models/item/fabric_item.json
  Item texture: .../resources/assets/wikitut/textures/item/fabric_item.png

Note that wikitut is your modid. Our example texture can be found here.

If you registered your item properly in the first step, your game will also complain about a missing texture file in a fashion similar to this:

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

It conveniently tells you exactly where it expects your asset[s] to be found– when in doubt, check the log.

As for the actual contents of your item json file, a basic template is as follows:

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

The parent of your item changes how it's rendered in the hand and comes in useful for things like block items in the inventory. textures/layer0 is the location of your image file.

If you set everything up correctly, you should be met with a textured item:

Creating an Item class

To add additonal behavior to the item you will need an Item class. We'll name our Item class 'FabricItem'. Create a constructor taking an Item.Settings object; your class should now look like this:

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

We'll make it play a sound on use by overriding Item's use method.

public class FabricItem extends Item
{
    public FabricItem(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 new TypedActionResult<>(ActionResult.SUCCESS, playerEntity.getStackInHand(hand));
    }
}

Finally, in our mod initializer, we'll replace our Item instance with a FabricItem instance.

public class ExampleMod implements ModInitializer
{
    // an instance of our new item
    public static final FabricItem FABRIC_ITEM = new FabricItem(new Item.Settings().itemGroup(ItemGroup.MISC));
    [...]
}

If you did everything correctly, using the item should now play a sound.

tutorial/items.1558366601.txt.gz · Last modified: 2019/05/20 15:36 by draylar