+0

Crear Efectos de Pocion en Minecraft con Fabric - Status Effects



Vamos a aprender a crear efectos de pociones en nuestro mod de fabric.

¿Cómo crear un efecto de poción?

Para crear un efecto de poción nuevo necesitaremos crear una clase que se encargue de ese efecto de poción y extender la clase StatusEffect.

Como ejemplo, crearé el efecto de poción radioactivo.

package dev.polv.cursofabric.statuseffects;  
  
import net.minecraft.entity.effect.StatusEffect;  
import net.minecraft.entity.effect.StatusEffectCategory;  
  
public class RadiationEffect extends StatusEffect {  
      
    protected RadiationEffect() {  
        super(StatusEffectCategory.HARMFUL, 0x00ff00);  
    }  
  
}

Ahora, para realizar una acción mientras el efecto dure, tenemos dos métodos, el canApplyUpdateEffect y el applyUpdateEffect.

  • canApplyUpdateEffect: Este método recibe dos argumentos, la duración y la potencia del efecto. Con este método podemos determinar si en ese tick la poción va a realizar una acción o no.

  • applyUpdateEffect: Si la función canApplyUpdateEffect devuelve cierto, este método correrá, lo que significa que se tendrá que aplicar el efecto.

@Override  
public boolean canApplyUpdateEffect(int duration, int amplifier) {  
    int i = 50 >> amplifier;  
    if (i > 0) {  
        return duration % i == 0;  
    } else {  
        return true;  
    }  
}  
  
@Override  
public boolean applyUpdateEffect(LivingEntity entity, int amplifier) {  
    entity.damage(ModDamageTypes.of(entity.getWorld(), ModDamageTypes.RADIATION_DAMAGE_TYPE), 0.3f);  
  
    return true;  
}

Registrar nuestro efecto

Muy bien, ahora tenemos el efecto creado. Ahora toca registrarlo. Para ello, crearemos una clase llamada ModEffects en la cual registraremos nuestro efecto.

Y como siempre crearemos una función de utilidad que nos ayudará a registrar el efecto y una función para registrarlos desde el ModInitializer.

package dev.polv.cursofabric.effects;  
  
import dev.polv.cursofabric.CursoFabric;  
import net.minecraft.entity.effect.StatusEffect;  
import net.minecraft.registry.Registries;  
import net.minecraft.registry.Registry;  
import net.minecraft.util.Identifier;  
  
public class ModEffects {  
      
    public static final RegistryEntry.Reference<StatusEffect> RADIATION_EFFECT = registerEffect("radiation", new RadiationEffect());  
  
private static RegistryEntry.Reference<StatusEffect> registerEffect(String name, StatusEffect statusEffect) {  
    return Registry.registerReference(Registries.STATUS_EFFECT, new Identifier(CursoFabric.MODID, name), statusEffect);  
}
      
    public static void registerEffects() {  
        CursoFabric.LOGGER.info("Registrando efectos...");  
    }  
      
}

Esta vez estamos usando el método de registry reference, el cual nos vuelve una referencia en vez del objeto en sí. nos será útil para crear los ítems de pociones.

ModEffects.registerEffects();

Y listo, ya tendríamos nuestro efecto registrado. Ahora solo quedaría añadir una textura y un nombre en las traducciones.

Textura y nombre

Para la textura he creado un pequeño icono 18x18 png el cual podemos usar. Este icono deberá ir dentro de nuestra carpeta assets/textures/mob_effect y ahí al archivo con el id de nuestro nombre.

Aquí tienes la textura

Luego, para la traducción nos iremos a nuestro archivo de lenguaje, en mi caso en_us.json y añadiremos la key como effect, id de nuestro mod, id del efecto.

{
  // ...
  "effect.cursofabric.radiation": "Radiation"
}

Y listo, ya tenemos nuestro efecto hecho en Minecraft.