tutorial:items
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
tutorial:items [2019/02/19 11:37] – Use UPPER_SNAKE_CASE for constants per convention jamieswhiteshirt | tutorial:items [2020/11/02 07:17] – [Creating an Item class] use static factory methods of TypeActionResult leocth2 | ||
---|---|---|---|
Line 3: | Line 3: | ||
==== Introduction ==== | ==== Introduction ==== | ||
- | One of the first things you'll want to do with Fabric is adding a new item. | + | Adding a basic item is one of the first steps in modding. You're going to need to create an '' |
- | + | ||
- | 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 an Item class. | + | |
- | | + | |
==== Registering an Item ==== | ==== Registering an Item ==== | ||
- | Just like most additions you make in Fabric, you'll need to register items to the item Registry. You can call the registry with // | + | First, create an instance of Item. We'll store it at the top of our initializer class. The constructor |
- | + | <code java [enable_line_numbers=" | |
- | First, | + | public class ExampleMod implements ModInitializer { |
- | + | ||
- | 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)); | + | |
- | [...] | + | |
- | } | + | |
- | Second, register your item in your onInitialize method. You can also register | + | // an instance of our new item |
+ | public static final Item FABRIC_ITEM = new Item(new FabricItemSettings().group(ItemGroup.MISC)); | ||
+ | [...] | ||
+ | } | ||
+ | </ | ||
+ | You'll use the vanilla registry system for registering new content. The basic syntax is '' | ||
+ | <code java [enable_line_numbers=" | ||
+ | public class ExampleMod implements ModInitializer { | ||
- | public class ExampleMod implements ModInitializer | + | |
- | { | + | public static final Item FABRIC_ITEM = new Item(new |
- | | + | |
- | public static final Item FABRIC_ITEM = new Item(new | + | |
| | ||
- | | + | |
- | public void onInitialize() | + | public void onInitialize() { |
- | | + | Registry.register(Registry.ITEM, new Identifier(" |
- | Registry.register(Registry.ITEM, | + | } |
- | } | + | } |
- | } | + | </ |
- | + | Your new item has now been added to Minecraft. Run the `runClient` gradle task to see it in action. | |
- | + | ||
- | At this point, if you start your Minecraft game, you will see your new item. Pretty easy! | + | |
{{: | {{: | ||
Line 42: | Line 34: | ||
==== Adding Item textures ==== | ==== Adding Item textures ==== | ||
- | You' | + | Registering a texture for an item requires an item model .json file and a texture image. |
- | Registering a texture for an item requires an item model .json file and a texture | + | Item model: .../ |
+ | Item texture: | ||
- | Item model: .../resources/assets/ | + | Our example texture can be found [[https://i.imgur.com/CqLSMEQ.png|here]]. |
- | Item texture: .../resources/ | + | |
- | Note that my-mod is your modid. Our example | + | If you registered |
- | If you registered | + | [Server-Worker-1/ |
+ | It conveniently tells you exactly where it expects | ||
- | [Server-Worker-1/ | + | A basic item model template is: |
- | + | <code JavaScript> | |
- | It conveniently tells you exactly where to put your item model file, so this is good for when you can't figure it out yourself. | + | { |
- | + | " | |
- | As for the actual contents of your item json file, a basic template is as follows: | + | " |
- | + | " | |
- | { | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | } | + | |
} | } | ||
- | | + | } |
- | 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/ | + | </ |
+ | 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. " | ||
- | If you set everything up correctly, you should be met with a textured | + | Final textured |
{{: | {{: | ||
Line 74: | Line 63: | ||
==== Creating an Item class ==== | ==== Creating an Item class ==== | ||
- | To add additonal | + | To add additional |
+ | <code java [enable_line_numbers=" | ||
+ | public | ||
- | public class FabricItem extends Item | + | |
- | { | + | super(settings); |
- | | + | } |
- | | + | } |
- | super(settings); | + | </ |
- | } | + | |
- | } | + | |
- | We'll make it to play a sound on use by overriding | + | A practical use-case for a custom item class would be making the item play a sound when you right click with it: |
+ | <code java [enable_line_numbers=" | ||
+ | public class FabricItem extends | ||
- | public class FabricItem extends Item | + | |
- | { | + | super(settings); |
- | | + | } |
- | | + | |
- | super(settings); | + | |
- | } | + | |
| | ||
- | | + | |
- | public TypedActionResult< | + | public TypedActionResult< |
- | | + | playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, |
- | playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, | + | return TypedActionResult.success(playerEntity.getStackInHand(hand)); |
- | return | + | } |
- | } | + | } |
- | } | + | </ |
- | Finally, in our mod initializer, | + | Replace the old Item object |
- | + | <code java [enable_line_numbers=" | |
- | public class ExampleMod implements ModInitializer | + | public class ExampleMod implements ModInitializer { |
- | { | + | |
- | // an instance of our new item | + | |
- | | + | |
- | [...] | + | |
- | } | + | |
+ | // an instance of our new item | ||
+ | public static final FabricItem FABRIC_ITEM = new FabricItem(new FabricItemSettings().group(ItemGroup.MISC)); | ||
+ | [...] | ||
+ | } | ||
+ | </ | ||
If you did everything correctly, using the item should now play a sound. | If you did everything correctly, using the item should now play a sound. | ||
+ | |||
+ | ==== What if I want to change the stack size of my item? ==== | ||
+ | |||
+ | For this you would use '' | ||
+ | <code java [enable_line_numbers=" | ||
+ | public class ExampleMod implements ModInitializer { | ||
+ | |||
+ | // an instance of our new item, where the maximum stack size is 16 | ||
+ | public static final FabricItem FABRIC_ITEM = new FabricItem(new FabricItemSettings().group(ItemGroup.MISC).maxCount(16)); | ||
+ | [...] | ||
+ | } | ||
+ | </ | ||
+ | ==== Next Steps ==== | ||
+ | [[tutorial: |
tutorial/items.txt · Last modified: 2024/08/26 01:04 by solidblock