+0

Crear y modificar Tags de Minecraft



Vamos a ver qué es un tag en Minecraft y cómo modificarlos desde nuestro mod de Fabric.

¿Cómo modificar tags de Minecraft?

Vamos a empezar por aprender cómo modificar tags de Minecraft. Esto es muy útil porque, por ejemplo, el bloque que hemos creado en teoría debe ser roto por un pico. Pero como no tiene el tag de ser roto por un bloque, no aparece.

Esto lo podemos solucionar gracias al Fabric Data Gen de Tags.

Vamos a empezar por crear una clase que se llama DatagenBlockTagProvider que extenderá FabricTagProvider.BlockTagProvider. Hay diferentes TagProviders para cada tipo de objeto al que se le puede aplicar un tag.

package dev.polv.cursofabric.datagen;  
  
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;  
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;  
import net.minecraft.registry.RegistryWrapper;  
  
import java.util.concurrent.CompletableFuture;  
  
public class DatagenBlockTagProvider extends FabricTagProvider.BlockTagProvider {  
      
    public DatagenBlockTagProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registriesFuture) {  
        super(output, registriesFuture);  
    }  
  
    @Override  
    protected void configure(RegistryWrapper.WrapperLookup wrapperLookup) {  
          
    }  
      
}
pack.addProvider(DatagenBlockTagProvider::new);

También necesitaremos un datagen provider para items.

Si nos fijamos en la wiki de Minecraft, veremos que hemos de modificar el tag picaxe-mineable. Para ello, la clase ya tiene métodos los cuales nos ayudarán a añadir estos tags.

getOrCreateTagBuilder(BlockTags.PICKAXE_MINEABLE)  
        .add(ModBlocks.URANIUM_BLOCK.getLeft());

Aquí hay una lista de todos los tags que existen.

¿Como crear tags?

Para enseñar cómo crear un tag, vamos a hacer un tag el cual indicará si un bloque o un ítem es radiactivo.

Para empezar, necesitaremos crear una clase llamada ModTags, la cual pondremos dentro del package custom y añadiremos un poco de Boilerplate para facilitarnos el trabajo.

package dev.polv.cursofabric.custom;  
  
import dev.polv.cursofabric.CursoFabric;  
import net.minecraft.block.Block;  
import net.minecraft.item.Item;  
import net.minecraft.registry.RegistryKeys;  
import net.minecraft.registry.tag.TagKey;  
import net.minecraft.util.Identifier;  
  
public class ModTags {  
      
    public static class Blocks {  
          
          
        private static TagKey<Block> createTag(String tagId) {  
            return TagKey.of(RegistryKeys.BLOCK, new Identifier(CursoFabric.MODID, tagId));  
        }  
    }  
  
    public static class Items {  
  
  
        private static TagKey<Item> createTag(String tagId) {  
            return TagKey.of(RegistryKeys.ITEM, new Identifier(CursoFabric.MODID, tagId));  
        }  
    }  
      
}

Una vez tengamos este boilerplate hecho, podemos crear el tag para la radioactividad de los ítems y de los bloques.

public static final TagKey<Block> RADIOACTIVE_BLOCK_TAG = createTag("radioactive");
 
// ...
 
public static final TagKey<Item> RADIOACTIVE_ITEM_TAG = createTag("radioactive");

Ahora necesitaremos crear el tag desde nuestro TagsProvider que hemos creado anteriormente. Necesitaremos también crear un provider para los ítems, pero el proceso es muy similar.

getOrCreateTagBuilder(ModTags.Blocks.RADIOACTIVE_BLOCK_TAG)  
        .add(ModBlocks.URANIUM_BLOCK.getLeft());
getOrCreateTagBuilder(ModTags.Items.RADIOACTIVE_ITEM_TAG)  
        .add(ModBlocks.URANIUM_BLOCK.getRight())  
        .add(ModItems.URANIUM)  
        .add(ModItems.URANIUM_SWORD)  
        .add(ModItems.URANIUM_PICKAXE)  
        .add(ModItems.URANIUM_AXE)  
        .add(ModItems.URANIUM_SHOVEL)  
        .add(ModItems.URANIUM_HELMET);

Y listo, ahora si corremos la tarea de Fabric Data Gen veremos cómo se nos han generado los tags por nosotros. En un episodio futuro utilizaremos estos tags para realizar diferentes acciones con los bloques y con los ítems.