Los efectos de estado, o simplemente estados, son una condición que puede afectar a una entidad. Pueden ser positivos, negativos o neutrales en naturaleza. El juego base aplica estos efectos de varias maneras como comida, pociones, etc.
El comando /effect puede ser usado para aplicar efectos en una entidad.
Efectos de Estado Personalizados
En este tutorial añadiremos un nuevo efecto de estado personalizado llamado Tater, el cual te da un punto de experiencia por cada tick del juego.
Extiende StatusEffect
Vamos a crear una para nuestro efecto de estado personalizado extendiendo la clase StatusEffect, el cual es la clase base para todos los efectos.
java
public class TaterEffect extends MobEffect {
protected TaterEffect() {
// category: StatusEffectCategory - describes if the effect is helpful (BENEFICIAL), harmful (HARMFUL) or useless (NEUTRAL)
// color: int - Color is the color assigned to the effect (in RGB)
super(MobEffectCategory.BENEFICIAL, 0xe9b8b3);
}
// Called every tick to check if the effect can be applied or not
@Override
public boolean shouldApplyEffectTickThisTick(int duration, int amplifier) {
// In our case, we just make it return true so that it applies the effect every tick
return true;
}
// Called when the effect is applied.
@Override
public boolean applyEffectTick(ServerLevel world, LivingEntity entity, int amplifier) {
if (entity instanceof Player) {
((Player) entity).giveExperiencePoints(1 << amplifier); // Higher amplifier gives you experience faster
}
return super.applyEffectTick(world, entity, amplifier);
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Registrar tu Efecto Personalizado
Similar a la registración de bloques e items, usamos Registry.register para registrar nuestro efecto personalizado en el registro de STATUS_EFFECT. Esto se puede hacer en nuestro inicializador.
java
public class ExampleModEffects implements ModInitializer {
public static final Holder<MobEffect> TATER =
Registry.registerForHolder(BuiltInRegistries.MOB_EFFECT, ResourceLocation.fromNamespaceAndPath(ExampleMod.MOD_ID, "tater"), new TaterEffect());
@Override
public void onInitialize() {
// ...
}
}1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Traducciones y Texturas
Puedes asignar un nombre a tu efecto de estado y proveer una textura de ícono para que aparezca en la pantalla de inventario.
Textura
El ícono del efecto de estado es una imagen PNG de 18x18 pixeles. Coloca tu ícono personalizado en:
resources/assets/example-mod/textures/mob_effect/tater.png
Traducciones
Como cualquier otra traducción, puedes agregar una entrada con el formato de ID "effect.example-mod.<effect-identifier>": "Valor" al archivo de idioma.





