+0

Bloques en Fabric



Vamos a aprender como crear bloques nuevos en Minecraft con Fabric.

Registrar un bloque

Para crear un bloque en Minecraft, vamos a empezar por crear una clase que la vamos a llamar ModBlocks, para tener el proyecto más organizado.

Dentro de esta clase haremos lo que ya llevamos haciendo dos episodios y es crear un método privado estático que nos ayudará con el registro de bloques y un método público para registrar los bloques.

private static Block registerBlock(String name, Block block) {  
    return Registry.register(Registries.BLOCK, new Identifier(CursoFabricMod.MODID, name), block);  
}  
  
public static void registerBlocks() {  
    CursoFabricMod.LOGGER.info("Registrando bloques...");  
}

Tranquilo que no es tan fácil, piensa que hemos de registrar el bloque y el ítem del bloque, con lo cual hemos de modificar nuestro método registerBlock para aceptar registrar un ítem.

private static Pair<Block, Item> registerBlock(String name, Block block) {  
    return new Pair<>(  
            Registry.register(Registries.BLOCK, new Identifier(CursoFabricMod.MODID, name), block),  
            Registry.register(Registries.ITEM, new Identifier(CursoFabricMod.MODID, name), new BlockItem(block, new Item.Settings()))  
    );  
}

El Pair es una clase de utilidad que trae Minecraft, que nos permite devolver dos instancias de dos objetos diferentes o iguales con una simple variable.

Ahora ya sí que sí, podemos declarar nuestro bloque. En este caso, como estamos basando en una temática radioactiva y de uranio, voy a crear el bloque de uranio.

public static final Pair<Block, Item> URANIUM_BLOCK = registerBlock("uranium_block", new Block(AbstractBlock.Settings.copy(Blocks.IRON_BLOCK)));

Si te encuentras en la 1.20.4 y hacia abajo, habrás de usar la clase FabricBlockSettings en vez de Block.Settings.

En las opciones del bloque podemos pasarle diferentes cosas como la dureza. En este caso, como es un bloque de metal o duro, voy a copiar las variables del bloque de hierro y así no he de configurar tanta cosa.

Si ahora registramos los bloques e iniciamos el juego, veremos que el bloque existe pero se ve negro y morado.

@Override  
public void onInitialize() {  
    // ...
    
    ModBlocks.registerBlocks();  
}

¿Cómo solucionamos esto?

Añadir texturas a un bloque

Para que nuestro bloque tenga texturas y tenemos cuatro archivos:

  • La declaración del blockstate
  • El modelo del bloque (blockmodel)
  • El modelo del item del bloque (itemmodel)
  • La textura del bloque

Vamos a ir paso por paso viendo dónde colocar cada archivo y qué poner dentro.

Block State

El block state es básicamente el estado del bloque. Nuestro bloque puede tener diferentes estados, lo que significa que puede mostrarse de diferentes maneras, como diferentes texturas, etc. En este caso, nuestro bloque es un simple bloque sin estados, con lo cual utilizaremos un archivo básico, el cual dirá que no tiene estados.

Este archivo lo debemos de colocar en la carpeta assets de nuestro mod, dentro de la carpeta block states y poniéndole el path del bloque .json. En este caso es uranium_block.json.

{
  "variants": {
	"": { "model": "cursofabric:block/uranium_block" }
  }
}

Modelo del bloque

Un bloque puede tener un modelo complejo, el cual sea 3D y se puede ver diferente desde diferentes partes. Nosotros vamos a complicar. Vamos a usar una única textura para las 6 caras del bloque. Con lo cual declararemos un modelo de bloque simple.

Este lo pondremos dentro de la carpeta models y dentro de la carpeta block. Y el archivo se tendrá que llamar el ID de nuestro bloque ".json". En este caso sería uranium_block.json.

{
  "parent": "block/cube_all",
  "textures": {
	"all": "cursofabric:block/uranium_block"
  }
}

Modelo del ítem

Para declarar el modelo del ítem ya nos lo conocemos. Como queremos que el ítem se parezca al bloque, usaremos también un modelo base y ya está. Esto lo tenemos que meter dentro de la carpeta Models, a la carpeta Items y ahí con el id del bloque ".json".

{
  "parent": "cursofabric:block/uranium_block"
}

Textura

La textura la tenemos que añadir dentro de la carpeta Textures, dentro de una carpeta Block y ahí dentro con el nombre del ID del bloque.

Click aquí para la textura

Traducción

Tendremos que añadir el nombre del bloque dentro de nuestro archivo lang.

{  
  // ...
 
  "block.cursofabric.uranium_block": "Block of Uranium"  
}

Comprobar bloque

Si hemos seguido todos los pasos correctamente y entramos dentro del juego, veremos como ahora el bloque si que tiene textura, el ítem se ve correctamente en la mano y bueno, que está todo correcto.