Efeitos de Estado 1.20.4
Aprenda a adicionar efeitos de estado personalizados.
WARNING
This page is written for version 1.20.4. Documentation for older versions may be incomplete.
Efeitos de estado, conhecidos como efeitos, são condições que podem afetar uma entidade. Eles podem ser de natureza positiva, negativa ou neutra. O jogo base aplica esses efeitos de vários modos, como comidas, poções, etc.
O comando /effect pode ser usado para aplicar efeitos numa entidade.
Efeitos Personalizados
Neste tutorial adicionaremos um novo efeito personalizado chamado Tater, que lhe dará um ponto de experiência a cada tick do jogo.
Estenda MobEffect
Vamos criar uma classe de efeito personalizado estendendo MobEffect, sendo uma classe base para todos os efeitos.
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 level, LivingEntity entity, int amplifier) {
if (entity instanceof Player) {
((Player) entity).giveExperiencePoints(1 << amplifier); // Higher amplifier gives you experience faster
}
return super.applyEffectTick(level, 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
Registrando seu Efeito Personalizado
Similar a registração de blocos e itens, usamos Registry.register para registrar nosso efeito ao registro de MOB_EFFECT. Isso pode ser feito no nosso inicializador.
java
public class ExampleModEffects implements ModInitializer {
public static final Holder<MobEffect> TATER =
Registry.registerForHolder(BuiltInRegistries.MOB_EFFECT, Identifier.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
Traduções e Texturas
Você pode atribuir um nome ao seu efeito e providenciar uma textura de ícone que aparecerá na tela de inventário do jogador.
Textura
O ícone de textura é um PNG de 18x18. Coloque seu ícone personalizado em:
resources/assets/example-mod/textures/mob_effect/tater.png
Traduções
Assim como outras traduções, você pode adicionar uma entrada com o formato de ID "effect.example-mod.<effect-identifier>": "Value" ao arquivo de idioma.
json
{
"effect.example-mod.tater": "Tater"
}1
2
3
2
3
Testando
Uso o comando /effect give @p example-mod:tater para dar ao jogador nosso efeito Tater. Use /effect clear @p example-mod:tater para remover o efeito.
INFO
Para criar uma poção que utiliza este efeito, consulte o guia de Poções.





