Скачать ProtoWeaver — Minecraft Моды — MetaMods

ProtoWeaver

Активный

Установок

0

Последнее обновление

3 месяца назад

Версии

1.14 — 1.21.9
Клиент
Fabric
Forge
Neoforge
Quilt
Библиотеки
Управление
Утилиты

ProtoWeaver

ProtoWeaver — это мощная библиотека для создания пользовательских сетевых протоколов, которые работают непосредственно на встроенном Netty-сервере Minecraft. Больше не нужно перенаправлять клиентские соединения через прокси для передачи данных — теперь всё работает на одном порту!

Что это значит на практике?

Устали от сложных обходных путей для обмена данными между сервером и прокси? ProtoWeaver решает эту проблему, позволяя создавать собственные протоколы, которые функционируют на том же порту, что и основной Minecraft-сервер. Это означает, что прокси-серверы вроде Velocity могут взаимодействовать с игровым сервером независимо от того, находятся ли игроки онлайн, без необходимости запуска дополнительных сокет-серверов на других портах.

Но возможности ProtoWeaver не ограничиваются только прокси! С помощью модуля client любое стороннее Java-приложение может напрямую общаться с вашим протоколом.

Основные преимущества

Библиотека сочетает в себе скорость, безопасность и простоту использования:

  • Все протоколы работают в том же Netty-инстансе, что и Minecraft
  • Встроенное SSL-шифрование для защиты данных
  • Интуитивно понятный API для быстрого старта
  • Автоматическая аутентификация протоколов
  • Поддержка различных методов сжатия (Gzip, Snappy, LZ)
  • Совместимость со всеми основными загрузчиками модов
  • Пакеты представлены в виде обычных POJO-объектов
  • Возможность настройки собственной сериализации

Начало работы

Добавьте в ваш файл build.gradle:

Важно: Не включайте ProtoWeaver в ваш мод! Это отдельная модификация, которая должна устанавливаться вместе с вашей.

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

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

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

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

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-объект, добавленный в протокол, может быть отправлен как пакет. Вся сериализация обрабатывается через быструю библиотеку 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());
    }
}
public class MyCustomClientHandler 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("Отправляем приветствие!");
        connection.send("Привет, сервер!");
    }
}

Пользовательская сериализация

Для работы с объектами 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();
Участники проекта
mrnavastar

mrnavastar

Разработчик

Создан: 28 мая 2024

ID: 19731