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

ProtoWeaver

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

FabricNeoForgeForgeQuilt
Загрузчики
FabricNeoForgeForgeQuilt
Скачиваний на Modrinth
7 тыс.
Подписчиков на Modrinth
27
версии
134
Обновлён
1 апреля 20261 апр.
Опубликован
в 2023
Это библиотека — она нужна другим модам и сама ничего не добавляет в игру

Коротко о моде

Библиотека — нужна другим модам
Работает на Fabric, NeoForge, Forge и Quilt
Для Minecraft 1.14–26.1.1
Последняя версия — 1.5.1 от 1 апреля 2026
Лицензия CC0-1.0 — бесплатно
Где нужен
В игренеизвестноНа серверенеизвестно

Автор не указал, где нужен мод

Версии игры1.14–26.1.1
Описание переведено автоматическиПоказать оригинал (EN)

Maintenance PRs Welcome

ko-fi

ProtoWeaver

Библиотека сетевого взаимодействия для Minecraft, позволяющая создавать собственные протоколы, работающие на внутреннем netty-сервере.

Что это значит?

Надоело перехватывать клиентские подключения, чтобы гонять данные туда-сюда через прокси? Мне вот точно надоело. ProtoWeaver позволяет создать собственный протокол, работающий на том же порту, что использует сервер Minecraft. Это значит, что прокси вроде velocity может общаться с сервером независимо от того, онлайн игроки или нет, без запуска дополнительного сокет-сервера на другом порту. Protoweaver при этом не ограничен только прокси. С помощью модуля client любое стороннее Java-приложение может напрямую общаться с ProtoWeaver!

Protoweaver быстрый, безопасный и простой в использовании. Все протоколы работают в том же netty-инстансе, что и Minecraft, шифруются через ssl и обёрнуты в очень понятный api. Давайте посмотрим:

Возможности

  • [x] Не требует настройки пользователем
  • [x] SSL-шифрование
  • [x] Аутентификация протокола
  • [x] Пакеты как POJO
  • [x] Сжатие (Gzip, Snappy, LZ)
  • [x] Все основные загрузчики модов (neoforge скоро tm)
  • [ ] API для регистрации сырых протоколов (http, ssh и т.д.)
  • [x] Кастомная сериализация
  • [ ] Кастомные SSL-провайдеры/сертификаты
  • [ ] Мультипротокольные подключения
  • [ ] Скажите, что вы хотите увидеть!

Настройка проекта

В ваш build.gradle добавьте

* Примечание: **Не шейдьте protoweaver! Он не будет работать корректно. ProtoWeaver — это мод/плагин, который устанавливается вместе с вашим!

repositories {
    maven { url "https://maven.mrnavastar.me/releases" }
}

dependencies {
    // 'common' можно заменить на любой из: `client`, `fabric`, `forge`, `paper` или `proxy`.
    implementation "me.mrnavastar.protoweaver:common:1.3.11"
}

Создание протокола

Протоколы очень гибко настраиваются и имеют много встроенного функционала. Вот пример протокола:

Protocol protocol = Protocol.create("my_mod_id", "cool_protocol")
    .setCompression(CompressionType.GZIP)
    .setServerHandler(MyCustomServerHandler.class)
    .setClientHandler(MyCustomClientHandler.class)
    .setMaxConnections(15)
    .addPacket(String.class)
    .build();

// Загрузите протокол перед тем, как его использовать
ProtoWeaver.load(protocol);

Отправка пакетов

Отправлять пакеты крайне просто. Любой POJO, добавленный в протокол (см. Создание протокола), является допустимым пакетом для отправки. Учтите, что вся сериализация POJO выполняется через kyro — быструю библиотеку сериализации.

// Если у вас есть ссылка на 'ProtoConnection', можно просто:
connection.send(myObject);
// Если у вас есть ссылка на 'ProtoClient', можно также:
client.send(myObject);

Обработка пакетов

Всем протоколам нужны обработчики для реализации функционала. Клиент и сервер могут использовать либо один и тот же обработчик, либо разные.

public class MyCustomServerHandler implements ProtoConnectionHandler {
    // Учтите, что все функции необязательны для реализации

    @Override
    public void void onReady(ProtoConnection connection) {
        System.out.println("круто! похоже, новый клиент подключился от: " + connection.getRemoteAddress());
    }

    @Override
    public void onDisconnect(ProtoConnection connection) {
        System.out.println("пока: " + connection.getRemoteAddress());
    }

    @Override
    public void handlePacket(ProtoConnection connection, Object packet) {
        System.out.println("вау! получено: " + packet.toString() + " от: " + connection.getRemoteAddress());
    }
}

```java
public class MyCustomClientHandler implements ProtoConnectionHandler {
    // Учтите, что все функции необязательны для реализации

    @Override
    public void void onReady(ProtoConnection connection) {
        System.out.println("awesome! connected to: " + connection.getRemoteAddress());
    }

    @Override
    public void onDisconnect(ProtoConnection connection) {
        System.out.println("goodbye: " + connection.getRemoteAddress());
    }

    @Override
    public void handlePacket(ProtoConnection connection, Object packet) {
        System.out.println("saying hi!");
        connection.send("Hey server!");
    }
}

Кастомная сериализация

Иногда бывает полезно отправлять по своему протоколу объекты Minecraft или другие готовые POJO. Чтобы это стало возможным, можно зарегистрировать кастомный сериализатор.

Например, вот сериализатор для NBT-тегов:

public class NbtSerializer extends ProtoSerializer<CompoundTag> {

    public NbtSerializer(Class<CompoundTag> type) {
        super(type);
    }

    @Override
    public void write(ByteArrayOutputStream buffer, CompoundTag value) {
        try {
            NbtIo.writeCompressed(value, buffer);
        } catch (IOException e) {
            Platform.throwException(e);
        }
    }

    @Override
    public CompoundTag read(ByteArrayInputStream buffer) {
        try {
            return NbtIo.readCompressed(buffer, NbtAccounter.unlimitedHeap());
        } catch (IOException e) {
            Platform.throwException(e);
            throw new RuntimeException(e);
        }
    }
}

А чтобы зарегистрировать сериализатор, просто сделайте так:

Protocol protocol = Protocol.create("my_mod_id", "cool_protocol")
    .setCompression(CompressionType.GZIP)
    .setServerHandler(MyCustomServerHandler.class)
    .setClientHandler(MyCustomClientHandler.class)
    .setMaxConnections(15)
    .addPacket(CompoundTag.class, NbtSerializer.class)
    .build();

Скоро будет больше документации! Может, даже настоящий сайт??

Частые вопросы

Как установить ProtoWeaver?

Установите Fabric под свою версию Minecraft, скачайте ProtoWeaver под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть ProtoWeaver?

У ProtoWeaver есть сборки для Minecraft 1.14–26.1.1.

Лицензия и источник
Creative Commons Zero v1.0 Universalможно свободно использовать и распространять с указанием автора
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее