+0

Crear item con Fabric en Minecraft



Vamos a ver como añadir items nuevos en Minecraft desde nuestro mod.

Conceptos necesarios

Antes de empezar a crear nuestro item nuevo, necesitaremos aprender que es el registry, y como funcionan las IDs (o Identifiers) dentro del juego.

Registry

El registry, como dice el nombre, es un registro de todas las cosas que están dentro del juego, por ejemplo, el registry lleva una lista de los bloques, una lista de los ítems registrados, y un montón de cosas que están registradas tanto en el servidor como el cliente. Este es importante porque cuando queramos añadir nuestra propia modificación utilizaremos el registry para registrarlo correctamente.

Identifier

Si has utilizado herramientas técnicas de Minecraft alguna vez, ya estarás familiarizado con este tema. En Minecraft se diferencian e identifican diferentes objetos con lo que se llaman un Identifier.

Un Identifier no deja de ser un texto que apunta a ese objeto. Un identificador tiene dos partes, el namespace, y el path, los cuales están separados por dos puntos.

Por ejemplo, el bloque de madera en Minecraft se encuentra bajo el identifier minecraft:oak_planks.

Añadiendo un item

Ahora sí que sí podemos empezar a añadir nuestro ítem. El mod, durante todo este curso, lo voy a basar en el uranio, un material radioactivo el cual nos va a dar muchísimo juego. Vamos a añadir el uranio.

Para empezar, voy a crear una clase aparte llamada ModItems para tener ahí los ítems que vayamos creando a lo largo del curso.

Dentro de esta clase ModItems, para facilitarnos el trabajo en un futuro, vamos a crear un método estático privado para poder registrar nuestros ítems más fácilmente. Dentro de este método implementaremos obtener el registry y registrar un ítem en el registry de ítems y en el identifier asegurarnos de poner nuestro MODID.

private static Item registerItem(String itemId, Item item) {  
    return Registry.register(Registries.ITEM, new Identifier(CursoFabricMod.MODID, itemId), item);  
}

Te recomiendo que en tu clase principal del mod crees una variable estática final pública de tipo string llamada MODID donde guardes el id que le has dado tu mod en el archivo de fabric dentro de resources. Esto facilitará muchísimo en un futuro identificar tu mod.

Muy bien, con esto listo, ahora podemos pasar a registrar nuestro ítem. Como he dicho, primero voy a crear el ítem de uranio, con lo cual voy a crear una variable estática llamada ítem, llamando al método registerItem, pasando el id de uranio y, como último, el ítem. Para crear un ítem, instanciaremos la clase ítem y dentro le habremos de pasar los settings del ítem.

public static final Item URANIUM = registerItem("uranium", new Item(new Item.Settings()));

Ojo, a partir de la 1.20.4 hacia abajo, en vez de Item.Settings, para indicar los settings del item, lo haremos a través de la clase FabricItemSettings.

Si quisiéramos, a la clase Item.Settings, podemos pasarle configuración como el stack máximo del ítem, la durabilidad, etc.

Ahora mismo tenemos el primer paso hecho, que es declarar el ítem dentro del registry de Minecraft. Ahora hace falta añadir el nombre del ítem dentro del archivo de lenguaje, añadir la textura del ítem y añadir el modelo del ítem. Vamos a ver cómo se hace.

Nombre del item (y traducciones)

Para añadir el nombre del ítem y básicamente las traducciones de cualquier mensaje que tengamos en nuestro mod, nos iremos a la carpeta de resources y dentro tenemos la carpeta assets. Esta carpeta es la que se cargará cuando se inicie el mod. Aquí dentro es donde meteremos todas las texturas, todos los modelos, bueno, ya lo iremos viendo.

Para empezar, dentro de assets tenemos la carpeta con el ID de nuestro mod, y ahí dentro crearemos una carpeta lang y añadiremos un archivo json para el idioma que queremos añadir. En este caso añadiré el inglés con en_us.json.

Dentro de este archivo JSON, añadiremos los textos con tres partes. Primero, el tipo de objeto el cual le estamos añadiendo el texto, seguido del namespace, seguido del path. Estas tres partes han de estar separadas por puntos. Si os fijáis es parecido al Identifier.

{  
  "item.cursofabric.uranium": "Uranium"  
}

Texturas

Las texturas las añadiremos dentro de la carpeta de assets y dentro del IDE de nuestro mod en una carpeta llamada textures. Dentro de esta carpeta de textures vamos a separar los tipos de texturas dependiendo del tipo de objeto que es. En este caso como es un ítem meteremos la textura dentro de textures/item.

Link de la textura usada aquí

Modelo

Como último, hará falta añadir el modelo del ítem. Ahora mismo tenemos un ítem básico con una simple textura, pero más adelante podremos añadir ítems más complejos. Por ahora, vamos a ir a lo básico. Crearemos una carpeta models dentro de los assets de nuestro mod y vamos también a separarlos por el tipo de objeto que es. En este caso, como es un ítem, voy a crear la carpeta models y dentro item.

Dentro de esta carpeta que acabamos de crear, vamos a crear un archivo JSON para definir el modelo de nuestro ítem. Como es el uranio, voy a crear el archivo uranium.json.

{  
  "parent": "item/generated",  
  "textures": {  
    "layer0": "cursofabric:item/uranium"  
  }  
}

Si nos fijamos, estamos declarando que queremos heredar nuestra configuración desde un ítem generated y luego abajo le estamos indicando las texturas que la primera capa es la textura que hemos arrastrado dentro de la carpeta ítem de texturas.

Registrando los items

Como todo lo que hemos hecho hasta ahora en ModItems es estático, necesitaremos que el mod cargue la clase para poder registrar los ítems. Para ello lo que haremos es crear un método público, el cual enviará un mensaje para que así cuando se ejecute el mod podamos llamar a ese método público y se registren todos nuestros ítems.

public static void registerItems() {  
    CursoFabricMod.LOGGER.info("Registrando items...");  
}
@Override  
public void onInitialize() {  
    // ...
  
    ModItems.registerItems();  
}

Y ya estaría, ahora si entramos dentro del juego veremos que tenemos un nuevo ítem.

Item de Minecraft de Uranio añadido con un mod de Fabric

Item de Minecraft de Uranio añadido con un mod de Fabric