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 [2022/12/18 04:09] – Include command to give newly created item, and syntax formatting on the same line. m4x | ||
---|---|---|---|
Line 3: | Line 3: | ||
==== Introduction ==== | ==== Introduction ==== | ||
- | One of the first things you'll want to do with Fabric is adding | + | 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 <yarn class_1792> |
- | First, we'll create an instance of our item. We'll store it at the top of our initializer | + | < |
+ | public | ||
- | public class ExampleMod implements ModInitializer | + | |
- | { | + | public static final class_1792 CUSTOM_ITEM |
- | | + | [...] |
- | public static final Item FABRIC_ITEM | + | } |
- | [...] | + | </ |
- | } | + | |
+ | You'll use the vanilla registry system for registering new content. The basic syntax is ''< | ||
- | Second, register your item in your onInitialize method. You can also register your item in any other class, as long as it's called during initialization. | + | < |
+ | public | ||
- | public class ExampleMod implements ModInitializer | + | |
- | { | + | public static final class_1792 CUSTOM_ITEM |
- | | + | |
- | public static final Item FABRIC_ITEM | + | |
- | + | ||
- | @Override | + | |
- | public void onInitialize() | + | |
- | { | + | |
- | Registry.register(Registry.ITEM, | + | |
- | } | + | |
- | } | + | |
- | + | @Override | |
- | At this point, if you start your Minecraft game, you will see your new item. Pretty easy! | + | |
+ | class_2378.method_10230(class_7923.field_41178, new class_2960(" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | Your new item has now been added to Minecraft. Run the run config '' | ||
{{: | {{: | ||
- | ==== Adding Item textures ==== | + | For simplicity, you can simplify your code as following: |
+ | < | ||
+ | public class ExampleMod implements ModInitializer { | ||
- | You're probably annoyed with the black & purple missing texture, so we'll fix that now. | + | // an instance of our new item |
+ | public static final class_1792 CUSTOM_ITEM = | ||
+ | class_2378.method_10230(class_7923.field_41178, | ||
+ | new class_1792(new FabricItemSettings())); | ||
- | 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: | + | @Override |
+ | public void onInitialize() { | ||
+ | } | ||
+ | } | ||
+ | </ | ||
- | | + | ==== Adding |
- | Item texture: .../ | + | |
- | Note that my-mod is your modid. Our example texture can be found [[https:// | + | 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: |
- | If you registered your item properly in the first step, your game will also complain about a missing | + | Item model: .../ |
+ | Item texture: | ||
- | | + | Our example texture can be found [[https://i.imgur.com/CqLSMEQ.png|here]]. |
- | + | ||
- | 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: | + | If you registered |
- | | + | [Server-Worker-1/ |
- | " | + | It conveniently tells you exactly where it expects your asset[s] to be found-- when in doubt, check the log. |
- | " | + | |
- | " | + | A basic item model template is: |
- | } | + | <code JavaScript> |
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
} | } | ||
- | | + | } |
- | 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 82: | ||
==== Creating an Item class ==== | ==== Creating an Item class ==== | ||
- | To add additonal | + | To add additional |
+ | < | ||
+ | public | ||
- | | + | |
- | { | + | super(settings); |
- | public FabricItem(Settings | + | } |
- | | + | } |
- | super(settings); | + | </ |
- | } | + | |
- | } | + | |
- | We'll make it to play a sound on use by overriding Item's use method. | + | A practical use-case for a custom item class would be making the item play a sound when you use it: |
+ | < | ||
+ | public class CustomItem extends class_1792 { | ||
- | | + | |
- | { | + | super(settings); |
- | public FabricItem(Settings | + | } |
- | | + | |
- | super(settings); | + | |
- | } | + | |
- | + | ||
- | @Override | + | |
- | public TypedActionResult< | + | |
- | { | + | |
- | playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, | + | |
- | return new TypedActionResult<> | + | |
- | } | + | |
- | | + | |
- | Finally, in our mod initializer, we'll replace our Item instance with a FabricItem. | + | @Override |
+ | public class_1271< | ||
+ | playerEntity.method_5783(class_3417.field_14983, | ||
+ | return class_1271.method_22427(playerEntity.method_5998(hand)); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
- | public class ExampleMod implements ModInitializer | + | Replace the old <yarn class_1792> |
- | { | + | < |
- | // an instance of our new item | + | public class ExampleMod implements ModInitializer { |
- | | + | |
- | [...] | + | |
- | } | + | |
+ | // an instance of our new item | ||
+ | public static final CustomItem CUSTOM_ITEM = new CustomItem(new FabricItemSettings()); | ||
+ | [...] | ||
+ | } | ||
+ | </ | ||
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 ''< | ||
+ | < | ||
+ | public class ExampleMod implements ModInitializer { | ||
+ | |||
+ | // An instance of our new item, where the maximum stack size is 16 | ||
+ | public static final CustomItem CUSTOM_ITEM = new CustomItem(new FabricItemSettings().method_7889(16)); | ||
+ | [...] | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Make your item become fuel, or compostable ==== | ||
+ | |||
+ | If you want to make it a fuel so that it can be used in a furnace, you can use '' | ||
+ | <code java> | ||
+ | public class ExampleMod implements ModInitializer { | ||
+ | [...] | ||
+ | | ||
+ | @Override | ||
+ | public void onInitialize() { | ||
+ | [...] | ||
+ | FuelRegistry.INSTANCE.add(CUSTOM_ITEM, | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Similarly, you can use a '' | ||
+ | ==== Next Steps ==== | ||
+ | [[tutorial: |
tutorial/items.txt · Last modified: 2024/04/20 08:05 by ryhon