
HamsterAPI
Lightweight-библиотека для Spigot/Bukkit плагинов, которая дает разработчикам удобные утилиты, производительные абстракции и общие системы для ускорения создания плагинов.
HamsterAPI: Инструментарий для работы с пакетами в Майнкрафт
Перехватывай, изменяй и отправляй пакеты без NMS и Reflection.
Что такое HamsterAPI?
HamsterAPI - это производительная библиотека, которая даёт разработчикам полный контроль над сетевым протоколом Майнкрафт. Вместо того чтобы копаться в NMS-коде, ты получаешь чистую событийную абстракцию - работаешь с пакетами стабильно на разных версиях сервера.
Короче, забываешь про головную боль с поддержкой версионного кода. HamsterAPI даёт простое и гибкое решение: от создания кастомных косметик до фикса эксплойтов на уровне пакетов. Если ты собираешь сервер - это must-have для ускорения разработки.
Основные фишки
- Перехват пакетов - слушай, изменяй и отменяй любые пакеты через гибкую систему событий с приоритетами.
- Отправка пакетов без NMS - шли Title, ActionBar и другие пакеты игрокам без Reflection и версионной магии.
- Контроль над игроками - безопасно отключай игроков с кастомным сообщением или мгновенно закрывай их соединение.
- Интеграция с BungeeCord - переключай игроков между серверами, используй плагин-каналы и управляй сетью.
- Оптимизированные утилиты - упрощённая работа с Reflection и буферами для создания фич, независимых от версий.
Начало работы
Шаг 1: Добавь HamsterAPI как зависимость
Сначала пропиши HamsterAPI в plugin.yml своего плагина. Это нужно, чтобы плагин загрузился корректно.
name: YourPlugin
version: 1.0
main: com.yourdomain.yourplugin.Main
depend: [HamsterAPI]
Шаг 2: Получи доступ к API
Входная точка - синглтон. Достаёшь его статическим вызовом:
HamsterAPI api = HamsterAPI.getInstance();
Отсюда доступны все менеджеры и утилиты:
getHamsterPlayerManager()- управление действиями игроков (отправка пакетов, отключение).getBungeeMessenger()- связь с BungeeCord прокси.getPacketInjector()- ручное внедрение или удаление API из пайплайна игрока.getBufferIO()- утилита для декодирования сырых байтов в читаемые пакеты.
Основы и примеры
Как слушать пакеты
HamsterAPI использует событийную систему для перехвата пакетов на разных этапах:
Поток: Клиент -> [Разделение и декомпрессия] -> PacketDecodeEvent -> [Декодер] -> PacketReceiveEvent -> Сервер
-
PacketDecodeEvent
-
Когда: После декомпрессии байтов, но до того как они превратятся в объект пакета.
-
Что получаешь: Сырой
ByteBuf. -
Для чего: Низкоуровневая безопасность, фикс эксплойтов, анализ сети.
-
PacketReceiveEvent / PacketSendEvent
-
Когда: После того как пакет полностью декодирован в
PacketWrapper. -
Что получаешь: Удобный
PacketWrapper. -
Для чего: Классические задачи - косметика, отмена игровых событий, изменение поведения.
Регистрируешь слушателя как обычное Bukkit-событие.
Пример: Слушаем пакет
public class MyPacketListener implements Listener {
@EventHandler
public void onPacketSend(PacketSendEvent event) {
String packetName = event.getPacket().getName();
if (packetName.equals("PacketPlayOutChat")) {
Player player = event.getPlayer();
player.sendMessage("Сервер пытался отправить тебе сообщение!");
// Можешь отменить пакет
// event.setCancelled(true);
}
}
}
Отправка Title и Subtitle
HamsterPlayer hamsterPlayer = HamsterAPI.getInstance().getHamsterPlayerManager().get(player);
// Отправляем заголовок: появляется за 1с, висит 3с, исчезает за 1с
// Время в тиках (20 тиков = 1 секунда)
hamsterPlayer.sendTitle("§aДобро пожаловать!", "§7Приятной игры.", 20, 60, 20);
Отправка ActionBar
HamsterPlayer hamsterPlayer = HamsterAPI.getInstance().getHamsterPlayerManager().get(player);
hamsterPlayer.sendActionbar("§eУ вас §c5§e новых сообщений.");
Безопасное отключение игрока (Packet Kick)
Отправляет формальный пакет отключения - клиент обработает его плавно и покажет кастомную причину.
HamsterPlayer hamsterPlayer = HamsterAPI.getInstance().getHamsterPlayerManager().get(player);
hamsterPlayer.disconnect("§cТебя кикнули за крутость.");
Мгновенное закрытие соединения
Завершает канал без отправки формального пакета. Используй для античита или экстренных случаев.
HamsterPlayer hamsterPlayer = HamsterAPI.getInstance().getHamsterPlayerManager().get(player);
hamsterPlayer.closeChannel();
Отправка игрока на другой сервер BungeeCord
HamsterPlayer hamsterPlayer = HamsterAPI.getInstance().getHamsterPlayerManager().get(player);
// Имя сервера должно совпадать с config.yml BungeeCord
hamsterPlayer.sendServer("lobby-1");
Планы на будущее
HamsterAPI постоянно расширяется. В планах:
- BossBar API - простой способ создавать и управлять кастомными BossBar'ами без привязки к версиям.
- Кастомные плагин-каналы - прямая связь между серверным плагином и клиентскими модами.
- BungeeCord Listener - отдельный слушатель для приёма сообщений от BungeeCord прокси.
Начинай работать с HamsterAPI уже сегодня и бери под контроль сетевое взаимодействие своего сервера Майнкрафт.
