Skip to content

Эффекты состояния

Эффекты состояния, также известные как просто эффекты, представляют собой состояние, которое может воздействовать на сущность. Они могут сказываться положительно, отрицательно или нейтрально на сущности. В обычном случае в игре эти эффекты применяются несколькими способами, такими как поедание еды, распитие зелий и так далее.

Можно использовать команду /effect для применения эффектов к сущности.

Свои эффекты состояния

В этом руководстве мы добавим новый эффект под названием Tater, который даёт игроку одно очко опыта каждый игровой такт.

Расширение StatusEffect

Давайте создадим класс нашего эффекта, расширив StatusEffect, который является базовым классом для всех эффектов.

java
public class TaterEffect extends StatusEffect {
	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(StatusEffectCategory.BENEFICIAL, 0xe9b8b3);
	}

	// Called every tick to check if the effect can be applied or not
	@Override
	public boolean canApplyUpdateEffect(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 void applyUpdateEffect(LivingEntity entity, int amplifier) {
		if (entity instanceof PlayerEntity) {
			((PlayerEntity) entity).addExperience(1 << amplifier); // Higher amplifier gives you experience faster
		}
	}
}

Регистрация нашего эффекта

Схожим с регистрацией блоков и предметов образом, мы используем Registry.register, чтобы зарегистрировать наш эффект в реестре STATUS_EFFECT. Это можно сделать в нашем инициализаторе.

java
public class FabricDocsReferenceEffects implements ModInitializer {
	public static final StatusEffect TATER_EFFECT = new TaterEffect();

	@Override
	public void onInitialize() {
		Registry.register(Registries.STATUS_EFFECT, new Identifier("fabric-docs-reference", "tater"), TATER_EFFECT);
	}
}

Переводы и текстуры

Вы можете назначить имя вашему эффекту состояния и дать ей иконку, которая будет отображаться в инвентаре игрока.

Текстура

Иконка эффекта состояния представляет собой PNG-файл размером 18×18 пикселей. Поместите свою иконку в папку:

resources/assets/fabric-docs-reference/textures/mob_effect/tater.png

Эффект в инвентаре игрока

Переводы

Как и с любыми другими переводами, вы можете добавить запись формата «effect.<mod-id>.<effect-identifier>»: «Значение» в языковой файл.

json
{
  "effect.fabric-docs-reference.tater": "Tater"
}

Тестирование

Используйте команду /effect give @p fabric-docs-reference:tater, чтобы дать игроку наш эффект Tater. Используйте команду /effect clear @p fabric-docs-reference:tater, чтобы удалить эффект.

INFO

Чтобы узнать, как создать зелье, накладывающее этот эффект, ознакомьтесь с руководством по зельям.