User Tools

Site Tools


tutorial:items

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tutorial:items [2020/06/09 23:41] – formatting changes draylartutorial:items [2022/12/18 04:09] (current) – Include command to give newly created item, and syntax formatting on the same line. m4x
Line 3: Line 3:
 ==== Introduction ==== ==== Introduction ====
  
-Adding a basic item is one of the first steps in modding. 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. In this tutorial and all future ones, the “tutorial” namespace is used as a placeholder. If you have a separate modid, feel free to use it instead.+Adding a basic item is one of the first steps in modding. You're going to need to create an ''<yarn class_1792>'' object, register it, and give it a texture. To add additional behavior to the item you will need a custom <yarn class_1792> class. In this tutorial and all future ones, the “tutorial” namespace is used as a placeholder. If you have a separate modid, feel free to use it instead. 
 ==== 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, durability, and stack count.  +First, create an instance of <yarn class_1792> and store it as a static final field. The constructor takes in an ''<yarn class_1792>.<yarn class_1793>'' (or a ''FabricItemSettings'') instance, which is used to set item properties such as the durability, and stack count.  
-<code java [enable_line_numbers="true"]>+ 
 +<yarncode java [enable_line_numbers="true"]>
 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 Item FABRIC_ITEM = new Item(new Item.Settings().group(ItemGroup.MISC));+    public static final class_1792 CUSTOM_ITEM = new class_1792(new FabricItemSettings());
     [...]     [...]
 } }
-</code+</yarncode> 
-You'll use the vanilla registry system for registering new content. The basic syntax is ''Registry#register(Registry Type, Identifier, Content)''. Registry types are stored as static fields in the ''Registry'' object, and the identifier is what labels your content. Content is an instance of whatever you're adding. This can be called anywhere as long as it occurs during initialization. + 
-<code java [enable_line_numbers="true"]>+You'll use the vanilla registry system for registering new content. The basic syntax is ''<yarn class_2378>#<yarn method_10230>(Registry Type, <yarn class_2960>, Content)''. Registry types are stored as static fields in the ''<yarn class_7923>'' or ''<yarn class_2378>'' class, and the identifier is what labels your content. Content is an instance of whatever you're adding. This can be called anywhere as long as it occurs during initialization. 
 + 
 +<yarncode java [enable_line_numbers="true"]>
 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 Item FABRIC_ITEM = new Item(new Item.Settings().group(ItemGroup.MISC)); +    public static final class_1792 CUSTOM_ITEM = new class_1792(new FabricItemSettings()); 
-      +
     @Override     @Override
-    public void onInitialize() +    public void onInitialize() { 
-    +        class_2378.method_10230(class_7923.field_41178, new class_2960("tutorial", "custom_item"), CUSTOM_ITEM); 
-        Registry.register(Registry.ITEM, new Identifier("tutorial", "fabric_item"), FABRIC_ITEM); +    }
-    } +
 } }
-</code+</yarncode
-Your new item has now been added to Minecraft. Run the `runClient` gradle task to see it in action.+Your new item has now been added to Minecraft. Run the run config ''Minecraft Client'' or ''runClient'' Gradle task to see it in action, execute the command ''/give @s tutorial:custom_item'' in game.
  
 {{:tutorial:2019-02-17_16.50.44.png?400|}} {{:tutorial:2019-02-17_16.50.44.png?400|}}
 +
 +For simplicity, you can simplify your code as following:
 +<yarncode java [enable_line_numbers="true"]>
 +public class ExampleMod implements ModInitializer {
 +
 +    // an instance of our new item
 +    public static final class_1792 CUSTOM_ITEM =
 +      class_2378.method_10230(class_7923.field_41178, new class_2960("tutorial", "custom_item"),
 +        new class_1792(new FabricItemSettings()));
 +
 +    @Override
 +    public void onInitialize() {
 +    }
 +}
 +</yarncode>
  
 ==== Adding Item textures ==== ==== Adding Item textures ====
  
