Перейти к содержимому
RU

Аддоны и лица мобов

Addon API · для разработчиков · Krylix

Расширить Krylix можно двумя способами. Лицо моба добавляется JSON-файлом в наборе ресурсов, код для этого не нужен. Всё остальное делается через Java-API.

Лица мобов

Лента убийств, панель мобов и сводка смерти рисуют рядом с каждым мобом маленькое лицо. В моде их 43:

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

У любого другого моба, в том числе из модов, вместо лица серый квадрат, пока кто-нибудь это лицо не добавит.

На каждый вид сущности один файл: assets/<namespace>/krylix/heads/<path>.json для сущности <namespace>:<path>.

{
  "layers": [
    { "texture": "mymod:textures/entity/goblin.png", "u": 8, "v": 8, "width": 8, "height": 8,
      "texture_width": 64, "texture_height": 64 }
  ]
}
  • u и v задают левый верхний пиксель лица на текстуре.
  • width и height задают размер этой области. Если их не указать, берётся 8.
  • texture_width и texture_height задают размер всей текстуры. Если их не указать, берётся 64.

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

Встроенные лица лежат в assets/minecraft/krylix/heads/ и ссылаются на текстуры сущностей из самой игры, так что набор ресурсов может заменить любое из них. Перечитываются лица вместе с наборами ресурсов.

API

Эта часть для авторов модов. API занимает пакет com.eliasnvx.krylix.api, версия 1.0.0, и нумеруется отдельно от мода. Классы лежат внутри файла Krylix, ничего дополнительно ставить не надо.

Проще всего собирать аддон с файлом мода из Maven-репозитория Modrinth. Для NeoForge артефакт оканчивается на -neoforge.

repositories {
    maven { url 'https://api.modrinth.com/maven' }
}

dependencies {
    compileOnly 'maven.modrinth:krylix:1.4.0+26.3-fabric'
    runtimeOnly 'maven.modrinth:krylix:1.4.0+26.3-fabric'
}

Аддон — это класс, который реализует KrylixAddon. NeoForge находит его по аннотации @RegisterKrylixAddon. На Fabric класс указывается в точке входа krylix в fabric.mod.json.

@RegisterKrylixAddon
public final class MyAddon implements KrylixAddon {
    @Override
    public void onInitialize(KrylixApi api) {
        // A kill in my minigame arena: no feed row, not counted
        api.events().addListener(KillEvent.class, event -> {
            if (Arena.contains(event.victim())) {
                event.setBroadcast(false);
                event.setRecordStats(false);
            }
        });
    }
}

До чего аддон дотягивается:

  • KillCreditEvent, на сервере: поменять того, кому достаётся убийство, или оставить смерть без убийцы.
  • KillEvent, на сервере: setBroadcast(false) убирает убийство из ленты, setRecordStats(false) убирает его из статистики, setWeapon и flags() меняют иконку и значок. Если событие отменить, Krylix пропустит эту смерть целиком, вместе со сводкой.
  • StatRecordedEvent, на сервере: срабатывает после того, как засчитано убийство, смерть или убийство моба, и несёт новую сумму.
  • FeedEntryEvent, на клиенте: отмена прячет одну строку на этом клиенте.
  • api.stats(server): читать сохранённые числа любого игрока.
  • registerMobHead и healthProviders(), на клиенте: лицо из кода и числа здоровья для сущностей, которые хранят здоровье по-своему.

Лицо из набора ресурсов побеждает лицо, зарегистрированное в коде. Добавить в рейтинг вкладку или столбец через API нельзя.

Полное руководство лежит в репозитории, рядом с примером аддона под оба загрузчика. В примере убийства союзников не достаются никому, игроки с тегом тренировки не попадают в ленту и статистику, а к плашке здоровья прибавляется поглощение. Пример нигде не опубликован, его собирают из исходников.