diff --git a/.vitepress/sidebars/develop.ts b/.vitepress/sidebars/develop.ts
index a43128da1..076dc93f6 100644
--- a/.vitepress/sidebars/develop.ts
+++ b/.vitepress/sidebars/develop.ts
@@ -1,4 +1,4 @@
-import { Fabric } from "../types";
+import {Fabric} from "../types";
export default [
{
@@ -92,6 +92,10 @@ export default [
text: "develop.items.potions",
link: "/develop/items/potions",
},
+ {
+ text: "develop.items.spawn-egg",
+ link: "/develop/items/spawn-egg",
+ }
],
},
{
@@ -240,6 +244,10 @@ export default [
text: "develop.dataGeneration.blockModels",
link: "/develop/data-generation/block-models",
},
+ {
+ text: "develop.dataGeneration.itemModels",
+ link: "/develop/data-generation/item-models",
+ },
],
},
{
diff --git a/develop/data-generation/block-models.md b/develop/data-generation/block-models.md
index 1c614f097..74ac48329 100644
--- a/develop/data-generation/block-models.md
+++ b/develop/data-generation/block-models.md
@@ -180,12 +180,12 @@ The `BlockStateSupplier` contains all blockstate variants, their rotation, and o
First, we create a new `VariantsBlockStateSupplier` using `VariantsBlockStateSupplier.create()`.
Then we create a new `BlockStateVariantMap` that contains parameters for all variants of the block, in this case `FACING` and `SINGLE`, and pass it into the `VariantsBlockStateSupplier`.
-Specify which model and which transformations (uvlock, rotation) is used when using `.register()`.
+Specify which model and which transformations (uvlock, rotation) are used when using `.register()`.
For example:
-- On the first line, the block is facing north, and is single => we use the model with no rotation.
-- On the fourth line, the block is facing west, and is single => we rotate the model on the Y axis by 270°.
-- On the sixth line, the block is facing east, but isn't single => it looks like a normal oak log => we don't have to rotate it.
+- On the first line, the block is facing north, and is single ⇒ we use the model with no rotation.
+- On the fourth line, the block is facing west, and is single ⇒ we rotate the model on the Y axis by 270°.
+- On the sixth line, the block is facing east, but it isn't single ⇒ it looks like a normal oak log ⇒ we don't have to rotate it.
### Custom Datagen Method {#custom-datagen-method}
diff --git a/develop/data-generation/item-models.md b/develop/data-generation/item-models.md
new file mode 100644
index 000000000..619c0daa5
--- /dev/null
+++ b/develop/data-generation/item-models.md
@@ -0,0 +1,252 @@
+---
+title: Item Model Generation
+description: A guide to generating item models via datagen.
+authors:
+ - Fellteros
+ - VatinMc
+ - skycatminepokie
+---
+
+:::info PREREQUISITES
+Make sure you've completed the [datagen setup](./setup) and created your [first item](../items/first-item).
+:::
+
+## Setup {#setup}
+
+First, we will need to create our ModelProvider. Create a class that `extends FabricModelProvider`. Implement both abstract methods: `generateBlockStateModels` and `generateItemModels`.
+Lastly, create a constructor matching super.
+
+@[code lang=java transcludeWith=:::datagen-model:provider](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Register this class in your `DataGeneratorEntrypoint` within the `onInitializeDataGenerator` method.
+
+## Generated Files {#generated-files}
+
+Generating item models results in creating two separate JSON files:
+
+1. **Item model**. File responsible for defining the textures, rotation and overall looks of the item. It's generated in the `generated/assets/modid/models/item` directory.
+2. **Item model definition**. File defining which model should be used depending on various criteria such as components, interactions and more. It's generated in the `generated/assets/modid/items` directory.
+
+## Item Models {#item-models}
+
+This section covers the most used and basic methods used for generating item models.
+
+```java
+@Override
+public void generateItemModels(ItemModelGenerator itemModelGenerator) {
+}
+```
+
+For item models, we will be using the `generateItemModels` method. Its parameter `ItemModelGenerator itemModelGenerator` is responsible for generating the item models and also contains methods for doing so.
+
+### Simple Item Models {#simple-item-models}
+
+@[code lang=java transcludeWith=:::datagen-model:generated](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Simple item models are the default ones, which most Minecraft items use. Their parent model is the `GENERATED` Model. They use their 2D texture, which is then rendered as 3D in-game. An example would be boats, candles or dyes.
+
+_**assets/modid/models/item/ruby.json**_
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/ruby.json)
+
+Since we're using only one variant no matter the circumstances, we reference only the `ruby.json` item model file.
+
+_**assets/modid/items/ruby.json**_
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby.json)
+
+:::tip
+Search for `generated.json` file to see the exact rotation, scaling and positioning of the model.
+:::
+
+Ruby
+
+### Handheld Item Models {#handheld-item-models}
+
+@[code lang=java transcludeWith=:::datagen-model:handheld](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+This type of item model is generally used by tools and weapons (axes, swords, trident). They are rotated and positioned a little differently from the simple models to look more natural in hand. Other than that, they look exactly the same as the simple ones.
+
+_**assets/modid/models/item/guidite_axe.json**_
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/guidite_axe.json)
+
+Guidite Axe
+
+### Spawn Eggs {#spawn-eggs}
+
+@[code lang=java transcludeWith=:::datagen-model:spawn-egg](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Since spawn eggs use a template model, we can use the `registerSpawnEgg()` method of the `ItemModelGenerator` instance, to assign the colors and link the model to the `SpawnEggItem`. After running datagen, it should look like this:
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/items/custom_spawn_egg.json)
+
+::: info
+Minecraft uses signed 32-bit Integers to store ARGB color values. Java is able to convert RGB hexadecimal color values like shown above.
+
+If you don't want to worry about the conversion, you can use tools like [Spawn Egg Color Picker](https://vatinmc.github.io/spawn-egg-color-picker/).
+:::
+
+### Dyeable Items {#dyeable-items}
+
+@[code lang=java transcludeWith=:::datagen-model:dyeable](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+The `ItemModelGenerator` also provides a method for generating models for dyeable items. Here you have to pass in a default decimal color value the item uses when it isn't dyed. (default value for leather is `-6265536`)
+It generates a simple item model JSON and an item model definition file specifying the tint color.
+
+
+
+_**assets/modid/items/leather_gloves.json**_
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/items/leather_gloves.json)
+
+:::warning IMPORTANT
+You have to add your item to the `ItemTags.DYEABLE` Tag so you can dye it in your inventory!
+:::
+
+Leather Gloves
+
+### Conditional Item Models {#conditional-item-models}
+
+@[code lang=java transcludeWith=:::datagen-model:condition](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Next, we'll look into generating item models that change their visual based when a specific boolean is true; in this case, the second parameter `BooleanProperty`. Here are some of them:
+
+| Property | Description |
+|------------------------|--------------------------------------------------------------------------------|
+| `KeybindDownProperty` | True when a specified key is pressed. |
+| `UsingItemProperty` | True when the item is being used (e.g. when blocking with a shield). |
+| `BrokenProperty` | True when the item has 0 durability (e.g. elytra changes texture when broken). |
+| `HasComponentProperty` | True when the item has a certain component. |
+
+Of course, this isn't all of them. There is plenty more that will almost certainly cover your needs.
+
+The third and fourth parameters are the models used when the property is true or false respectively.
+
+Flashlight turning on and off
+
+_**assets/modid/items/flashlight.json**_
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/items/flashlight.json)
+
+Flashlight
+
+:::warning IMPORTANT
+When obtaining `Identifier`s for the `ItemModels.basic()`, always use `itemModelGenerator.upload()` or any other method using it, otherwise your item model files won't generate, only item model definitions!
+:::
+
+### Composite Item Models {#composite-item-models}
+
+@[code lang=java transcludeWith=:::datagen-model:composite](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+These item models are composed of one or more textures layered on top of each other. There aren't any vanilla methods for this, you have to use `ItemModelGenerator`'s `output` field and then `accept()` for it to work.
+Here's the item model definition JSON:
+
+_**assets/modid/items/enhanced_hoe.json**_
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/items/enhanced_hoe.json)
+
+Enhanced Hoe
+
+### Select Item Models {#select-item-models}
+
+@[code lang=java transcludeWith=:::datagen-model:select](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Renders an item model based on the value of a specific property. These are some of them:
+
+| Property | Description |
+|-----------------------------|----------------------------------------------------------------------------------------------------|
+| `ContextDimensionProperty` | Renders an item model based on the dimension in which the player is (Overworld, Nether, End). |
+| `MainHandProperty` | Renders an item model when the item is equipped in player's main hand. |
+| `DisplayContextProperty` | Renders an item model based on the position in which the item is (`ground`, `fixed`, `head`, ...). |
+| `ContextEntityTypeProperty` | Renders an item model based on the entity holding the item. |
+
+In this example, the item changes texture when traveling between dimensions; green in Overworld, red in the Nether and black in the End.
+
+
+
+_**assets/modid/items/dimensional_crystal.json**_
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/items/dimensional_crystal.json)
+
+Dimensional Crystal
+
+### Range Dispatch Item Models {#range-dispatch-item-models}
+
+@[code lang=java transcludeWith=:::datagen-model:range-dispatch](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Renders an item model based on the value of a numeric property. Take in an item and list of variants paired with a value. There are quite a few, here are some examples:
+
+| Property | Description |
+|-----------------------|------------------------------------------------------------------------------|
+| `CooldownProperty` | Renders an item model based on item's remaining cooldown. |
+| `CountPropery` | Renders an item model based on stack size. |
+| `UseDurationProperty` | Renders an item model based on how long the item is being used. |
+| `DamageProperty` | Renders an item model based on attack damage (`minecraft:damage` component). |
+
+This example uses the `CountProperty`, changing the texture from one knife up to three based on the stack size.
+
+:::tip
+Some other examples of range dispatch item models are the compass, bow or brush.
+:::
+
+
+
+_**assets/modid/items/throwing_knives.json**_
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/items/throwing_knives.json)
+
+Throwing Knives
+
+## Custom Item Models {#custom-item-models}
+
+:::info
+All fields and methods for this part of the tutorial are declared in a static inner class called `CustomItemModelGenerator`.
+:::
+
+Generating item models isn't limited to only vanilla methods; you can, of course, create your own. In this section, we will be creating a custom model for a balloon item.
+
+### Parent Item Model {#parent-item-model}
+
+First, let's create a parent item model that defines how does the item look in-game. We want the balloon to look the same as simple item models, but scaled up. That's pretty straight-forward; we set the parent to be the `item/generated` model, and then override the scaling.
+Put this JSON file in the `resources/assets/mod_id/models/item` folder.
+
+**_models/item/scaled2x.json_**
+
+@[code](@/reference/latest/src/main/resources/assets/fabric-docs-reference/models/item/scaled2x.json)
+
+This will make the model twice as big as the normal ones. Feel free to experiment with the values until you get the desired output.
+
+Balloon
+
+### Custom Model {#custom-model}
+
+Next, we need to create an instance of the `Model` class. It will represent the actual [parent item model](#parent-item-model) inside our mod.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:item-model](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+The `item()` method creates a new `Model` instance, pointing to the `scaled2x.json` file inside the `resources/assets/mod_id/models/item` folder.
+
+TextureKey `LAYER0` represents the `#layer0` texture variable, which will then be replaced by an identifier pointing to a texture.
+
+### Custom Datagen Method {#custom-datagen-method}
+
+The last step is creating a custom method, which will be called in the `generateItemModels()` method and will be responsible for generating our item models.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:item-datagen-method](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+Let's go over what the parameters are for:
+
+1. `Item item`: The item, for which we are generating the models (in this case `ModItems.BALLOON`).
+2. `ItemModelGenerator generator`: the same that get passed into the `generateItemModels()` method. Used for its fields.
+
+First, we get the `Identifier` of the item with `BALLOON.upload()`, passing in a `TextureMap` and the `modelCollector` from our `generator` parameter.
+Then, we'll use another of its fields, the `output` (which essentially works as a consumer), and use the `accept()` method, so that the models are actually generated.
+
+And that's all! Now, we only need to call our method in the `generateItemModels()` method.
+
+@[code lang=java transcludeWith=:::datagen-model-custom:balloon](@/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java)
+
+## Sources and Links {#sources-and-links}
+
+You can view the example tests in [Fabric API](https://github.com/FabricMC/fabric/blob/1.21.4/fabric-data-generation-api-v1/src/), this documentation's [Reference Mod](https://github.com/FabricMC/fabric-docs/tree/main/reference) and the [Minecraft Wiki](https://minecraft.wiki/) for more information.
diff --git a/develop/data-generation/setup.md b/develop/data-generation/setup.md
index b051dc40b..eadc15bac 100644
--- a/develop/data-generation/setup.md
+++ b/develop/data-generation/setup.md
@@ -84,3 +84,4 @@ Now that datagen is set up, we need to add **providers**. These are what generat
- [Recipes](./recipes)
- [Tags](./tags)
- [Translations](./translations)
+- [Item Models](./item-models.md)
diff --git a/develop/items/spawn-egg.md b/develop/items/spawn-egg.md
new file mode 100644
index 000000000..131f4accc
--- /dev/null
+++ b/develop/items/spawn-egg.md
@@ -0,0 +1,104 @@
+---
+title: Spawn Egg Item
+description: Learn how to register a spawn egg item, and configure its colors.
+authors:
+ - Fellteros
+ - VatinMc
+ - skycatminepokie
+
+---
+
+::: info PREREQUISITES
+Visit [Creating Your First Item](./first-item) to understand the references made here. If this is your first item, you must complete the steps listed there.
+:::
+
+Spawn eggs are items that are used to spawn the corresponding mob. When creating spawn eggs, the following questions need to be answered:
+
+- Which `MobEntity` should be spawned?
+- What colors should the shell and dots be?
+- What should your spawn egg item be named?
+
+## Simplify Registering Spawn Egg Items {#simplify-registering-spawn-egg-items}
+
+When registering spawn egg items, an `EntityType` is needed.
+
+Create a method that accepts a `String`, an `EntityType` and `Item.Settings` to create the `SpawnEggItem` instance. The method should be located in the [item class](./first-item#preparing-your-items-class).
+
+::: info
+Check out the [item registration method](./first-item#preparing-your-items-class) for more information.
+:::
+
+@[code transcludeWith=:::spawn_egg_register_method](@/reference/latest/src/main/java/com/example/docs/item/ModItems.java)
+
+## Registering Your Spawn Egg Item {#registering-your-spawn-egg-item}
+
+The `registerSpawnEgg(...)` method can now be used, to register custom spawn eggs.
+
+Change the name and `EntityType` as desired.
+
+@[code transcludeWith=:::spawn_egg_register_item](@/reference/latest/src/main/java/com/example/docs/item/ModItems.java)
+
+
+
+The spawn egg item is now registered and can spawn frog entities. Texture, name and item group are still missing.
+
+## Creating The Item Model Description {#creating-the-item-model-description}
+
+Since spawn eggs use a template model, there is no need to create an item model.
+
+Minecraft uses the item model description to apply item models to items. In version 1.21.4, the item model description is also used to apply colors to spawn eggs.
+
+::: info
+The values represent the colors of shell and dots. To get the correct color value, a hexadecimal ARGB value (e.g., 0xffd07444) is converted into a signed 32-bit integer.
+
+If you don't want to worry about the conversion, you can use tools like [Spawn Egg Color Picker](https://vatinmc.github.io/spawn-egg-color-picker/).
+:::
+
+Create the item description JSON in the `assets/mod-id/items` directory, with the same file name as the id of the item: `custom_spawn_egg.json`.
+
+@[code](@/reference/latest/src/main/generated/assets/fabric-docs-reference/items/custom_spawn_egg.json)
+
+
+
+The spawn egg item is now textured. Name and item group are still missing.
+
+## Naming The Spawn Egg {#naming-the-spawn-egg}
+
+To name the spawn egg, the translation key `item.mod_id.custom_spawn_egg` must be assigned a value. This process is similar to [Naming The Item](./first-item#naming-the-item).
+
+Create or edit JSON file at: `src/main/resources/assets/mod-id/lang/en_us.json` and put in the translation key, and its value:
+
+```json
+{
+ "item.fabric-docs-reference.custom_spawn_egg": "Custom Spawn Egg"
+}
+```
+
+## Adding To An Item Group {#adding-to-an-item-group}
+
+Check out [Adding The Item To An Item Group](./first-item#adding-the-item-to-an-item-group) for more detailed information.
+
+The spawn egg is added to the spawn egg `ItemGroup`, in the `initialize()` method of the [item class](./first-item#preparing-your-items-class).
+
+@[code transcludeWith=:::spawn_egg_item_group](@/reference/latest/src/main/java/com/example/docs/item/ModItems.java)
+
+
+
+## Troubleshooting {#troubleshooting}
+
+::: info
+If this is your first item, you need some parts of [Creating Your First Item](./first-item) to make this work.
+:::
+
+### Not Registered {#not-registered}
+
+If you aren't able to access your spawn egg ingame, you most likely didn't statically initialize the item class. Check out [Registering Your First Item](first-item#registering-an-item) for more information.
+
+### Texture Missing {#texture-missing}
+
+- Minecraft uses Identifiers to handle information like textures of items. It is necessary to stay consistent with naming items, folders, and so on. When using the mod-id it must be the same as specified in your `fabric.mod.json` file.
+- JSON files are very sensitive, e.g., a misplaced comma will corrupt them. Check the [Item Model Description](#creating-the-item-model-description) for errors. This concept for spawn eggs only works for version 1.21.4.
+
+::: tip
+If you plan on adding multiple spawn eggs, consider using [data generation](../data-generation/spawn-egg-model) to avoid making mistakes.
+:::
diff --git a/public/assets/develop/data-generation/item-model/balloon.png b/public/assets/develop/data-generation/item-model/balloon.png
new file mode 100644
index 000000000..bbd689038
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/balloon.png differ
diff --git a/public/assets/develop/data-generation/item-model/balloon_big.png b/public/assets/develop/data-generation/item-model/balloon_big.png
new file mode 100644
index 000000000..39e50db86
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/balloon_big.png differ
diff --git a/public/assets/develop/data-generation/item-model/crystal.png b/public/assets/develop/data-generation/item-model/crystal.png
new file mode 100644
index 000000000..85a211bd2
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/crystal.png differ
diff --git a/public/assets/develop/data-generation/item-model/dimensional_crystal_end.png b/public/assets/develop/data-generation/item-model/dimensional_crystal_end.png
new file mode 100644
index 000000000..1a5c247b2
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/dimensional_crystal_end.png differ
diff --git a/public/assets/develop/data-generation/item-model/dimensional_crystal_nether.png b/public/assets/develop/data-generation/item-model/dimensional_crystal_nether.png
new file mode 100644
index 000000000..33ec026cc
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/dimensional_crystal_nether.png differ
diff --git a/public/assets/develop/data-generation/item-model/dimensional_crystal_overworld.png b/public/assets/develop/data-generation/item-model/dimensional_crystal_overworld.png
new file mode 100644
index 000000000..4b1eff193
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/dimensional_crystal_overworld.png differ
diff --git a/public/assets/develop/data-generation/item-model/dimensional_crystal_textures.zip b/public/assets/develop/data-generation/item-model/dimensional_crystal_textures.zip
new file mode 100644
index 000000000..f7faefcc9
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/dimensional_crystal_textures.zip differ
diff --git a/public/assets/develop/data-generation/item-model/dimensional_crystal_textures_big.png b/public/assets/develop/data-generation/item-model/dimensional_crystal_textures_big.png
new file mode 100644
index 000000000..cb525e2b6
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/dimensional_crystal_textures_big.png differ
diff --git a/public/assets/develop/data-generation/item-model/enhanced_hoe.png b/public/assets/develop/data-generation/item-model/enhanced_hoe.png
new file mode 100644
index 000000000..14ca3e11d
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/enhanced_hoe.png differ
diff --git a/public/assets/develop/data-generation/item-model/enhanced_hoe_plus.png b/public/assets/develop/data-generation/item-model/enhanced_hoe_plus.png
new file mode 100644
index 000000000..4e554f456
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/enhanced_hoe_plus.png differ
diff --git a/public/assets/develop/data-generation/item-model/enhanced_hoe_textures.zip b/public/assets/develop/data-generation/item-model/enhanced_hoe_textures.zip
new file mode 100644
index 000000000..0bafdfbe4
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/enhanced_hoe_textures.zip differ
diff --git a/public/assets/develop/data-generation/item-model/enhanced_hoe_textures_big.png b/public/assets/develop/data-generation/item-model/enhanced_hoe_textures_big.png
new file mode 100644
index 000000000..bad5ae6b8
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/enhanced_hoe_textures_big.png differ
diff --git a/public/assets/develop/data-generation/item-model/flashlight.png b/public/assets/develop/data-generation/item-model/flashlight.png
new file mode 100644
index 000000000..4e23f6dd4
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/flashlight.png differ
diff --git a/public/assets/develop/data-generation/item-model/flashlight_big.png b/public/assets/develop/data-generation/item-model/flashlight_big.png
new file mode 100644
index 000000000..376713523
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/flashlight_big.png differ
diff --git a/public/assets/develop/data-generation/item-model/flashlight_lit.png b/public/assets/develop/data-generation/item-model/flashlight_lit.png
new file mode 100644
index 000000000..e51a0de56
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/flashlight_lit.png differ
diff --git a/public/assets/develop/data-generation/item-model/flashlight_lit_big.png b/public/assets/develop/data-generation/item-model/flashlight_lit_big.png
new file mode 100644
index 000000000..7bb67f8b8
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/flashlight_lit_big.png differ
diff --git a/public/assets/develop/data-generation/item-model/flashlight_textures.zip b/public/assets/develop/data-generation/item-model/flashlight_textures.zip
new file mode 100644
index 000000000..7c927030e
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/flashlight_textures.zip differ
diff --git a/public/assets/develop/data-generation/item-model/flashlight_textures_big.png b/public/assets/develop/data-generation/item-model/flashlight_textures_big.png
new file mode 100644
index 000000000..66b7bacc9
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/flashlight_textures_big.png differ
diff --git a/public/assets/develop/data-generation/item-model/flashlight_turning_on.webm b/public/assets/develop/data-generation/item-model/flashlight_turning_on.webm
new file mode 100644
index 000000000..b4f9bf3ba
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/flashlight_turning_on.webm differ
diff --git a/public/assets/develop/data-generation/item-model/guidite_axe.png b/public/assets/develop/data-generation/item-model/guidite_axe.png
new file mode 100644
index 000000000..d7d329f01
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/guidite_axe.png differ
diff --git a/public/assets/develop/data-generation/item-model/guidite_axe_big.png b/public/assets/develop/data-generation/item-model/guidite_axe_big.png
new file mode 100644
index 000000000..c45482d0a
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/guidite_axe_big.png differ
diff --git a/public/assets/develop/data-generation/item-model/leather_gloves.png b/public/assets/develop/data-generation/item-model/leather_gloves.png
new file mode 100644
index 000000000..c4b651f3a
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/leather_gloves.png differ
diff --git a/public/assets/develop/data-generation/item-model/leather_gloves_big.png b/public/assets/develop/data-generation/item-model/leather_gloves_big.png
new file mode 100644
index 000000000..f4720101e
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/leather_gloves_big.png differ
diff --git a/public/assets/develop/data-generation/item-model/leather_gloves_dyeing.png b/public/assets/develop/data-generation/item-model/leather_gloves_dyeing.png
new file mode 100644
index 000000000..1f06ea939
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/leather_gloves_dyeing.png differ
diff --git a/public/assets/develop/data-generation/item-model/ruby.png b/public/assets/develop/data-generation/item-model/ruby.png
new file mode 100644
index 000000000..ed2d3dc63
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/ruby.png differ
diff --git a/public/assets/develop/data-generation/item-model/ruby_big.png b/public/assets/develop/data-generation/item-model/ruby_big.png
new file mode 100644
index 000000000..7d99c5f61
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/ruby_big.png differ
diff --git a/public/assets/develop/data-generation/item-model/throwing_knives_example.png b/public/assets/develop/data-generation/item-model/throwing_knives_example.png
new file mode 100644
index 000000000..727a1d9f2
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/throwing_knives_example.png differ
diff --git a/public/assets/develop/data-generation/item-model/throwing_knives_one.png b/public/assets/develop/data-generation/item-model/throwing_knives_one.png
new file mode 100644
index 000000000..a7f0d3dba
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/throwing_knives_one.png differ
diff --git a/public/assets/develop/data-generation/item-model/throwing_knives_textures.zip b/public/assets/develop/data-generation/item-model/throwing_knives_textures.zip
new file mode 100644
index 000000000..849887679
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/throwing_knives_textures.zip differ
diff --git a/public/assets/develop/data-generation/item-model/throwing_knives_textures_big.png b/public/assets/develop/data-generation/item-model/throwing_knives_textures_big.png
new file mode 100644
index 000000000..644c80de6
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/throwing_knives_textures_big.png differ
diff --git a/public/assets/develop/data-generation/item-model/throwing_knives_three.png b/public/assets/develop/data-generation/item-model/throwing_knives_three.png
new file mode 100644
index 000000000..1e576b3fa
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/throwing_knives_three.png differ
diff --git a/public/assets/develop/data-generation/item-model/throwing_knives_two.png b/public/assets/develop/data-generation/item-model/throwing_knives_two.png
new file mode 100644
index 000000000..d0e6e9c3f
Binary files /dev/null and b/public/assets/develop/data-generation/item-model/throwing_knives_two.png differ
diff --git a/public/assets/develop/items/spawn_egg_1.png b/public/assets/develop/items/spawn_egg_1.png
new file mode 100644
index 000000000..d600147ee
Binary files /dev/null and b/public/assets/develop/items/spawn_egg_1.png differ
diff --git a/public/assets/develop/items/spawn_egg_2.png b/public/assets/develop/items/spawn_egg_2.png
new file mode 100644
index 000000000..6a90dbc76
Binary files /dev/null and b/public/assets/develop/items/spawn_egg_2.png differ
diff --git a/public/assets/develop/items/spawn_egg_3.png b/public/assets/develop/items/spawn_egg_3.png
new file mode 100644
index 000000000..36645afcf
Binary files /dev/null and b/public/assets/develop/items/spawn_egg_3.png differ
diff --git a/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceEnglishLangProvider.java b/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceEnglishLangProvider.java
index f3753e6a0..3829953ae 100644
--- a/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceEnglishLangProvider.java
+++ b/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceEnglishLangProvider.java
@@ -58,15 +58,26 @@ public void generateTranslations(RegistryWrapper.WrapperLookup wrapperLookup, Tr
translationBuilder.add(ModBlocks.PRISMARINE_LAMP.asItem(), "Prismarine Lamp");
translationBuilder.add(ModBlocks.ENGINE_BLOCK.asItem(), "Engine Block");
- translationBuilder.add(ModBlocks.STEEL_BLOCK, "Steel Block");
- translationBuilder.add(ModBlocks.PIPE_BLOCK, "Pipe Block");
- translationBuilder.add(ModBlocks.RUBY_BLOCK, "Ruby Block");
- translationBuilder.add(ModBlocks.RUBY_STAIRS, "Ruby Stairs");
- translationBuilder.add(ModBlocks.RUBY_SLAB, "Ruby Slab");
- translationBuilder.add(ModBlocks.RUBY_FENCE, "Ruby Fence");
- translationBuilder.add(ModBlocks.RUBY_DOOR, "Ruby Door");
- translationBuilder.add(ModBlocks.RUBY_TRAPDOOR, "Ruby Trapdoor");
- translationBuilder.add(ModBlocks.VERTICAL_OAK_LOG_SLAB, "Vertical Oak Log Slab");
+ translationBuilder.add(ModBlocks.STEEL_BLOCK.asItem(), "Steel Block");
+ translationBuilder.add(ModBlocks.PIPE_BLOCK.asItem(), "Pipe Block");
+ translationBuilder.add(ModBlocks.RUBY_BLOCK.asItem(), "Ruby Block");
+ translationBuilder.add(ModBlocks.RUBY_STAIRS.asItem(), "Ruby Stairs");
+ translationBuilder.add(ModBlocks.RUBY_SLAB.asItem(), "Ruby Slab");
+ translationBuilder.add(ModBlocks.RUBY_FENCE.asItem(), "Ruby Fence");
+ translationBuilder.add(ModBlocks.RUBY_DOOR.asItem(), "Ruby Door");
+ translationBuilder.add(ModBlocks.RUBY_TRAPDOOR.asItem(), "Ruby Trapdoor");
+ translationBuilder.add(ModBlocks.VERTICAL_OAK_LOG_SLAB.asItem(), "Vertical Oak Log Slab");
+
+ translationBuilder.add(ModItems.RUBY, "Ruby");
+ translationBuilder.add(ModItems.GUIDITE_AXE, "Guidite Axe");
+ translationBuilder.add(ModItems.LEATHER_GLOVES, "Leather Gloves");
+ translationBuilder.add(ModItems.FLASHLIGHT, "Flashlight");
+ translationBuilder.add(ModItems.BALLOON, "Balloon");
+ translationBuilder.add(ModItems.THROWING_KNIVES, "Throwing Knives");
+ translationBuilder.add(ModItems.ENHANCED_HOE, "Enhanced Hoe");
+ translationBuilder.add(ModItems.DIMENSIONAL_CRYSTAL, "Dimensional Crystal");
+
+ translationBuilder.add(ModItems.CUSTOM_SPAWN_EGG, "Custom Spawn Egg");
// :::datagen-translations:provider
}
}
diff --git a/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceItemTagProvider.java b/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceItemTagProvider.java
index dde90f0ae..732a24b04 100644
--- a/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceItemTagProvider.java
+++ b/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceItemTagProvider.java
@@ -14,6 +14,7 @@
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import com.example.docs.FabricDocsReference;
+import com.example.docs.item.ModItems;
// :::datagen-tags:provider
public class FabricDocsReferenceItemTagProvider extends FabricTagProvider- {
@@ -38,6 +39,9 @@ protected void configure(RegistryWrapper.WrapperLookup wrapperLookup) {
.forceAddTag(ItemTags.BANNERS)
.setReplace(true);
// :::datagen-tags:build
+
+ getOrCreateTagBuilder(ItemTags.DYEABLE).add(ModItems.LEATHER_GLOVES);
+
// :::datagen-tags:provider
}
}
diff --git a/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java b/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java
index ef9bf23ce..261bba122 100644
--- a/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java
+++ b/reference/latest/src/client/java/com/example/docs/datagen/FabricDocsReferenceModelProvider.java
@@ -1,5 +1,6 @@
package com.example.docs.datagen;
+import java.util.List;
import java.util.Optional;
import net.minecraft.block.Block;
@@ -9,16 +10,23 @@
import net.minecraft.client.data.BlockStateVariant;
import net.minecraft.client.data.BlockStateVariantMap;
import net.minecraft.client.data.ItemModelGenerator;
+import net.minecraft.client.data.ItemModels;
import net.minecraft.client.data.Model;
import net.minecraft.client.data.ModelIds;
+import net.minecraft.client.data.Models;
import net.minecraft.client.data.TextureKey;
import net.minecraft.client.data.TextureMap;
import net.minecraft.client.data.TexturedModel;
import net.minecraft.client.data.VariantSetting;
import net.minecraft.client.data.VariantSettings;
import net.minecraft.client.data.VariantsBlockStateSupplier;
+import net.minecraft.client.render.item.model.ItemModel;
+import net.minecraft.client.render.item.property.numeric.CountProperty;
+import net.minecraft.client.render.item.property.select.ContextDimensionProperty;
+import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.Direction;
+import net.minecraft.world.World;
import net.fabricmc.fabric.api.client.datagen.v1.provider.FabricModelProvider;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
@@ -26,6 +34,7 @@
import com.example.docs.FabricDocsReference;
import com.example.docs.block.ModBlocks;
import com.example.docs.block.custom.VerticalSlabBlock;
+import com.example.docs.item.ModItems;
// :::datagen-model:provider
public class FabricDocsReferenceModelProvider extends FabricModelProvider {
@@ -86,14 +95,111 @@ public void exampleBlockStateGeneration(BlockStateModelGenerator blockStateModel
public void generateItemModels(ItemModelGenerator itemModelGenerator) {
// :::datagen-model:provider
- //TODO Since I have little experience with generating item models, I will leave this to someone more experienced (Fellteros)
+ //:::datagen-model:generated
+ itemModelGenerator.register(ModItems.RUBY, Models.GENERATED);
+ //:::datagen-model:generated
+
+ //:::datagen-model:handheld
+ itemModelGenerator.register(ModItems.GUIDITE_AXE, Models.HANDHELD);
+ //:::datagen-model:handheld
+
+ //:::datagen-model:spawn-egg
+ int shellColor = 0x000000;
+ int spotsColor = 0xffffff;
+ itemModelGenerator.registerSpawnEgg(ModItems.CUSTOM_SPAWN_EGG, shellColor, spotsColor);
+ //:::datagen-model:spawn-egg
+
+ //:::datagen-model:dyeable
+ itemModelGenerator.registerDyeable(ModItems.LEATHER_GLOVES, -6265536);
+ //:::datagen-model:dyeable
+
+ //:::datagen-model:condition
+ itemModelGenerator.registerCondition(
+ ModItems.FLASHLIGHT,
+ ItemModels.usingItemProperty(),
+ ItemModels.basic(itemModelGenerator.registerSubModel(ModItems.FLASHLIGHT, "_lit", Models.GENERATED)),
+ ItemModels.basic(itemModelGenerator.upload(ModItems.FLASHLIGHT, Models.GENERATED))
+ );
+ //:::datagen-model:condition
+
+ //:::datagen-model:composite
+ ItemModel.Unbaked hoe = ItemModels.basic(itemModelGenerator.upload(ModItems.ENHANCED_HOE, Models.GENERATED));
+ ItemModel.Unbaked hoePlus = ItemModels.basic(itemModelGenerator.registerSubModel(ModItems.ENHANCED_HOE, "_plus", Models.GENERATED));
+
+ itemModelGenerator.output.accept(
+ ModItems.ENHANCED_HOE,
+ ItemModels.composite(hoe, hoePlus)
+ );
+ //:::datagen-model:composite
+
+ //:::datagen-model:select
+ ItemModel.Unbaked crystalOverworld = ItemModels.basic(itemModelGenerator.registerSubModel(ModItems.DIMENSIONAL_CRYSTAL, "_overworld", Models.GENERATED));
+ ItemModel.Unbaked crystalNether = ItemModels.basic(itemModelGenerator.registerSubModel(ModItems.DIMENSIONAL_CRYSTAL, "_nether", Models.GENERATED));
+ ItemModel.Unbaked crystalEnd = ItemModels.basic(itemModelGenerator.registerSubModel(ModItems.DIMENSIONAL_CRYSTAL, "_end", Models.GENERATED));
+
+ itemModelGenerator.output.accept(
+ ModItems.DIMENSIONAL_CRYSTAL,
+ ItemModels.select(new ContextDimensionProperty(),
+ ItemModels.switchCase(World.OVERWORLD, crystalOverworld),
+ ItemModels.switchCase(World.NETHER, crystalNether),
+ ItemModels.switchCase(World.END, crystalEnd)
+ )
+ );
+ //:::datagen-model:select
+
+ //:::datagen-model:range-dispatch
+ ItemModel.Unbaked knifeOne = ItemModels.basic(itemModelGenerator.registerSubModel(ModItems.THROWING_KNIVES, "_one", Models.GENERATED));
+ ItemModel.Unbaked knifeTwo = ItemModels.basic(itemModelGenerator.registerSubModel(ModItems.THROWING_KNIVES, "_two", Models.GENERATED));
+ ItemModel.Unbaked knifeThree = ItemModels.basic(itemModelGenerator.registerSubModel(ModItems.THROWING_KNIVES, "_three", Models.GENERATED));
+
+ itemModelGenerator.output.accept(
+ ModItems.THROWING_KNIVES,
+ ItemModels.rangeDispatch(
+ new CountProperty(false),
+ List.of(
+ ItemModels.rangeDispatchEntry(knifeOne, 1.0F),
+ ItemModels.rangeDispatchEntry(knifeTwo, 2.0F),
+ ItemModels.rangeDispatchEntry(knifeThree, 3.0F)
+ )
+ )
+ );
+ //:::datagen-model:range-dispatch
+
+ //:::datagen-model-custom:balloon
+ CustomItemModelGenerator.registerScaled2x(ModItems.BALLOON, itemModelGenerator);
+ //:::datagen-model-custom:balloon
// :::datagen-model:provider
}
// :::datagen-model:provider
+ // Inner class containing custom objects for item model generation.
+ public static class CustomItemModelGenerator {
+ //:::datagen-model-custom:item-model
+ public static final Model SCALED2X = item("scaled2x", TextureKey.LAYER0);
+ //:::datagen-model-custom:item-model
+
+ //:::datagen-model-custom:item-datagen-method
+ public static void registerScaled2x(Item item, ItemModelGenerator generator) {
+ Identifier itemModel = SCALED2X.upload(item, TextureMap.of(TextureKey.LAYER0, ModelIds.getItemModelId(item)), generator.modelCollector);
+ generator.output.accept(item, ItemModels.basic(itemModel));
+ }
+
+ //:::datagen-model-custom:item-datagen-method
+
+ @SuppressWarnings("SameParameterValue")
+ //:::datagen-model-custom:item-model
+
+ private static Model item(String parent, TextureKey... requiredTextureKeys) {
+ return new Model(Optional.of(Identifier.of(FabricDocsReference.MOD_ID, "item/" + parent)), Optional.empty(), requiredTextureKeys);
+ }
+
+ //:::datagen-model-custom:item-model
+ }
+
// Inner class containing all Objects needed for the custom datagen tutorial.
+ @SuppressWarnings("ALL")
public static class CustomBlockStateModelGenerator {
// :::datagen-model-custom:model
public static final Model VERTICAL_SLAB = block("vertical_slab", TextureKey.BOTTOM, TextureKey.TOP, TextureKey.SIDE);
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/balloon.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/balloon.json
new file mode 100644
index 000000000..eb14ad323
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/balloon.json
@@ -0,0 +1,6 @@
+{
+ "model": {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/balloon"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/custom_spawn_egg.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/custom_spawn_egg.json
new file mode 100644
index 000000000..3ace051f2
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/custom_spawn_egg.json
@@ -0,0 +1,16 @@
+{
+ "model": {
+ "type": "minecraft:model",
+ "model": "minecraft:item/template_spawn_egg",
+ "tints": [
+ {
+ "type": "minecraft:constant",
+ "value": -16777216
+ },
+ {
+ "type": "minecraft:constant",
+ "value": -1
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/dimensional_crystal.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/dimensional_crystal.json
new file mode 100644
index 000000000..fc3b3a845
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/dimensional_crystal.json
@@ -0,0 +1,29 @@
+{
+ "model": {
+ "type": "minecraft:select",
+ "cases": [
+ {
+ "model": {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/dimensional_crystal_overworld"
+ },
+ "when": "minecraft:overworld"
+ },
+ {
+ "model": {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/dimensional_crystal_nether"
+ },
+ "when": "minecraft:the_nether"
+ },
+ {
+ "model": {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/dimensional_crystal_end"
+ },
+ "when": "minecraft:the_end"
+ }
+ ],
+ "property": "minecraft:context_dimension"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/enhanced_hoe.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/enhanced_hoe.json
new file mode 100644
index 000000000..3938afe38
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/enhanced_hoe.json
@@ -0,0 +1,15 @@
+{
+ "model": {
+ "type": "minecraft:composite",
+ "models": [
+ {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/enhanced_hoe"
+ },
+ {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/enhanced_hoe_plus"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/flashlight.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/flashlight.json
new file mode 100644
index 000000000..955f2c456
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/flashlight.json
@@ -0,0 +1,14 @@
+{
+ "model": {
+ "type": "minecraft:condition",
+ "on_false": {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/flashlight"
+ },
+ "on_true": {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/flashlight_lit"
+ },
+ "property": "minecraft:using_item"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/guidite_axe.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/guidite_axe.json
new file mode 100644
index 000000000..2a9912836
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/guidite_axe.json
@@ -0,0 +1,6 @@
+{
+ "model": {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/guidite_axe"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/leather_gloves.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/leather_gloves.json
new file mode 100644
index 000000000..d6b861ec8
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/leather_gloves.json
@@ -0,0 +1,12 @@
+{
+ "model": {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/leather_gloves",
+ "tints": [
+ {
+ "type": "minecraft:dye",
+ "default": -6265536
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby.json
new file mode 100644
index 000000000..c6a0375ec
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby.json
@@ -0,0 +1,6 @@
+{
+ "model": {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/ruby"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby_door.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby_door.json
index a1c490bdf..07d2240a9 100644
--- a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby_door.json
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby_door.json
@@ -1,6 +1,6 @@
{
"model": {
"type": "minecraft:model",
- "model": "fabric-docs-reference:block/ruby_door"
+ "model": "fabric-docs-reference:item/ruby_door"
}
}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby_fence.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby_fence.json
index 5ed2fdb1c..aee82d9ad 100644
--- a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby_fence.json
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby_fence.json
@@ -1,6 +1,6 @@
{
"model": {
"type": "minecraft:model",
- "model": "fabric-docs-reference:block/ruby_fence"
+ "model": "fabric-docs-reference:block/ruby_fence_inventory"
}
}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby_trapdoor.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby_trapdoor.json
index d47921fb6..620b00ddb 100644
--- a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby_trapdoor.json
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/ruby_trapdoor.json
@@ -1,6 +1,6 @@
{
"model": {
"type": "minecraft:model",
- "model": "fabric-docs-reference:block/ruby_trapdoor"
+ "model": "fabric-docs-reference:block/ruby_trapdoor_bottom"
}
}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/items/throwing_knives.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/throwing_knives.json
new file mode 100644
index 000000000..6f857e459
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/items/throwing_knives.json
@@ -0,0 +1,30 @@
+{
+ "model": {
+ "type": "minecraft:range_dispatch",
+ "entries": [
+ {
+ "model": {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/throwing_knives_one"
+ },
+ "threshold": 1.0
+ },
+ {
+ "model": {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/throwing_knives_two"
+ },
+ "threshold": 2.0
+ },
+ {
+ "model": {
+ "type": "minecraft:model",
+ "model": "fabric-docs-reference:item/throwing_knives_three"
+ },
+ "threshold": 3.0
+ }
+ ],
+ "normalize": false,
+ "property": "minecraft:count"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/lang/en_us.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/lang/en_us.json
index dd0a7e484..f7f275dc3 100644
--- a/reference/latest/src/main/generated/assets/fabric-docs-reference/lang/en_us.json
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/lang/en_us.json
@@ -3,34 +3,43 @@
"block.fabric-docs-reference.condensed_oak_log": "Condensed Oak Log",
"block.fabric-docs-reference.counter_block": "Counter Block",
"block.fabric-docs-reference.engine": "Engine Block",
- "block.fabric-docs-reference.pipe_block": "Pipe Block",
"block.fabric-docs-reference.prismarine_lamp": "Prismarine Lamp",
- "block.fabric-docs-reference.ruby_block": "Ruby Block",
- "block.fabric-docs-reference.ruby_door": "Ruby Door",
- "block.fabric-docs-reference.ruby_fence": "Ruby Fence",
- "block.fabric-docs-reference.ruby_slab": "Ruby Slab",
- "block.fabric-docs-reference.ruby_stairs": "Ruby Stairs",
- "block.fabric-docs-reference.ruby_trapdoor": "Ruby Trapdoor",
- "block.fabric-docs-reference.steel_block": "Steel Block",
- "block.fabric-docs-reference.vertical_oak_log_slab": "Vertical Oak Log Slab",
"death.attack.tater": "%1$s died from Tater damage!",
"effect.fabric-docs-reference.tater": "Tater",
"enchantment.fabric-docs-reference.thundering": "Thundering",
+ "item.fabric-docs-reference.balloon": "Balloon",
"item.fabric-docs-reference.condensed_dirt": "Condensed Dirt",
"item.fabric-docs-reference.condensed_oak_log": "Condensed Oak Log",
"item.fabric-docs-reference.counter": "Counter",
"item.fabric-docs-reference.counter.info": "Used %1$s times",
"item.fabric-docs-reference.counter_block": "Counter Block",
+ "item.fabric-docs-reference.custom_spawn_egg": "Custom Spawn Egg",
+ "item.fabric-docs-reference.dimensional_crystal": "Dimensional Crystal",
"item.fabric-docs-reference.engine": "Engine Block",
+ "item.fabric-docs-reference.enhanced_hoe": "Enhanced Hoe",
+ "item.fabric-docs-reference.flashlight": "Flashlight",
+ "item.fabric-docs-reference.guidite_axe": "Guidite Axe",
"item.fabric-docs-reference.guidite_boots": "Guidite Boots",
"item.fabric-docs-reference.guidite_chestplate": "Guidite Chestplate",
"item.fabric-docs-reference.guidite_helmet": "Guidite Helmet",
"item.fabric-docs-reference.guidite_leggings": "Guidite Leggings",
"item.fabric-docs-reference.guidite_sword": "Guidite Sword",
+ "item.fabric-docs-reference.leather_gloves": "Leather Gloves",
"item.fabric-docs-reference.lightning_stick": "Lightning Stick",
+ "item.fabric-docs-reference.pipe_block": "Pipe Block",
"item.fabric-docs-reference.poisonous_apple": "Poisonous Apple",
"item.fabric-docs-reference.prismarine_lamp": "Prismarine Lamp",
+ "item.fabric-docs-reference.ruby": "Ruby",
+ "item.fabric-docs-reference.ruby_block": "Ruby Block",
+ "item.fabric-docs-reference.ruby_door": "Ruby Door",
+ "item.fabric-docs-reference.ruby_fence": "Ruby Fence",
+ "item.fabric-docs-reference.ruby_slab": "Ruby Slab",
+ "item.fabric-docs-reference.ruby_stairs": "Ruby Stairs",
+ "item.fabric-docs-reference.ruby_trapdoor": "Ruby Trapdoor",
+ "item.fabric-docs-reference.steel_block": "Steel Block",
"item.fabric-docs-reference.suspicious_substance": "Suspicious Substance",
+ "item.fabric-docs-reference.throwing_knives": "Throwing Knives",
+ "item.fabric-docs-reference.vertical_oak_log_slab": "Vertical Oak Log Slab",
"item.minecraft.potion.effect.tater": "Tater Potion",
"itemGroup.fabric_docs_reference": "Fabric Docs Reference",
"itemTooltip.fabric-docs-reference.lightning_stick": "This is an extremely powerful weapon that can summon lightning bolts.",
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/balloon.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/balloon.json
new file mode 100644
index 000000000..dec9c8012
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/balloon.json
@@ -0,0 +1,6 @@
+{
+ "parent": "fabric-docs-reference:item/scaled2x",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/balloon"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/dimensional_crystal_end.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/dimensional_crystal_end.json
new file mode 100644
index 000000000..af75af205
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/dimensional_crystal_end.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/dimensional_crystal_end"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/dimensional_crystal_nether.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/dimensional_crystal_nether.json
new file mode 100644
index 000000000..2132c4098
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/dimensional_crystal_nether.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/dimensional_crystal_nether"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/dimensional_crystal_overworld.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/dimensional_crystal_overworld.json
new file mode 100644
index 000000000..75525ac7e
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/dimensional_crystal_overworld.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/dimensional_crystal_overworld"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/enhanced_hoe.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/enhanced_hoe.json
new file mode 100644
index 000000000..a700f520f
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/enhanced_hoe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/enhanced_hoe"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/enhanced_hoe_plus.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/enhanced_hoe_plus.json
new file mode 100644
index 000000000..c28111f9f
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/enhanced_hoe_plus.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/enhanced_hoe_plus"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/flashlight.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/flashlight.json
new file mode 100644
index 000000000..be50e10cd
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/flashlight.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/flashlight"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/flashlight_lit.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/flashlight_lit.json
new file mode 100644
index 000000000..c9158a556
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/flashlight_lit.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/flashlight_lit"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/guidite_axe.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/guidite_axe.json
new file mode 100644
index 000000000..c8a1a8394
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/guidite_axe.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/handheld",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/guidite_axe"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/leather_gloves.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/leather_gloves.json
new file mode 100644
index 000000000..583009e1a
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/leather_gloves.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/leather_gloves"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/ruby.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/ruby.json
new file mode 100644
index 000000000..c8c3eb894
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/ruby.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/ruby"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/throwing_knives_one.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/throwing_knives_one.json
new file mode 100644
index 000000000..4eb0ee21f
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/throwing_knives_one.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/throwing_knives_one"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/throwing_knives_three.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/throwing_knives_three.json
new file mode 100644
index 000000000..4b1871217
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/throwing_knives_three.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/throwing_knives_three"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/throwing_knives_two.json b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/throwing_knives_two.json
new file mode 100644
index 000000000..ed53ba587
--- /dev/null
+++ b/reference/latest/src/main/generated/assets/fabric-docs-reference/models/item/throwing_knives_two.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "fabric-docs-reference:item/throwing_knives_two"
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/generated/data/minecraft/tags/item/dyeable.json b/reference/latest/src/main/generated/data/minecraft/tags/item/dyeable.json
new file mode 100644
index 000000000..1e084198d
--- /dev/null
+++ b/reference/latest/src/main/generated/data/minecraft/tags/item/dyeable.json
@@ -0,0 +1,5 @@
+{
+ "values": [
+ "fabric-docs-reference:leather_gloves"
+ ]
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/java/com/example/docs/block/ModBlocks.java b/reference/latest/src/main/java/com/example/docs/block/ModBlocks.java
index a86c2a5cc..5ccc3c163 100644
--- a/reference/latest/src/main/java/com/example/docs/block/ModBlocks.java
+++ b/reference/latest/src/main/java/com/example/docs/block/ModBlocks.java
@@ -136,7 +136,7 @@ private static Block register(String name, Function itemKey = keyOfItem(name);
- BlockItem blockItem = new BlockItem(block, new Item.Settings().registryKey(itemKey));
+ BlockItem blockItem = new BlockItem(block, new Item.Settings().registryKey(itemKey).useItemPrefixedTranslationKey());
Registry.register(Registries.ITEM, itemKey, blockItem);
}
@@ -169,13 +169,13 @@ public static void setupItemGroups() {
itemGroup.add(ModBlocks.PRISMARINE_LAMP.asItem());
itemGroup.add(ModBlocks.COUNTER_BLOCK.asItem());
itemGroup.add(ModBlocks.ENGINE_BLOCK.asItem());
- itemGroup.add(RUBY_BLOCK);
- itemGroup.add(RUBY_STAIRS);
- itemGroup.add(RUBY_SLAB);
- itemGroup.add(RUBY_FENCE);
- itemGroup.add(RUBY_DOOR);
- itemGroup.add(RUBY_TRAPDOOR);
- itemGroup.add(VERTICAL_OAK_LOG_SLAB);
+ itemGroup.add(RUBY_BLOCK.asItem());
+ itemGroup.add(RUBY_STAIRS.asItem());
+ itemGroup.add(RUBY_SLAB.asItem());
+ itemGroup.add(RUBY_FENCE.asItem());
+ itemGroup.add(RUBY_DOOR.asItem());
+ itemGroup.add(RUBY_TRAPDOOR.asItem());
+ itemGroup.add(VERTICAL_OAK_LOG_SLAB.asItem());
});
}
diff --git a/reference/latest/src/main/java/com/example/docs/item/ModItems.java b/reference/latest/src/main/java/com/example/docs/item/ModItems.java
index f8b37814a..d4eaabcbe 100644
--- a/reference/latest/src/main/java/com/example/docs/item/ModItems.java
+++ b/reference/latest/src/main/java/com/example/docs/item/ModItems.java
@@ -5,13 +5,19 @@
import net.minecraft.component.type.ConsumableComponent;
import net.minecraft.component.type.ConsumableComponents;
import net.minecraft.component.type.FoodComponent;
+import net.minecraft.entity.EntityType;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.entity.mob.MobEntity;
+import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ArmorItem;
+import net.minecraft.item.AxeItem;
+import net.minecraft.item.HoeItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemGroups;
import net.minecraft.item.ItemStack;
+import net.minecraft.item.SpawnEggItem;
import net.minecraft.item.SwordItem;
import net.minecraft.item.ToolMaterial;
import net.minecraft.item.consume.ApplyEffectsConsumeEffect;
@@ -22,7 +28,10 @@
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.text.Text;
+import net.minecraft.util.ActionResult;
+import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;
+import net.minecraft.world.World;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
@@ -118,6 +127,62 @@ public class ModItems {
// :::2
public static final Item SUSPICIOUS_SUBSTANCE = register("suspicious_substance", Item::new, new Item.Settings());
// :::2
+
+ //generated
+ public static final Item RUBY = register("ruby", Item::new, new Item.Settings());
+
+ //handheld
+ public static final Item GUIDITE_AXE = register("guidite_axe", settings -> new AxeItem(GUIDITE_TOOL_MATERIAL, 5.0F, -3.0F, settings), new Item.Settings());
+
+ //spawn egg
+ // :::spawn_egg_register_item
+ public static final SpawnEggItem CUSTOM_SPAWN_EGG = registerSpawnEgg(
+ "custom_spawn_egg",
+ EntityType.FROG,
+ new Item.Settings()
+ );
+ // :::spawn_egg_register_item
+
+ //dyeable
+ public static final Item LEATHER_GLOVES = register("leather_gloves", Item::new, new Item.Settings());
+
+ //condition
+ public static final Item FLASHLIGHT = register("flashlight", settings -> new Item(settings) {
+ @Override
+ public ActionResult use(World world, PlayerEntity user, Hand hand) {
+ user.setCurrentHand(hand);
+ return ActionResult.CONSUME;
+ }
+ }, new Item.Settings());
+
+ //custom
+ public static final Item BALLOON = register("balloon", Item::new, new Item.Settings());
+
+ //composite
+ public static final Item ENHANCED_HOE = register("enhanced_hoe", settings -> new HoeItem(GUIDITE_TOOL_MATERIAL, -4.0F, 0.0F, settings), new Item.Settings());
+
+ //select
+ public static final Item DIMENSIONAL_CRYSTAL = register("dimensional_crystal", Item::new, new Item.Settings());
+
+ //range dispatch
+ public static final Item THROWING_KNIVES = register("throwing_knives", Item::new, new Item.Settings().maxCount(3));
+
+ // :::spawn_egg_register_method
+ public static SpawnEggItem registerSpawnEgg(String name, EntityType extends MobEntity> entityType, Item.Settings settings) {
+ // Create the item key.
+ RegistryKey
- itemKey = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(FabricDocsReference.MOD_ID, name));
+
+ // Create the spawn egg item instance.
+ SpawnEggItem spawnEggItem = new SpawnEggItem(entityType, settings.registryKey(itemKey));
+
+ // Register the spawn egg item.
+ Registry.register(Registries.ITEM, itemKey, spawnEggItem);
+
+ return spawnEggItem;
+ }
+
+ // :::spawn_egg_register_method
+
// :::1
public static Item register(String name, Function itemFactory, Item.Settings settings) {
// Create the item key.
@@ -157,6 +222,11 @@ public static void initialize() {
.register((itemGroup) -> itemGroup.add(ModItems.GUIDITE_SWORD));
// :::8
+ // :::spawn_egg_item_group
+ ItemGroupEvents.modifyEntriesEvent(ItemGroups.SPAWN_EGGS)
+ .register(itemGroup -> itemGroup.add(ModItems.CUSTOM_SPAWN_EGG));
+ // :::spawn_egg_item_group
+
// :::_12
// Register the group.
Registry.register(Registries.ITEM_GROUP, CUSTOM_ITEM_GROUP_KEY, CUSTOM_ITEM_GROUP);
@@ -175,6 +245,17 @@ public static void initialize() {
});
// :::_12
+ ItemGroupEvents.modifyEntriesEvent(CUSTOM_ITEM_GROUP_KEY).register(itemGroup -> {
+ itemGroup.add(ModItems.RUBY);
+ itemGroup.add(ModItems.GUIDITE_AXE);
+ itemGroup.add(ModItems.LEATHER_GLOVES);
+ itemGroup.add(ModItems.FLASHLIGHT);
+ itemGroup.add(ModItems.BALLOON);
+ itemGroup.add(ModItems.ENHANCED_HOE);
+ itemGroup.add(ModItems.DIMENSIONAL_CRYSTAL);
+ itemGroup.add(ModItems.THROWING_KNIVES);
+ });
+
// :::_10
// Add the suspicious substance to the composting registry with a 30% chance of increasing the composter's level.
CompostingChanceRegistry.INSTANCE.add(ModItems.SUSPICIOUS_SUBSTANCE, 0.3f);
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/models/item/scaled2x.json b/reference/latest/src/main/resources/assets/fabric-docs-reference/models/item/scaled2x.json
new file mode 100644
index 000000000..d5e3ce366
--- /dev/null
+++ b/reference/latest/src/main/resources/assets/fabric-docs-reference/models/item/scaled2x.json
@@ -0,0 +1,25 @@
+{
+ "parent": "item/generated",
+ "display": {
+ "ground": {
+ "rotation": [ 0, 0, 0 ],
+ "translation": [ 0, 2, 0],
+ "scale":[ 1, 1, 1 ]
+ },
+ "head": {
+ "rotation": [ 0, 180, 0 ],
+ "translation": [ 0, 13, 7],
+ "scale":[ 2, 2, 2 ]
+ },
+ "thirdperson_righthand": {
+ "rotation": [ 0, 0, 0 ],
+ "translation": [ 0, 3, 1 ],
+ "scale": [ 1.1, 1.1, 1.1 ]
+ },
+ "firstperson_righthand": {
+ "rotation": [ 0, -90, 25 ],
+ "translation": [ 1.13, 3.2, 1.13],
+ "scale": [ 1.36, 1.36, 1.36 ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/balloon.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/balloon.png
new file mode 100644
index 000000000..bbd689038
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/balloon.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/dimensional_crystal_end.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/dimensional_crystal_end.png
new file mode 100644
index 000000000..1a5c247b2
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/dimensional_crystal_end.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/dimensional_crystal_nether.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/dimensional_crystal_nether.png
new file mode 100644
index 000000000..33ec026cc
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/dimensional_crystal_nether.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/dimensional_crystal_overworld.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/dimensional_crystal_overworld.png
new file mode 100644
index 000000000..4b1eff193
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/dimensional_crystal_overworld.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/enhanced_hoe.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/enhanced_hoe.png
new file mode 100644
index 000000000..14ca3e11d
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/enhanced_hoe.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/enhanced_hoe_plus.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/enhanced_hoe_plus.png
new file mode 100644
index 000000000..4e554f456
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/enhanced_hoe_plus.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/flashlight.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/flashlight.png
new file mode 100644
index 000000000..4e23f6dd4
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/flashlight.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/flashlight_lit.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/flashlight_lit.png
new file mode 100644
index 000000000..e51a0de56
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/flashlight_lit.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/guidite_axe.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/guidite_axe.png
new file mode 100644
index 000000000..d7d329f01
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/guidite_axe.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/leather_gloves.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/leather_gloves.png
new file mode 100644
index 000000000..c4b651f3a
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/leather_gloves.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/ruby.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/ruby.png
new file mode 100644
index 000000000..ed2d3dc63
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/ruby.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/throwing_knives_one.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/throwing_knives_one.png
new file mode 100644
index 000000000..a7f0d3dba
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/throwing_knives_one.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/throwing_knives_three.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/throwing_knives_three.png
new file mode 100644
index 000000000..1e576b3fa
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/throwing_knives_three.png differ
diff --git a/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/throwing_knives_two.png b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/throwing_knives_two.png
new file mode 100644
index 000000000..d0e6e9c3f
Binary files /dev/null and b/reference/latest/src/main/resources/assets/fabric-docs-reference/textures/item/throwing_knives_two.png differ
diff --git a/sidebar_translations.json b/sidebar_translations.json
index a4ca4e92c..ebb61f01a 100644
--- a/sidebar_translations.json
+++ b/sidebar_translations.json
@@ -29,6 +29,7 @@
"develop.items.custom-item-interactions": "Custom Item Interactions",
"develop.items.custom-enchantment-effects": "Custom Enchantment Effects",
"develop.items.potions": "Potions",
+ "develop.items.spawn-egg": "Spawn Egg",
"develop.items.custom-data-components": "Custom Data Components",
"develop.blocks": "Blocks",
"develop.blocks.first-block": "Creating Your First Block",
@@ -50,6 +51,7 @@
"develop.dataGeneration.recipes": "Recipe Generation",
"develop.dataGeneration.lootTables": "Loot Table Generation",
"develop.dataGeneration.blockModels": "Block Model Generation",
+ "develop.dataGeneration.itemModels": "Item Model Generation",
"develop.rendering": "Rendering",
"develop.rendering.basicConcepts": "Basic Rendering Concepts",
"develop.rendering.drawContext": "Using the Drawing Context",