Timed Modifiers API — временные модификаторы атрибутов для Minecraft
Каждый, кто хоть раз писал моды для Minecraft, сталкивался с ситуацией, когда нужно временно изменить характеристику существа: ускорить игрока на несколько секунд, добавить броню на время действия эффекта или ослабить врага. Стандартные инструменты требуют ручного отслеживания времени и удаления модификатора, что приводит к багам и утечкам памяти. Timed Modifiers API решает эту проблему элегантно — вы просто добавляете модификатор с указанием длительности, и API сам позаботится о его удалении.
Это не самостоятельный мод с новым контентом, а библиотека-зависимость для разработчиков. Если вы игрок и встретили мод, который требует Timed Modifiers API, вам достаточно скачать Timed Modifiers API и положить его в папку mods. Мод работает на загрузчике Fabric и поддерживает актуальные версии Minecraft, включая 1.21.x. Разработчикам же стоит внимательно изучить документацию ниже — там много интересных возможностей.
Зачем нужен Timed Modifiers API
Представьте, что вы создаете заклинание ускорения, которое длится 5 секунд, или проклятие замедления, постепенно ослабевающее со временем. Без этого API вам пришлось бы писать таймеры, хранить ссылки на модификаторы и обрабатывать выход игрока из мира. Timed Modifiers API для Minecraft берет всю рутину на себя. Вы просто вызываете один метод — и модификатор появляется, живет положенный срок и исчезает без следа.
Основные возможности
- Добавление временных модификаторов с точной длительностью в тиках
- Плавное увеличение или уменьшение значения модификатора за время жизни
- Поддержка шести типов кривых easing: Sine, Quadratic, Cubic, Quartic, Quintic, Circle
- Ручное удаление, переопределение и очистка всех модификаторов
- Прямая установка значения атрибута в обход модификаторов
- Получение оставшейся длительности любого активного модификатора
Подключение для разработчиков
Чтобы использовать API в своем проекте, добавьте репозиторий Modrinth в build.gradle и укажите зависимость. Версия указывается в формате x.y.z+[версия_майнкрафта], например 1.0.0+1.21.7. После синхронизации Gradle все классы API станут доступны в вашем коде.
Добавление временного модификатора
Самый простой способ — вызвать статический метод TimedModifierAPI.addModifier(). Он принимает живое существо, тип атрибута, сам модификатор и длительность в тиках. Один тик равен 1/20 секунды, поэтому 60 тиков — это ровно 3 секунды. Пример ниже увеличивает скорость игрока на 60% на 3 секунды:
EntityAttributeModifier modifier = new EntityAttributeModifier(
Identifier.of("example", "speed"),
0.6,
EntityAttributeModifier.Operation.ADD_MULTIPLIED_TOTAL
);
TimedModifierAPI.addModifier(player, EntityAttributes.MOVEMENT_SPEED, modifier, 60);
Рост и затухание значений
Иногда нужно, чтобы эффект не был статичным, а плавно нарастал или спадал. Для этого у результата вызова addModifier() есть методы grow() и decay(). Метод grow() требует указать предел, а decay() может работать без него. Можно также задать продолжительность изменения — если она меньше времени жизни модификатора, значение сначала меняется, а потом остается на конечной отметке.
// Плавное затухание с +60% до 0% за 5 секунд TimedModifierAPI.addModifier(player, EntityAttributes.MOVEMENT_SPEED, modifier, 100).decay(); // Рост с +60% до +120% за 1.5 секунды, всего эффект длится 3 секунды TimedModifierAPI.addModifier(player, EntityAttributes.MOVEMENT_SPEED, modifier, 60).grow(1.2, 30);
Если вам нужна нелинейная динамика, добавьте вызов ease() с типом кривой. Например, SINE_OUT сделает затухание естественным, похожим на затухание звука. Комбинируйте методы в любом порядке: decay().ease(...), grow(...).ease(...) — API позволяет строить цепочки.
Управление модификаторами
Кроме автоматического удаления по таймеру, доступны методы ручного управления. removeModifier() удаляет конкретный модификатор по идентификатору, clearModifier() очищает все временные модификаторы для атрибута. Метод overrideModifier() заменяет существующий модификатор, предотвращая конфликты при повторном добавлении. Также можно получить оставшуюся длительность через getDuration().
Для тех, кто пишет сложные механики, есть возможность напрямую установить значение атрибута, игнорируя все модификаторы и базовое значение. Методы setValue() и unsetValue() работают на уровне экземпляра атрибута, а isValueSet() и getValueSet() позволяют проверить состояние. Правда, эти методы недоступны из контейнера — только через asApi().
Альтернативные способы вызова
Вместо многократных статических вызовов можно привести сущность к интерфейсу ITimedModifier. Это делает код чище и быстрее. Второй вариант — получить контейнер TimedModifierContainer для конкретного атрибута и работать с ним. Обратите внимание: методы setValue, unsetValue, isValueSet и getValueSet вызываются только через asApi(), а не через контейнер.
Кстати, если вы пользуетесь лаунчером foxygame.net, установка Timed Modifiers API занимает один клик — просто найдите его в каталоге дополнений и нажмите кнопку установки, лаунчер сам скачает нужную версию и разместит файл в папке mods. Это особенно удобно, когда мод-зависимость нужна сразу нескольким игрокам на сервере, а вручную синхронизировать версии не хочется.
Пример с интерфейсом ITimedModifier
ITimedModifier api = TimedModifierAPI.asApi(player); api.addModifier(EntityAttributes.MOVEMENT_SPEED, modifier, 60); api.removeModifier(EntityAttributes.MOVEMENT_SPEED, modifier.id()); api.clearModifier(EntityAttributes.MOVEMENT_SPEED); double remaining = api.getDuration(EntityAttributes.MOVEMENT_SPEED, modifier.id());
Работа с контейнером
var container = TimedModifierAPI.getContainer(player, EntityAttributes.MOVEMENT_SPEED); container.addModifier(...); // Для setValue нужно: container.asApi().setValue(25);
Как установить Timed Modifiers API
Игрокам достаточно скачать Timed Modifiers API с официальной страницы мода и переместить JAR-файл в папку mods вашего экземпляра Minecraft. Убедитесь, что версия API соответствует версии игры и загрузчику Fabric. После запуска игры библиотека автоматически подхватится, и все моды, использующие её, заработают корректно.
Разработчикам не нужно устанавливать API вручную — зависимость подтянется через Gradle. Главное — правильно указать версию в build.gradle и не забыть про репозиторий Modrinth. Если вы используете лаунчер foxygame.net, проверьте раздел совместимости версий: там отображается, какие версии Timed Modifiers API подходят под ваш клиент, а автообновление избавит от необходимости следить за новыми релизами вручную.
Заключение
Timed Modifiers API — это компактная, но мощная библиотека, которая экономит часы разработки и делает код модов чище. Она идеально подходит для эффектов зелий, заклинаний, временных бафов и дебафов, а также для любых механик, где нужно управлять атрибутами во времени. Благодаря поддержке easing-кривых и гибкой цепочке методов, вы можете создавать по-настоящему плавные и красивые игровые эффекты. Если вы разрабатываете мод на Fabric и нуждаетесь во временных модификаторах — эта библиотека станет отличным выбором.