Vamos a aprender a crear herramientas en nuestro mod de Fabric.
¿Cómo crear herramientas?
Bueno, vamos a crear herramientas basadas en el uranio, que es básicamente el ítem principal de nuestro mod. Esto es muy sencillo de hacer, ya que en Minecraft cada herramienta tiene una clase de ítem específica. Pero igualmente habremos de tocar tema de modelos y tema de crafteos.
Creando un ToolMaterial
Antes de empezar a crear los ítems, necesitaremos crear un Tool Material, que es el que especifica las estadísticas de la herramienta, como su durabilidad, su velocidad de minado, etc.
Para ello, crearemos una clase dentro de ModItems que la llamaremos UraniumToolMaterial, la cual extenderá ToolMaterial.
package dev.polv.cursofabric.items;
import net.minecraft.block.Block;
import net.minecraft.item.ToolMaterial;
import net.minecraft.recipe.Ingredient;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.registry.tag.TagKey;
public class ModToolMaterial implements ToolMaterial {
public static final ModToolMaterial INSTANCE = new ModToolMaterial();
@Override
public int getDurability() {
return 600;
}
@Override
public float getMiningSpeedMultiplier() {
return 3;
}
@Override
public float getAttackDamage() {
return 4;
}
@Override
public TagKey<Block> getInverseTag() {
return BlockTags.INCORRECT_FOR_DIAMOND_TOOL;
}
@Override
public int getEnchantability() {
return 15;
}
@Override
public Ingredient getRepairIngredient() {
return Ingredient.ofItems(ModItems.URANIUM);
}
}
Si nos fijamos hay un GetInverseTag el cual devuelve un IncorrectForDiamondTool, esto lo veremos más adelante.
Creando los items
Ahora en nuestra clase ModItems crearemos todos los ítems con su respectiva herramienta.
public static final Item URANIUM_SWORD = registerItem("uranium_sword", new SwordItem(ModToolMaterial.INSTANCE, new Item.Settings()));
public static final Item URANIUM_PICKAXE = registerItem("uranium_pickaxe", new PickaxeItem(ModToolMaterial.INSTANCE, new Item.Settings()));
public static final Item URANIUM_AXE = registerItem("uranium_axe", new AxeItem(ModToolMaterial.INSTANCE, new Item.Settings()));
public static final Item URANIUM_SHOVEL = registerItem("uranium_shovel", new ShovelItem(ModToolMaterial.INSTANCE, new Item.Settings()));
public static final Item URANIUM_HOE = registerItem("uranium_hoe", new HoeItem(ModToolMaterial.INSTANCE, new Item.Settings()));
También quedará añadirlos en nuestro Item Group.
Añadiendo los modelos, crafteos y traducciones
Muy bien, con los ítems creados, ahora solo queda añadir las texturas, los modelos, los crafteos y las traducciones. Por suerte ya hemos creado nuestro fabric datagen y será muy sencillo realizar cada uno de estos pasos.
Para los modelos, nos vamos a asegurar que utilizamos el modelo de Handheld.
itemModelGenerator.register(ModItems.URANIUM_SWORD, Models.HANDHELD);
itemModelGenerator.register(ModItems.URANIUM_PICKAXE, Models.HANDHELD);
itemModelGenerator.register(ModItems.URANIUM_AXE, Models.HANDHELD);
itemModelGenerator.register(ModItems.URANIUM_SHOVEL, Models.HANDHELD);
itemModelGenerator.register(ModItems.URANIUM_HOE, Models.HANDHELD);
Para añadir los crafteros los hemos de añadir con un pattern. Yo no voy a crear todos ya que es bastante repetitivo, pero si te voy a dejar el de la espada para que veas como se hace.
ShapedRecipeJsonBuilder.create(RecipeCategory.TOOLS, ModItems.URANIUM_SWORD, 1)
.pattern(" U ")
.pattern(" U ")
.pattern(" S ")
.input('U', ModItems.URANIUM)
.input('S', Items.STICK)
.criterion(hasItem(ModItems.URANIUM), conditionsFromItem(ModItems.URANIUM))
.criterion(hasItem(Items.STICK), conditionsFromItem(Items.STICK))
.offerTo(exporter, new Identifier(getRecipeName(ModItems.URANIUM_SWORD)));
Luego, en las traducciones, añadiremos nuestros ítems.
{
//...
"item.cursofabric.uranium_sword": "Uranium Sword",
"item.cursofabric.uranium_pickaxe": "Uranium Pickaxe",
"item.cursofabric.uranium_axe": "Uranium Axe",
"item.cursofabric.uranium_shovel": "Uranium Shovel",
"item.cursofabric.uranium_hoe": "Uranium Hoe"
}
Y listo, ya tendríamos nuestras herramientas añadidas dentro del juego.