arkonsadter c25e394d50 Add friends, markers, HUD overlays, tab complete
- FriendsManager persists a per-user friend list at config/clientirc-friends.json.
- MarkerManager holds one ephemeral marker per owner (5 min expiry).
- IRC protocol extended with marker_set / marker_remove; server relays them.
- IrcService DisplayLine replaced with sealed IrcEvent (Chat / System / MarkerSet / MarkerRemove); chat formatting moved into the client.
- ClientIrcMod handles .friends add/remove/list, .marker remove, .help; chat lines from friends are prefixed with a green dot; marker events from non-friends are ignored.
- OverlayHud draws a top-center compass strip and a top-left watermark (nick / FPS / ping) via HudLayerRegistrationCallback.
- WorldOverlayRenderer draws green crosses above friends and magenta beams + base cubes at active markers via WorldRenderEvents.AFTER_ENTITIES.
- MiddleClickHandler binds MMB via KeyMapping, raycasts a block or 20-block look ray, stores locally and sends marker_set on a daemon executor.
- ChatScreenMixin completes . prefix commands on Tab; first mixin in the project, plumbed through clientirc.client.mixins.json and fabric.mod.json.
2026-06-21 21:16:32 +06:00

Client IRC Chat

Клиентский Fabric-мод, который перехватывает сообщения вида .irc <текст> и отправляет их на отдельный TCP IRC-подобный сервер.

Формат сообщения в чате клиента:

НАЗВАНИЕ-КЛИЕНТА >> Ник-игрока: сообщение

Пример:

MY-CLIENT >> Arkon: Привет

Что входит

  • клиентский Fabric-мод;
  • команда .irc <сообщение> через обычный чат Minecraft;
  • служебные команды .irc status, .irc reconnect, .irc reload;
  • пример простого IRC-сервера на Node.js без внешних зависимостей;
  • /.drone.yml для сборки через Drone CI.

Целевая версия

Сборка переведена на:

  • Minecraft 26.2
  • Fabric Loader 0.19.3
  • Fabric API 0.152.2+26.2
  • Fabric Loom 1.17-SNAPSHOT
  • Java 25

Дата релиза Minecraft 26.2: 2026-06-16.

Начиная с 26.1 Mojang перестал обфусцировать клиент, а Yarn и Intermediary перестали публиковаться после 1.21.11. Поэтому в build.gradle нет блока mappings вообще: исходники Minecraft уже в человекочитаемых именах Mojang, и Loom собирает мод напрямую против них.

Если в CI стоит старый Loom вроде 1.10.5, сборка 26.2 упадёт с ошибкой Unsupported class file major version 69. Для 26.2 нужен новый Loom из актуальной ветки Fabric.

Команды в игре

  • .irc Привет - отправить сообщение на IRC-сервер
  • .irc status - показать состояние подключения
  • .irc reconnect - переподключиться к IRC-серверу
  • .irc reload - перечитать конфиг из файла

Конфиг клиента

После первого запуска мод создаст:

config/clientirc.json

Пример:

{
  "host": "127.0.0.1",
  "port": 24469,
  "clientName": "MY-CLIENT",
  "token": "",
  "autoConnect": true,
  "connectTimeoutMs": 5000
}

Поля:

  • host - адрес IRC-сервера
  • port - порт IRC-сервера
  • clientName - то самое НАЗВАНИЕ-КЛИЕНТА
  • token - общий токен, если хочешь ограничить подключение
  • autoConnect - подключаться автоматически при старте клиента

Как поднять сервер для IRC-чата

В репозитории уже есть пример сервера: server/irc-server.js

1. Установи Node.js

Нужен Node.js 20+.

2. Настрой сервер

Файл конфига: server/config.json

Пример:

{
  "host": "0.0.0.0",
  "port": 24469,
  "token": "secret-token"
}

Если укажешь token, такой же токен нужно прописать в config/clientirc.json на клиентах.

3. Запусти сервер

cd server
node irc-server.js

4. Открой порт

Если сервер не локальный, открой TCP-порт 24469 в фаерволе и пробрось его на роутере/VPS.

5. Подключи клиентов

На каждом клиенте укажи:

  • host - IP или домен сервера
  • port - тот же порт
  • clientName - имя клиента
  • token - если используется

После этого в игре можно писать:

.irc Привет

И все подключенные клиенты увидят:

[IRC] MY-CLIENT >> Arkon: Привет

Сборка мода

Для локальной сборки нужен Gradle 9+ и Java 25.

gradle build

Артефакт будет в:

build/libs/

Drone CI

Файл пайплайна: /.drone.yml

Он делает:

  • запуск Docker pipeline;
  • gradle clean build;
  • вывод содержимого build/libs;
  • по тегу — публикует jar-ы из build/libs/*.jar как Gitea Release.

Для работы Drone runner должен иметь доступ в интернет, чтобы скачать зависимости Gradle/Fabric.

Автоматический релиз по тегу

Чтобы Drone выложил собранный мод в раздел Releases репозитория, нужны две разовые настройки и одна команда на каждую новую версию.

Один раз:

  1. В Gitea: Settings → Applications → Generate New Token. Дать токену права write:repository. Скопировать.
  2. В Drone, на странице репозитория: Settings → Secrets → New Secret. Имя — gitea_token, значение — токен из шага 1. Поставить галку Allow Pull Requests снять (релизы только из push/tag).

На каждую новую версию:

git tag v1.0.0
git push origin v1.0.0

Drone поднимет тег как событие, соберёт мод и положит client-irc-chat-<версия>.jar в https://git.nevetime.ru/Arkon/fdgdfg/releases/tag/v1.0.0. Версия в имени jar-а берётся из mod_version в gradle.properties — обычно её стоит поднимать вместе с тегом, чтобы они совпадали.

Если что-то идёт не так, посмотреть лог конкретного шага gitea-release в Drone — плагин печатает HTTP-ответ Gitea, по нему сразу видно, проблема в токене, URL или путях к файлам.

Description
No description provided
Readme 126 KiB
v1.0.3 Latest
2026-06-24 14:34:07 +07:00
Languages
Java 89.9%
JavaScript 10.1%