Mob Effects 1.21.8
Learn how to add custom mob effects.
WARNING
This page is written for version 1.21.8. Documentation for older versions may be incomplete.
Mob effects, also known as status effects or simply effects, are a condition that can affect an entity. They can be positive, negative or neutral in nature. The base game applies these effects in various ways such as food, potions etc.
The /effect command can be used to apply effects on an entity.
Custom Mob Effects
In this tutorial we'll add a new custom effect called Tater which gives you one experience point every game tick.
Extend MobEffect
Let's create a custom effect class by extending MobEffect, which is the base class for all effects.
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
Registering Your Custom Effect
Similar to block and item registration, we use Registry.register to register our custom effect into the MOB_EFFECT registry. This can be done in our initializer.
java
public class FabricDocsReferenceEffects implements ModInitializer {
public static final Holder<MobEffect> TATER =
Registry.registerForHolder(BuiltInRegistries.MOB_EFFECT, ResourceLocation.fromNamespaceAndPath(FabricDocsReference.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
Texture
The status effect icon is a 18x18 PNG which will appear in the player's inventory screen. Place your custom icon in:
resources/assets/fabric-docs-reference/textures/mob_effect/tater.pngTranslations
Like any other translation, you can add an entry with ID format "effect.mod-id.effect-identifier": "Value" to the language file.
json
{
"effect.fabric-docs-reference.tater": "Tater"
}1
2
3
2
3
Applying The Effect
It's worth taking a look at how you'd typically apply an effect to an entity.
TIP
For a quick test, it might be a better idea to use the previously mentioned /effect command:
mcfunction
effect give @p fabric-docs-reference:tater1
To apply an effect internally, you'd want to use the LivingEntity#addEffect method, which takes in a MobEffectInstance, and returns a boolean, specifying whether the effect was successfully applied.
java
var instance = new MobEffectInstance(FabricDocsReferenceEffects.TATER, 5 * 20, 0, false, true, true);
entity.addEffect(instance);1
2
2
| Argument | Type | Description |
|---|---|---|
effect | Holder<MobEffect> | A registry entry that represents the effect. |
duration | int | The duration of the effect in ticks; not seconds |
amplifier | int | The amplifier to the level of the effect. It doesn't correspond to the level of the effect, but is rather added on top. Hence, amplifier of 4 => level of 5 |
ambient | boolean | This is a tricky one. It basically specifies that the effect was added by the environment (e.g. a Beacon) and doesn't have a direct cause. If true, the icon of the effect in the HUD will appear with an aqua overlay. |
particles | boolean | Whether to show particles. |
icon | boolean | Whether to display an icon of the effect in the HUD. The effect will be displayed in the inventory regardless of this flag. |
INFO
To create a potion that uses this effect, please see the Potions guide.