-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:+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/tutorial/models/item/fabric_item.json +    Item model: .../resources/assets/tutorial/models/item/custom_item.json 
-    Item texture: .../resources/assets/tutorial/textures/item/fabric_item.png+    Item texture: .../resources/assets/tutorial/textures/item/custom_item.png
  
 Our example texture can be found [[https://i.imgur.com/CqLSMEQ.png|here]]. Our example texture can be found [[https://i.imgur.com/CqLSMEQ.png|here]].
Line 44: Line 62:
 If you registered your item properly in the first step, your game will complain about a missing texture file in a fashion similar to this: If you registered your item properly in the first step, your game will complain about a missing texture file in a fashion similar to this:
  
-    [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+    [Server-Worker-1/WARN]: Unable to load model: 'tutorial:custom_item#inventory' referenced from: tutorial:custom_item#inventory: java.io.FileNotFoundException: tutorial:models/item/custom_item.json
 It conveniently tells you exactly where it expects your asset[s] to be found-- when in doubt, check the log. It conveniently tells you exactly where it expects your asset[s] to be found-- when in doubt, check the log.
  
Line 52: Line 70:
   "parent": "item/generated",   "parent": "item/generated",
   "textures": {   "textures": {
-    "layer0": "tutorial:item/fabric_item"+    "layer0": "tutorial:item/custom_item"
   }   }
 } }
Line 65: Line 83:
  
 To add additional behavior to the item you will need to create an Item class. The default constructor requires an Item.Settings object. To add additional behavior to the item you will need to create an Item class. The default constructor requires an Item.Settings object.
-<code java [enable_line_numbers="true"]> +<yarncode java [enable_line_numbers="true"]> 
-public class FabricItem extends Item {+public class CustomItem extends class_1792 {
  
-    public FabricItem(Settings settings) {+    public CustomItem(class_1793 settings) {
         super(settings);         super(settings);
     }     }
 } }
-</code>+</yarncode>
  
-A practical use-case for a custom item class would be making the item play a sound when you click with it: +A practical use-case for a custom item class would be making the item play a sound when you use it: 
-<code java [enable_line_numbers="true"]> +<yarncode java [enable_line_numbers="true"]> 
-public class FabricItem extends Item {+public class CustomItem extends class_1792 {
  
-    public FabricItem(Settings settings) {+    public CustomItem(class_1793 settings) {
         super(settings);         super(settings);
     }     }
-      +
     @Override     @Override
-    public TypedActionResult<ItemStackuse(World world, PlayerEntity playerEntity, Hand hand) { +    public class_1271<class_1799method_7836(class_1937 world, class_1657 playerEntity, class_1268 hand) { 
-        playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, 1.0F, 1.0F); +        playerEntity.method_5783(class_3417.field_14983, 1.0F, 1.0F); 
-        return new TypedActionResult<>(ActionResult.SUCCESS, playerEntity.getStackInHand(hand));+        return class_1271.method_22427(playerEntity.method_5998(hand));
     }     }
 } }
-</code>+</yarncode>
  
-Replace the old Item object with an instance of your new item class: +Replace the old <yarn class_1792> object with an instance of your new item class: 
-<code java [enable_line_numbers="true"]>+<yarncode java [enable_line_numbers="true"]>
 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 Item.Settings().group(ItemGroup.MISC));+    public static final CustomItem CUSTOM_ITEM = new CustomItem(new FabricItemSettings());
     [...]     [...]
 } }
-</code>+</yarncode>
 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? ==== ==== What if I want to change the stack size of my item? ====
  
-For this you would use ''maxCount(int size)'' inside ItemSettings to specify the max stack size. Note that if your item is damageable you cannot specify a maximum stack size or the game will throw a RuntimeException. +For this you would use ''<yarn method_7889>(int size)'' inside ''FabricItemSettings'' to specify the max stack size. Note that if your item is damageable you cannot specify a maximum stack size or the game will throw a RuntimeException. 
-<code java [enable_line_numbers="true"]>+<yarncode java [enable_line_numbers="true"]>
 public class ExampleMod implements ModInitializer { public class ExampleMod implements ModInitializer {
  
-    // an instance of our new item, where the maximum stack size is 16 +    // An instance of our new item, where the maximum stack size is 16 
-    public static final FabricItem FABRIC_ITEM = new FabricItem(new Item.Settings().group(ItemGroup.MISC).maxCount(16));+    public static final CustomItem CUSTOM_ITEM = new CustomItem(new FabricItemSettings().method_7889(16));
     [...]     [...]
 +}
 +</yarncode>
 +
 +==== 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 ''FuelRegistry'', for example:
 +<code java>
 +public class ExampleMod implements ModInitializer {
 +    [...]
 +    
 +    @Override
 +    public void onInitialize() {
 +        [...]
 +        FuelRegistry.INSTANCE.add(CUSTOM_ITEM, 300)
 +    }
 } }
 </code> </code>
 +
 +Similarly, you can use a ''CompostingChanceRegistry'' to make it compostable in a composter.
 ==== Next Steps ==== ==== Next Steps ====
 [[tutorial:itemgroup|Add your item to your own ItemGroup]]. [[tutorial:itemgroup|Add your item to your own ItemGroup]].
tutorial/items.1591746070.txt.gz · Last modified: 2020/06/09 23:41 by draylar