# 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` Пример: ```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](/D:/Desktop/gdfg/server/irc-server.js) ### 1. Установи Node.js Нужен Node.js 20+. ### 2. Настрой сервер Файл конфига: [server/config.json](/D:/Desktop/gdfg/server/config.json) Пример: ```json { "host": "0.0.0.0", "port": 24469, "token": "secret-token" } ``` Если укажешь `token`, такой же токен нужно прописать в `config/clientirc.json` на клиентах. ### 3. Запусти сервер ```bash cd server node irc-server.js ``` ### 4. Открой порт Если сервер не локальный, открой TCP-порт `24469` в фаерволе и пробрось его на роутере/VPS. ### 5. Подключи клиентов На каждом клиенте укажи: - `host` - IP или домен сервера - `port` - тот же порт - `clientName` - имя клиента - `token` - если используется После этого в игре можно писать: ```text .irc Привет ``` И все подключенные клиенты увидят: ```text [IRC] MY-CLIENT >> Arkon: Привет ``` ## Сборка мода Для локальной сборки нужен Gradle 9+ и Java 25. ```bash gradle build ``` Артефакт будет в: `build/libs/` ## Drone CI Файл пайплайна: [/.drone.yml](/D:/Desktop/gdfg/.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). **На каждую новую версию:** ```bash 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 или путях к файлам.