Buscar..


Introducción

Crear un bloque simple y decorativo 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 encuentra en una dificultad "moderada" de la versión 1.7.10 debido a la gran cantidad de errores fáciles de cometer.

Observaciones

Si algo sale mal y su bloque personalizado (ya sea cuando se coloca o mantiene) tiene una textura que falta (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é bloque 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).

La clase de bloque

Primero necesitamos una clase que represente el bloque.

public class CustomBlock extends Block {

    public CustomBlock () {
        super(Material.ROCK);
        setHardness(1.0f);
        setHarvestLevel("pickaxe", 0);
        setResistance(1.0f);
        setCreativeTab(CreativeTabs.DECORATIONS);
        this.setSoundType(SoundType.STONE);
    }
}

Incluso aquí hay varias modificaciones disponibles: material (que gobierna algunas propiedades, como poder ser empujado por pistones y si se puede romper a mano), dureza (cuánto tarda en romperse), nivel de cosecha (herramienta y herramienta adecuadas) material: en este caso piqueta de madera), resistencia (frente a explosiones), la pestaña que se muestra en el menú creativo y qué sonido de paso tiene.

Aquí es donde deberá ir cualquier bloque de funcionalidad elegante, pero por ahora estamos haciendo un bloque que se ve bien, así que hemos terminado.

El modelo de bloques JSON

Luego debemos decirle a Minecraft cómo queremos que se vea nuestro bloque.

{
    "parent": "block/cube_all",
    "textures": {
        "all": "example:blocks/decorative"
    }
}

Eso es prácticamente todo lo que se necesita para que funcione una vez que se registra el bloqueo. Lo único importante es que el nombre del archivo coincide con el nombre de registro utilizado para registrar el bloque y debe estar en minúsculas (1.11+ nombres de los archivos deben estar en minúsculas, antes de que se acaba de mayúsculas y minúsculas).

Asigne un nombre al archivo JSON modelo my_block.json (que coincida con el nombre de registro que le daremos más adelante) y guárdelo en src\main\resources\assets\example\models\block\ (donde example es el ID de mod especificado en el @Mod anotación de tu clase de mod principal).

El modelo de bloque aquí utiliza un padre de block / cube_all, lo que significa que la textura suministrada única se usará en todas las caras. También hay otros modelos predeterminados, como:

  • Bloque / cubo (las seis caras asignadas independientemente)
  • block / cube_bottom_top (caras superior e inferior independientes de los lados)
  • bloque / orientable (bloque orientado direccional, por ejemplo, horno)
  • bloque / cruz (flores, hierba alta)
  • bloque / cosecha (trigo, zanahorias)

Tenga en cuenta que cada modelo especifica las texturas que utiliza mediante un ID de nombre (por ejemplo, "all" o "top" ). Mire el modelo principal para determinar cuáles son esos nombres si no está seguro. Texturas incorrectamente especificadas pueden llevar a problemas de textura faltantes que no reportan errores .

También es posible crear un modelo totalmente personalizado o crear un modelo primario personalizado. Pero por ahora, esto será suficiente.

No olvide crear una textura, asígnele un nombre decorative.png (ya que eso es lo que especificó el archivo JSON) y guárdelo en src\main\resources\assets\example\textures\blocks\

Bloquear registro

El registro de bloques se realiza desde su clase de mod principal, o un método de clase ModBlocks invocado desde la clase de mod principal durante preInit.

Block myBlock = new CustomBlock();
string registryname = "my_block";
block.setRegistryName(registryname);
block.setUnlocalizedName(block.getRegistryName().toString());
GameRegistry.register(block);

Hay una razón importante para usar block.setUnlocalizedName(block.getRegistryName().toString()); ¡también! Asegura que sus nombres no localizados de bloque (y elemento) contengan el ID de mod para evitar conflictos de archivos de idioma entre los mods.

¿Oh, también quieres una versión del artículo para que pueda existir en tu inventario? Eso se crea por separado el post 1.7.10 y se hace así:

ItemBlock ib = new ItemBlock(block);
ib.setRegistryName(registryname);
GameRegistry.register(ib);

Observe que establecemos el nombre de registro del ItemBlock en la misma cadena que nuestro bloque. Así es como Forja y combina bloques con su contraparte de ItemBlock y viceversa.

¡Pero espera hay mas!

Su bloque puede tener un formulario de elemento , ¡pero ese elemento aún no tiene un modelo o textura! Los modelos se registran automáticamente para bloques, pero no artículos. Esto solo se puede llamar desde el Proxy del cliente y no cubre bloques con variantes (como lana u hojas).

ModelLoader.setCustomModelResourceLocation(
    ib , 0, new ModelResourceLocation(ib.getRegistryName(),"normal"));

En general, no necesitará un JSON de modelo de artículo, ya que Forge y vainilla volverán a caer en el modelo de bloque, sin embargo, este no es siempre el caso. Si encuentra que necesita un JSON modelo de artículo, simplemente páselo a su bloque JSON y guárdelo en src\main\resources\assets\example\models\item\ con el mismo nombre de archivo que el nombre de registro del bloque.

{
    "parent": "example:block/my_block"
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow