We’ve already made a Corn item for our crop, however, we were unable to eat the corn (defeating its very purpose). Let’s make our Corn behave as actual food.
First we’ll need to create an ItemCorn
class that will be our new corn item, instead of just using ItemOre
. Our class will extend ItemFood
so it inherits all of the vanilla food-handling logic. We’ll also want our class to implement ItemModelProvider
and ItemOreDict
so it retains the functionality from the existing corn item.
The ItemFood
constructor takes 3 parameters:
- The amount of hunger restored by this food.
- The saturation given by this food.
- If this food is edible by wolves.
We’ll pass in 3
, 0.6f
, and false
for the hunger, saturation, and wolf food values, the same values as the Carrot. Also in the constructor, we’ll call setUnlocalizedName
and setRegistryName
with the same value as we used for the original corn item (corn
). We’ll also call setCreativeTab
with our custom creative tab.
We’ll also need to override the registerItemModel
and initOreDict
methods from the interfaces we implemented.
In registerItemModel
, we’ll use our proxy registerItemRenderer
method to register an item model for our corn item. We’ll use corn
as the model name, the same as our original item.
We’ll also override initOreDict
and call the OreDictionary.registerOre
method with cropCorn
as the ore name, the same as our original item.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package net.shadowfacts.tutorial.item;
import net.minecraft.item.Item;
import net.minecraft.item.ItemFood;
import net.minecraftforge.oredict.OreDictionary;
import net.shadowfacts.tutorial.TutorialMod;
public class ItemCorn extends ItemFood implements ItemModelProvider, ItemOreDict {
public ItemCorn() {
super(3, 0.6f, false);
setUnlocalizedName("corn");
setRegistryName("corn");
setCreativeTab(TutorialMod.creativeTab);
}
@Override
public void registerItemModel(Item item) {
TutorialMod.proxy.registerItemRenderer(this, 0, "corn");
}
@Override
public void initOreDict() {
OreDictionary.registerOre("cropCorn", this);
}
}
In the ModItems
class, we’ll also need to change the corn
field.
1
2
3
4
5
6
7
8
9
10
11
// ...
public class ModItems {
// ...
public static ItemCorn corn;
// ...
public static void init() {
// ...
corn = register(new ItemCorn());
// ...
}
}
We simply need to change the corn
field to by of item ItemCorn
and the registration call to instantiate ItemCorn
instead of ItemOre
.
Now we’ve got an edible corn item!