tutorial:items
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tutorial:items [2019/05/20 15:36] – attempt at making language more tutorial-like part 1 draylar | tutorial:items [2024/04/20 08:05] (current) – [Creating an Item class] ryhon | ||
---|---|---|---|
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 a custom Item class. | ||
- | | ||
==== Registering an Item ==== | ==== 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, | + | First, create an instance of ''< |
- | | + | < |
- | | + | 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)); | + | |
- | [...] | + | |
- | } | + | |
+ | // an instance of our new item | ||
+ | // for versions below 1.20.4 | ||
+ | public static final class_1792 CUSTOM_ITEM = new class_1792(new FabricItemSettings()); | ||
+ | // for versions since 1.20.5 | ||
+ | public static final class_1792 CUSTOM_ITEM = new class_1792(new class_1792.class_1793()); | ||
+ | [...] | ||
+ | } | ||
+ | </ | ||
- | To register an `Item`, you can call register on the static | + | You'll use the vanilla registry system for registering new content. The basic syntax is ''< |
- | | + | < |
- | | + | 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, | + | |
- | } | + | |
- | } | + | |
+ | // an instance of our new item | ||
+ | public static final class_1792 CUSTOM_ITEM = new class_1792(new class_1792.class_1793()); | ||
- | Your new item has now been added to Minecraft. Run the `runClient` gradle | + | @Override |
+ | public void onInitialize() { | ||
+ | class_2378.method_10230(class_7923.field_41178, | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | 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 class_1792.class_1793())); | ||
- | 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 wikitut 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 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: | + | 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 71: | Line 85: | ||
==== 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 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 instance. | + | @Override |
+ | public class_1271< | ||
+ | user.method_5783(class_3417.field_14983, | ||
+ | return class_1271.method_22427(user.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 class_1792.class_1793()); | ||
+ | [...] | ||
+ | } | ||
+ | </ | ||
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 class_1792.class_1793().maxCount(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.1558366601.txt.gz · Last modified: 2019/05/20 15:36 by draylar