Hyvote
A secure vote listener plugin for Hytale that enables voting sites to send vote notifications to your server.
Описание
Голосовать
Безопасный плагин для прослушивания голосов для Hytale, который позволяет сайтам для голосования отправлять уведомления о голосовании на ваш сервер.
Особенности
- Протокол гибридного шифрования: Использование шифрования RSA + AES-256 для безопасной и гибкой передачи голоса
- Конфигурируемые действияВыполнять команды автоматически при получении голосов или присоединении игроков.
- Разработчик API: Запустите пользовательские события и интегрируйте обработку голосов в свои собственные плагины
- Защита от воспроизведенияВстроенная метка времени и проверка nonce предотвращает дублирование голосов
- Многопрофильный протокол ПоддержкаПоле версии позволяет будущим обновлениям протокола без нарушения существующих интеграций.
установка
- Скачать последний релиз
- Место
Hyvote.jarв папке плагинов вашего сервера - Запустите свой сервер -
Настройки.jsonбудет генерироваться автоматически - Настройка ваших настроек (см. ниже)
- Поделитесь своим публичным ключом RSA с сайтами для голосования (обнаружено в разделе WEB )
Ключи/public.pem)
конфигурация
Настройки хранятся в Настройки.json:
{
"порт": 2250,
"база данных": {
"тип": "склит",
"хозяин": "локальный"
"порт": 3306,
"имя пользователя": "hytale",
"password": "supersecretdatabasepassword",
"база данных": "hyvote"
?
"Действия":
{
"на": "голосовать",
"тип": "командный",
"Командир": "Скажи ${player} только что проголосовал за ${voteSite}!"
?
{
"на": "присоединиться",
"тип": "командный",
"Командир": "Скажи "Добро пожаловать назад"! Спасибо, что проголосовали на сайте.
?
]
?
Варианты конфигурации
порт: Порт TCP, к которому привязан слушатель голосования (по умолчанию: 2250)
база данных: Варианты конфигурации базы данных
действияМассив действий, которые необходимо выполнить, когда будут получены голоса
Свойства базы данных
Базы данных используются для отслеживания того, какие nonces были использованы, и предоставления голосов за действия, которые требуют, чтобы пользователь был онлайн, но получаются в автономном режиме.
- тип: Тип базы данных для использования (поддерживаемый - MySQL, MariaDB, SQLite, PostgreSQL)
- ведущий: Ведущий базы данных (игнорируется при использовании SQLite)
- порт: Порт, на котором прослушивается база данных (игнорируется при использовании SQLite)
- имя пользователя: Имя пользователя базы данных (игнорируется при использовании SQLite)
- пароль: Пароль для пользователя базы данных (игнорируется при использовании SQLite)
- база данных: База данных для использования (игнорируется при использовании SQLite)
Свойства действия
-
на: Когда выполнять действие
голосовать- Сразу после голосования обрабатываетсяприсоединятьсяКогда игрок присоединяется (или сразу, если уже онлайн)
-
типТип действия (в настоящее время только)
командоватьподдерживается) -
командовать: Командование выполнять. Поддерживает держателей мест:
${игрок}- Имя пользователя избирателя${voteSite}- Название участка для голосования${uuid}UUID избирателя${timestamp}- Отметка времени голосования
Разработчик API
Hyvote предоставляет систему событий для разработчиков плагинов для интеграции обработки пользовательских голосов.
Слушать голоса
импорт uk.co.deveroonie.hyvote.api.VoteEventManager;
Импорт uk.co.deveroonie.hyvote.api.Vote событие;
Зарегистрируйте своего слушателя
VoteEventManager.registerListener (событие -> {)
Голосование = event.getVote();
// Доступ к данным голосования
Струнный игрок = vote.playerName;
Струнный сайт = vote.vote Сайт;
Давняя метка времени = vote.timestamp;
// Опционально отменить обработку по умолчанию
event.setCancelled (правда)
// Реализуйте свою собственную логику
myPlugin.giveCustomReward (игрок);
}
Голосование Объект
Общественный класс Голосование {
публичный Струнный uuid; // Player UUID
Публичный струнный игрок Имя пользователя / Player Username
Публичный струнный избирательный участок; // Идентификатор сайта голосования
public long timetamp; // Unix timetamp
публичный струнный nonce; // Replay protection nonce
?
Незарегистрированные слушатели
Избиратель myListener = event -> {/*...*/};
VoteEventManager.registerListener (myListener);
// Позже...
VoteEventManager.unregisterListener (myListener);
Спецификация протокола
Hyvote использует пользовательский бинарный протокол (HV01) для передачи голоса:
Формат сообщения
[4 байта] Магия: «HV01»
[4 байта] Зашифрованная длина ключа AES (big-endian int)
[N байтов] Зашифрованный ключ AES-256
[4 байта] Шифрованная длина полезной нагрузки (big-endian int)
[М байт] Зашифрованный AES Полезная нагрузка JSON
шифрование
- Создайте случайный 256-битный ключ AES
- Шифровать голос JSON с помощью AES-256-CBC (включает 16-байт IV, предварительно подготовленный к шифрованию)
- Зашифровать ключ AES с помощью открытого ключа RSA сервера (PKCS1 или OAEP)
- Упаковка и отправка в соответствии с форматом сообщения выше
Структура полезной нагрузки JON
{
"uuid": "player-uuid-here",
"Имя игрока": "Имя игрока",
"voteSite": "VotingSiteName",
"Табель времени": 1737000000000,
"nonce": "уникальная-случайная-струна"
?
Клиентские библиотеки
Официальные клиентские библиотеки появятся в ближайшее время:
- Java
- JavaScript/Node.js
Безопасность
- Все данные голосования шифруются сквозным образом с использованием гибридного шифрования RSA + AES
- Атаки повтора смягчаются через nonces
- Неправильные сообщения отклоняются перед обработкой
Поддержка
Для вопросов, запросов функций или вопросов протокола, пожалуйста, посетите наш репозиторий GitHub.
Лицензия
МТИ
Показать оригинальное описание (English)
Hyvote
A secure vote listener plugin for Hytale that enables voting sites to send vote notifications to your server.
Features
- Hybrid Encryption Protocol: Uses RSA + AES-256 encryption for secure, flexible vote transmission
- Configurable Actions: Execute commands automatically when votes are received or when players join
- Developer API: Fire custom events and integrate vote handling into your own plugins
- Replay Protection: Built-in timestamp and nonce validation prevents duplicate votes
- Multiple Protocol Support: Version field allows for future protocol updates without breaking existing integrations
Installation
- Download the latest release
- Place
Hyvote.jarin your server's plugins folder - Start your server -
settings.jsonwill be generated automatically - Configure your settings (see below)
- Share your public RSA key with voting sites (found in
keys/public.pem)
Configuration
Settings are stored in settings.json:
{
"port": 2250,
"database": {
"type": "sqlite",
"host": "localhost",
"port": 3306,
"username": "hytale",
"password": "supersecretdatabasepassword",
"database": "hyvote"
},
"actions": [
{
"on": "vote",
"type": "command",
"command": "say ${player} just voted on ${voteSite}!"
},
{
"on": "join",
"type": "command",
"command": "say Welcome back ${player}! Thanks for voting on ${voteSite}"
}
]
}
Configuration Options
port: The TCP port the vote listener binds to (default: 2250)
database: The configuration options for the database
actions: Array of actions to execute when votes are received
Database Properties
Databases are used to track which nonces have been used and deliver votes for actions that require the user to be online but are recieved when offline.
- type: The database type to use (supported - MySQL, MariaDB, SQLite, PostgreSQL)
- host: The host of the database (ignored when using SQLite)
- port: The port that the database listens on (ignored when using SQLite)
- username: The username for the database user (ignored when using SQLite)
- password: The password for the database user (ignored when using SQLite)
- database: The database to use (ignored when using SQLite)
Action Properties
-
on: When to execute the action
vote- Immediately after vote is processedjoin- When the player joins (or immediately if already online)
-
type: Type of action (currently only
commandis supported) -
command: The command to execute. Supports placeholders:
${player}- The voter's username${voteSite}- The name of the voting site${uuid}- The voter's UUID${timestamp}- Vote timestamp
Developer API
Hyvote provides an event system for plugin developers to integrate custom vote handling.
Listening for Votes
import uk.co.deveroonie.hyvote.api.VoteEventManager;
import uk.co.deveroonie.hyvote.api.VoteReceivedEvent;
// Register your listener
VoteEventManager.registerListener(event -> {
Vote vote = event.getVote();
// Access vote data
String player = vote.playerName;
String site = vote.voteSite;
long timestamp = vote.timestamp;
// Optionally cancel default processing
event.setCancelled(true);
// Implement your custom logic
myPlugin.giveCustomReward(player);
});
Vote Object
public class Vote {
public String uuid; // Player UUID
public String playerName; // Player username
public String voteSite; // Voting site identifier
public long timestamp; // Unix timestamp
public String nonce; // Replay protection nonce
}
Unregistering Listeners
VoteListener myListener = event -> { /* ... */ };
VoteEventManager.registerListener(myListener);
// Later...
VoteEventManager.unregisterListener(myListener);
Protocol Specification
Hyvote uses a custom binary protocol (HV01) for vote transmission:
Message Format
[4 bytes] Magic: "HV01"
[4 bytes] Encrypted AES key length (big-endian int)
[N bytes] RSA-encrypted AES-256 key
[4 bytes] Encrypted payload length (big-endian int)
[M bytes] AES-encrypted JSON payload
Encryption
- Generate a random 256-bit AES key
- Encrypt vote JSON with AES-256-CBC (include 16-byte IV prepended to ciphertext)
- Encrypt the AES key with the server's RSA public key (PKCS1 or OAEP padding)
- Package and send according to the message format above
JSON Payload Structure
{
"uuid": "player-uuid-here",
"playerName": "PlayerName",
"voteSite": "VotingSiteName",
"timestamp": 1737000000000,
"nonce": "unique-random-string"
}
Client Libraries
Official client libraries coming soon for:
- Java
- JavaScript/Node.js
Security
- All vote data is encrypted end-to-end using hybrid RSA + AES encryption
- Replay attacks are mitigated through nonces
- Malformed messages are rejected before processing
Support
For issues, feature requests, or protocol questions, please visit our GitHub repository.
License
MIT
Последние версии
Hyvote 1.2.0
Информация
Авторы:
Категории:
Версии игры:
Создан: 17.01.2026