- 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.
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 репозитория, нужны две разовые настройки и одна команда на каждую новую версию.
Один раз:
- В Gitea:
Settings → Applications → Generate New Token. Дать токену праваwrite:repository. Скопировать. - В 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 или путях к файлам.