Эффекты мобов 26.1.2
Узнайте, как добавлять эффекты для мобов.
Эффекты мобов, также известные как статусные эффекты (status effects) или просто эффекты (effects), представляют собой состояние, которое может влиять на сущность. Они могут сказываться положительно, отрицательно или нейтрально на сущности. В обычном случае в игре эти эффекты применяются несколькими способами, такими как поедание еды, распитие зелий и так далее.
Можно использовать команду /effect для применения эффектов к сущности.
Пользовательские эффекты мобов
В этом руководстве мы добавим новый эффект под названием Tater, который даёт игроку одно очко опыта каждый игровой такт.
Расширение MobEffect
Давайте создадим класс нашего эффекта, который будет наследовать основной класс всех эффектов — MobEffect.
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
Регистрация своего эффекта
Схожим с регистрацией блоков и предметов образом, мы используем Registry.register, чтобы зарегистрировать наш эффект в реестре MOB_EFFECT. Это можно сделать в нашем инициализаторе.
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
Текстура
Иконка эффекта представляет собой PNG-файл размером 18×18 пикселей. Поместите свою иконку в папку:
text
resources/assets/example-mod/textures/mob_effect/tater.pngПереводы
Как и любой другой перевод, вы можете добавить запись с ID формата "effect.example-mod.effect-identifier": "Значение" в языковой файл.
json
{
"effect.example-mod.tater": "Tater"
}1
2
3
2
3
Применение эффекта
Стоит взглянуть на то, как вы обычно применяете эффект к объекту.
TIP
Для быстрой проверки, возможно, будет лучше использовать упомянутую ранее команду /effect:
mcfunction
effect give @p example-mod:tater1
Чтобы применить эффект внутри, вам нужно использовать метод LivingEntity#addEffect, который принимает MobEffectInstance и возвращает логическое значение, указывающее, был ли эффект успешно применен.
Code snippet path not found: /home/runner/work/fabric-docs/fabric-docs/reference/latest/src/main/java/com/example/docs/ReferenceMethods.java1
| Аргумент | Тип | Описание |
|---|---|---|
effect | Holder<MobEffect> | Контейнер, представляющий эффект. |
duration | int | Продолжительность эффекта в тиках; не секундах |
amplifier | int | Усилитель соответствует уровню эффекта. Это не соответствует уровню эффекта, а скорее добавляется сверху. Следовательно, усилитель на уровне 4 => уровень 5 |
ambient | boolean | Это очень сложный вопрос. Это в основном указывает на то, что эффект был добавлен окружающей средой (например, Маяком) и не имеет прямой причины. Если установлено значение true, то на экране появится значок эффекта с аквамариновым наложением. |
particles | boolean | Показывать ли частицы. |
icon | boolean | Отображать ли значок эффекта в HUD. Эффект будет отображаться в инвентаре независимо от этого флага. |
INFO
INFO
Чтобы узнать, как создать зелье, накладывающее этот эффект, ознакомьтесь с руководством по зельям.







