minecraft
Creando un item básico con forja
Buscar..
Introducción
Crear un elemento simple con Forge es una de las primeras tareas que un aspirante a modder tendrá que aprender. La forma de hacerlo ha cambiado en las distintas versiones de Minecraft y probablemente se encuentre en una dificultad "moderada" de la versión 1.7.10 debido a la gran cantidad de errores fáciles de cometer, especialmente al hacer que se reproduzca correctamente.
Observaciones
Si algo sale mal y su elemento personalizado tiene una textura faltante (negro / púrpura) o un modelo (el cubo predeterminado que es demasiado grande cuando se mantiene), verifique el registro. Los problemas de este tipo casi siempre aparecerán en el registro, siempre que haya registrado correctamente las cosas.
Lo primero que aparecerá es la línea de "Exception loading model for variant..."
o similar, que le indica qué bloque o elemento no se cargó correctamente. Después de una docena de líneas que comiencen con at...
habrá otra línea comenzando Caused by...
Esta línea "Causada por" es la importante, le dirá qué archivo no se cargó correctamente y puede tener uno de varios errores, como:
- JSON con formato incorrecto (su archivo JSON no es válido y tiene un error tipográfico)
- Archivo no encontrado (el archivo que Minecraft está buscando no tiene el nombre correcto o no está en el lugar correcto)
- Falta la excepción de variante (su JSON Blockstate está incompleto)
¡Incluso puede obtener más de un error por un solo error! Si no sabe qué elemento es el problema, comente cada bloque y elemento que sepa que funciona, reduzca la lista de errores al bloque (o bloques) en cuestión. Tu debes hacer esto varias veces.
Además, una textura de mezcla se muestra de manera tan diferente como una simple lista de todos los recursos que faltan para un dominio determinado (ID de mod).
Clase de artículo
Esta parte no ha cambiado mucho en las versiones de Minecraft, aunque ha habido algunas mutaciones en las firmas del método exacto, así como en la jerarquía de clases. Un elemento básico (uno que no tiene funcionalidad, como un palo o un lingote: así es, ¡ambos son elementos de no hacer nada!)
public class CustomItem extends Item {
public CustomItem () {
super();
this.setMaxDamage(0);
this.setCreativeTab(CreativeTabs.MISC);
}
}
No hay mucho espacio para la personalización en este punto, a diferencia de los bloques. Todo lo que podemos hacer es cambiar si el elemento puede recibir daño (las herramientas lo usan) y en qué pestaña de creatividad existirá. Nombre y textura que manejaremos cuando registre el elemento en GameRegistry.
Sin embargo, esto es todo lo que se necesita para sostener, transportar, soltar, fabricar, fundir y utilizar el objeto. Algunos artículos en Minecraft (como los palos) ni siquiera tienen una clase única y simplemente usan un new Item()
. Podríamos hacer eso aquí, sin embargo, cualquier elemento con funcionalidad adicional necesitará una clase.
Modelo del artículo
Al igual que con los bloques, los artículos también necesitan modelos.
{
"parent": "item/generated",
"textures": {
"layer0": "example:items/basic"
}
}
Eso es prácticamente todo lo que se necesita para que funcione una vez que se registra el artículo. Lo único importante es que el nombre del archivo coincida con el nombre de registro utilizado para registrar el bloque y debe estar en minúsculas (se requiere que los nombres de los archivos de 1.11+ sean minúsculas, antes de eso solo se distingue entre mayúsculas y minúsculas).
Tenga en cuenta que "layer0" es la única textura necesaria y es muy poco probable que se especifique alguna otra textura (aunque algunos elementos como pociones y armaduras de cuero tienen una "layer1"). Todos los nombres se definen por item/builtin
(el modelo primario superior interno para los elementos) a diferencia de los bloques.
Asigne un nombre al archivo JSON modelo my_item.json
(que coincida con el nombre de registro que le daremos más adelante) y guárdelo en src\main\resources\assets\example\models\item\
(donde example
es el ID de mod especificado en el @Mod anotación de tu clase de mod principal).
Además, cree una textura para su elemento, basic.png
nombre basic.png
y basic.png
en src\main\resources\assets\example\textures\items\
El modelo del elemento aquí utiliza un elemento primario del elemento / generado, lo que significa que se usará la textura suministrada única (como con la mayoría de los elementos no bloqueados) y se mantendrá en la mano del jugador en una orientación predeterminada. También hay un elemento / dispositivo portátil que especifica diferentes orientaciones de visualización (para herramientas). Los artículos también pueden proporcionar su propio atributo de "visualización", anulando los del padre, pero no es necesario en el 99.9% de los usos.
Registro de artículos
El registro de elementos se realiza desde su clase de mod principal, o un método de clase ModItems invocado desde la clase de mod principal durante preInit.
Item item = new CustomItem();
string registryname = "my_item";
item.setRegistryName(registryname);
item.setUnlocalizedName(item.getRegistryName().toString());
GameRegistry.register(item);
Hay una razón importante para usar item.setUnlocalizedName(item.getRegistryName().toString());
¡también! Asegura que el nombre no localizado de tu artículo contenga la ID del mod para evitar conflictos de archivos de idioma entre los mods.
Ahora el elemento también necesita un modelo, y aquí es donde las cosas se pusieron difíciles después de la versión 1.7.10, que solo implicaba decirle a Minecraft el nombre de la textura que se cargaría y podría especificarse en el constructor del elemento.
final ModelResourceLocation fullModelLocation = new ModelResourceLocation(item.getRegistryName().toString(), "inventory");
ModelBakery.registerItemVariants(item, fullModelLocation);
ModelLoader.setCustomMeshDefinition(item, new ItemMeshDefinition()
{
public ModelResourceLocation getModelLocation(ItemStack stack)
{
return fullModelLocation;
}
});
Tenga en cuenta que esta sección debe ubicarse solo en el lado del cliente (es decir, el proxy del cliente) ya que muchas de las clases a las que se hace referencia no existen en el servidor dedicado.
El registro de elementos con variantes, p. Ej. Saplings, se debe hacer de una manera diferente, utilizando ModelLoader.setCustomModelResourceLocation(item, metadata, resourceLocation)
aunque nos permite usar un archivo Blockstate para especificar nuestras variantes (lo cual es muy preferido a la alternativa). Nuestro artículo no usa variantes, así que hemos terminado.