"> Foro - [DMForge] III.- Añadir un bloque. Registro y modelado en Desarrollo de Mods - Page 1 of 1
Abril 19, 2024, 01:38:43 pm
Visitante


Autor Tema:  [DMForge] III.- Añadir un bloque. Registro y modelado  (Leído 4864 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Abril 09, 2017, 03:16:00 pm

Alfomega




  • Desconectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    Ingeniero informático
  • Actividad

  • 0%
  • Logros

Más información

Tras haber creado la clase genérica para nuestros bloques ahora os voy a enseñar a añadir un nuevo bloque a la clase base, registrarlo en el Forge y crear los tres .json necesarios.
Antes de empezar:
Habrá que crear una textura en PNG para las caras del bloque y meterla dentro de la carpeta textures/blocks. En este caso usaremos la misma para todas las caras.

Crear el bloque
Crear
Lo primero es añadir un nuevo atributo a la clase base. Normalmente se hace debajo de los que ya habíamos añadido (los que establecen el id del mod, la versión, etc).
El atributo ha de ser público, estático, final y de tipo Block.
Recomendación: Para facilitar la visualización, es recomendable poner barras de comentario que separen los distintos tipos de elementos, como en este caso, los materiales.

Inicializar
El siguiente paso es inicializarlo con nuestra clase GenericBlock que acabamos de crear.
Para ello, creamos un grupo static e inicializamos nuestro nuevo bloque con uno de los constructores que tengamos en la clase GenericBlock. En mi caso he usado uno al que solo tengo que pasarle el material, el nombre del bloque, la dureza y la resistencia a las explosiones, ya que el sonido, la etiqueta de creativo y la luz las establece el propio constructor.

Establecer la herramienta (opcional)
El último paso antes de registrar el bloque es establecer la herramienta y el nivel de la misma (madera, piedra, hierro o diamante) necesario para poder recolectar dicho bloque.
Para ello creamos un nuevo método dentro de la clase base donde establecer esto.
El primer parámetro del método es el tipo de herramienta. Los tipos básicos son, pico = "pickaxe", hacha = "axe", pala = "spade", espada = "sword" y azada = "hoe".
El segundo parámetro es el nivel de herramienta necesario para que de algo al romperlo. Los niveles básicos son, 0 = madera u oro, 1 = piedra, 2 = hierro y 3 = diamante.
Ya que no se necesita para nada más es recomendable establecerlo como privado y ponerle un nombre significativo.
Una vez tenemos creado el método hay que decirle al Forge que lo tenga en cuenta y para ello tenemos que llamarlo en el método preInit.

Registrar
Tras esto, llega el paso más importante, registrar el bloque, decirle al Forge y al Minecraft que añada el bloque. Sin esto es como si no hubiéramos hecho nada.
Para ello creamos un nuevo método en la clase base que se encargará de registrarlos todos:
Dado que creamos un método en la clase GenericBlock que se encarga de ello, solo tenemos que llamarlo y para ello es necesario hacer un cast de nuestro atributo que es tipo Block a GenericBlock, de ahí los paréntesis.
Nuevamente, añadimos al preInit este método para que se inicie:
Más adeltante os enseñaré a crear un método que registre de forma automática los bloques para que no tengamos que hacerlo nosotros.
Importante: El registro debe ser llamado después de establecer todas las propiedades del bloque, por lo tanto, el setHarvestLevel() debe ser llamado antes del registro.

Renderizado en el inventario
El último paso, antes de pasar a las texturas, es decirle al Forge que el bloque se va a ver en el inventario. Si, parece absurdo que haya que decírselo, pero es así, sin este método el bloque solo se verá cuando está colocado en el mundo y cuando está tirado en el suelo, en la mano o en el inventario no se verá.
Para ello creamos un nuevo método para que se encargue de ello:
La primera línea es para guardar en una variable el renderizador del Minecraft y no tener que volver a escribir todo cada vez que añadimos un bloque. Podéis ponerlo tal cual.
La siguiente es la propia orden, estamos diciendo que registre el bloque (bauxita), con metadata 0 y que su textura del inventario es la que le pasamos.
Como véis, al tener el nombre accesible desde la clase GenericBlock, no tenemos que ponerlo a mano. Hay que tener en cuenta que hay que anteponerle el id del mod y ":" para que el Minecraft vaya a la carpeta de nuestro mod y no a la suya propia.
Importante: esto solo funciona si el bloque no tiene sub-bloques como pudiera ser la lana o la madera que son independientes uno del otro. Para este tipo de bloques ya veremos más adelante lo que hay que hacer, ya que es mucho más largo.

Una vez creado este método hay que llamarlo en nuestro método init de la clase base, pero solo desde el lado cliente:

Modelos
Una vez tenemos todo el código necesario creado, toca pelearnos con las texturas para que el bloque se vea
Blockstate
Los archivos blockstate le indican al Minecraft que modelo (archivo .json) utilizar para cada metadata/estado del mismo. Por ejemplo, en los cultivos le dirá que si está recién plantado use un modelo con una textura en concreto, si ha crecido un poco, otro modelo con otra textura, etc.
Lo primero es crear el archivo .json dentro de la carpeta blockstates con el mismo nombre que el bloque, en nuestro ejemplo, bauxite.
Ya que el bloque no tiene nada especial, este archivo es muy sencillo:
Como podéis ver, antes del nombre del modelo hay que anteponer nuestro modid o intentará buscarlo en la carpeta del Minecraft y no en la nuestra.

Block
Lo siguiente es crear el .json dentro de la carpeta models/block para cuando el bloque está colocado en el mundo. Nuevamente, el archivo se llamará como el bloque.
Como no queremos nada especial, un simple cubo, solo tenemos que poner esto:
Parent es el modelo plantilla (genérico) que vamos a usar. En este caso usamos uno básico que ya viene en el Minecraft, el que es un cubo completo.
El all es la ruta a la textura que queremos darle a todas las caras. Nuevamente tenemos que anteponer el id del mod o irá a la carpeta del Minecraft.

Item
Por último creamos otro .json con el mismo nombre dentro de la carpeta models/item. Este será el que le diga al Minecraft como se ve el bloque cuando no está en el mundo, es decir, cuando esté tirado en el suelo, en la mano o en inventario.
Este es el más sencillo, ya que suele ser exáctamente igual para todos los bloques, solo cambia una línea:
En parent le indicamos el modelo a usar como forma, es decir, el que definimos antes para que parezca un cubo.
Lo demás es ajustes de giro, posición y tamaño para que se vea bien en la mano.

Y con esto, ya tenemos un bloque añadido al Minecraft.

Linkback: https://minecraftmin.net/index.php?topic=14559.0
« Última modificación: Abril 16, 2017, 06:28:21 pm por Alfomega »
https://i.imgur.com/cFX0ssZ.png



Respuesta #1 Enero 17, 2018, 12:33:20 pm

Ryuggha


  • *

  • Desconectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    MinecraftMin, el mejor foro Español!
  • Actividad

  • 0%
  • Logros

Más información

Hola.
Lo primero es lo primero. Gracias por este tema, es genial, ayudas muchísimo, no lo dejes.
Y ahora mi pregunta: Tengo un problema al renderizar el bloque, dentro del juego se muestra el bloque pero sin textura. La consola da este error:
[12:25:51] [Client thread/ERROR] [FML]: Model definition for location myfirstmod:gr8#normal not found
[12:25:51] [Client thread/ERROR] [FML]: Model definition for location myfirstmod:gr8#inventory not found




Respuesta #2 Enero 18, 2018, 12:06:52 pm

Alfomega




  • Desconectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    Ingeniero informático
  • Actividad

  • 0%
  • Logros

Más información

Básicamente te está diciendo que no encuentra los json.
Asegúrate de que el registro está bien hecho, es decir, que tienes bien puesto el modid, el normbre y que el método ha sido invocado en el método init.
A su vez, que el nombre de los 3 .json son iguales al nombre del bloque.





Share via delicious Share via digg Share via facebook Share via furl Share via linkedin Share via myspace Share via reddit Share via stumble Share via technorati Share via twitter

xx
[DMForge] V.- Añadir un objeto básico. Registro y modelado

Iniciado por Alfomega

0 Respuestas
2439 Vistas
Último mensaje Abril 16, 2017, 06:17:30 pm
por Alfomega
xx
[DMForge] VI.- Utilidades I. Registro y renderizado automático

Iniciado por Alfomega

0 Respuestas
2235 Vistas
Último mensaje Abril 16, 2017, 06:52:07 pm
por Alfomega
xx
[DMForge] X.- Añadir objetos a los cofres de las estructuras.

Iniciado por Alfomega

0 Respuestas
2738 Vistas
Último mensaje Enero 07, 2018, 02:54:49 pm
por Alfomega
xx
[DMForge] XI.- Bloque translúcido (GenericBlockTranslucent.java)

Iniciado por Alfomega

0 Respuestas
2185 Vistas
Último mensaje Mayo 07, 2017, 06:14:22 pm
por Alfomega