Add a gitea-release step to the Drone pipeline that uploads everything in build/libs/*.jar to a Gitea Release named after the pushed tag, authenticating with a gitea_token secret. The step is guarded with when.event tag, and tag was added to the pipeline trigger so the build itself runs for tag events. Document the one-time token / secret setup and the tag workflow in the README.
171 lines
6.1 KiB
Markdown
171 lines
6.1 KiB
Markdown
# 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 или путях к файлам.
|