Mob Effects

A MobEffect is what handles the specific logic on the entity it is on. For example, MobEffects#MOVEMENT_SPEED adds an attribute modifier that affects the movement speed while MobEffects#WITHER attacks the entity from a DamageSource whenever the mob effect is ready to be applied.

Creating a MobEffect

You can create a MobEffect using two methods. The first creates a regular MobEffect and applies the logic in some event method. The other method involves extending the MobEffect class and overriding specific methods when needed. This documentation will focus on the second method.

There are four methods that are important depending on the type of mob effect you are creating. In each scenario, you should take into account whether you should extend MobEffect or InstantenousMobEffect.

Here are the classes and methods to review:

Class Usage
MobEffect The basic mob effect class. Should be used if the mob effect happens over time.
InstantenousMobEffect An extended version of the mob effect class. Should be used if the mob effect happens only once and instantly.
Method Description
isDurationEffectTick Determines how fast a mob effect should call applyEffectTick while applied. This is overridden by InstantenousMobEffect to occur after one tick. If too fast, the server will not have enough time to execute the damage on the entity.
applyEffectTick Executes the logic on the entity when called.
isInstantenous Determines if the mob effect is instant. Returns true in InstantenousMobEffect.
applyInstantenousEffect Executes the logic on the entity when called. isInstantenous must return true for this to be called.

If you are only modifying an entity Attribute, then there is no need to extend the class. When constructing the mob effect instance, chain addAttributeModifier and select the specific attribute, it's unique id, the amount to affect by, and the operation to apply the amount with.

Mob Effects need to be registered.

MobEffectInstance

To allow greater customization, each mob effect is passed in as a MobEffectInstance which allows the user to specify additional information for what the mob effect should do.