This is the thirteenth lesson in a series introducing 10-year-olds to programming through Minecraft. Learn more here.
This is another suggestion from my class :)
Goal
To create a chainsaw item that can cut wood really quickly.
Relevant Classes
Item definitions extend net.minecraft.item.Item
. You may recall that instances of items are created using ItemStack
. Kinda sounds like classes and objects? :)
Creating A New Item
Add a new class named Chainsaw
with a Superclass of net.minecraft.item.ItemAxe
. Check "constructors from superclass". Update the constructor to look like this (we'll worry about the last line a bit later)
public class Chainsaw extends ItemAxe {
public Chainsaw(int id, EnumToolMaterial material) {
super(id, material);
setUnlocalizedName("chainsaw");
func_111206_d("chainsawmod:chainsaw");
}
}
Let's say we want our chainsaw to be a faster version of an emerald axe. One way to do this is to edit EnumToolMaterial
found in net.minecraft.item
and add a new value like this:
MODERN(3, 2000, 200.0F, 3.0F, 10)
... but that would make life more difficult for us later on. Luckily, there is a shortcut we can use by adding these lines to our main mod file.
import net.minecraftforge.common.EnumHelper;
public static EnumToolMaterial ModernMaterial =
EnumHelper.addToolMaterial(
"MODERN", 3, 5000, 200.0F, 3.0F, 10);
You can see more details about each value in the source code; the important one is the third number, efficiencyOnProperMaterial
. An emerald axe has a value of 8.0 (a gold axe has a value of 12.0, but it doesn't last as long). Ours has a value of 200! We can chop down trees pretty much instantaneously with our chainsaw...
Assigning an Icon
You'll notice that all the tools in Minecraft have a small image, or icon, that is displayed in your inventory. I've found one we can use for our chainsaw at http://findicons.com/icon/53591/chainsaw. Luckily they already have 16x16 icons with transparent backgrounds, otherwise we'd have to do some image editing in Paint.NET.
In our mod file, there is a line that looks like this
@Mod(modid="ChainsawMod", name="...", version="...")
We need to create a directory with the same name as our modid
(with all lowercase letters) in {workspace}forgemcpsrcminecraftassets
. Under that directory, we then create texturesitems
and place our new PNG file there. For example, I have
D:\eclipse-workspace
\forge
\mcp
\src
\minecraft
\assets
\chainsawmod
\textures
\items
\chainsaw.png
Now, remember that weird-looking third line in the constructor of our new item?
func_111206_d("chainsawmod:chainsaw");
They haven't gotten around to naming that (yet) - it should be called setItemIcon
or something similar, but what it does is tell Minecraft that the icon for our item is located under the assets
directory in chainsawmod
and that the filename is chainsaw.png
. It assumes there's a textures
directory as well.
Adding the Item to the Game
In our main mod class, we can now create an instance of the Chainsaw
public static Chainsaw chainsaw =
new Chainsaw(5000, ModernMaterial);
and then inside load
we can register it with the game
GameRegistry.registerItem(chainsaw, "Chainsaw");
LanguageRegistry.addName(chainsaw, "Chainsaw");
If you wanted to create a crafting recipe that outputs this item you could, but I just cheated and added it to the ConnectionHandler
we created earlier. Here's what I see :)
Note: if you're using eclipse, you also need to right-click on src
, Create > New Folder, Advanced, Link, and choose src/minecraft
from the path above otherwise you won't see the chainsaw icon.
Comments