Hyvote

Hyvote

A secure vote listener plugin for Hytale that enables voting sites to send vote notifications to your server.

38.0 загрузок
Обновлён 17 дней назад

Описание

Голосовать

Безопасный плагин для прослушивания голосов для Hytale, который позволяет сайтам для голосования отправлять уведомления о голосовании на ваш сервер.

Особенности

  • Протокол гибридного шифрования: Использование шифрования RSA + AES-256 для безопасной и гибкой передачи голоса
  • Конфигурируемые действияВыполнять команды автоматически при получении голосов или присоединении игроков.
  • Разработчик API: Запустите пользовательские события и интегрируйте обработку голосов в свои собственные плагины
  • Защита от воспроизведенияВстроенная метка времени и проверка nonce предотвращает дублирование голосов
  • Многопрофильный протокол ПоддержкаПоле версии позволяет будущим обновлениям протокола без нарушения существующих интеграций.

установка

  1. Скачать последний релиз
  2. Место Hyvote.jar в папке плагинов вашего сервера
  3. Запустите свой сервер - Настройки.json будет генерироваться автоматически
  4. Настройка ваших настроек (см. ниже)
  5. Поделитесь своим публичным ключом 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

шифрование

  1. Создайте случайный 256-битный ключ AES
  2. Шифровать голос JSON с помощью AES-256-CBC (включает 16-байт IV, предварительно подготовленный к шифрованию)
  3. Зашифровать ключ AES с помощью открытого ключа RSA сервера (PKCS1 или OAEP)
  4. Упаковка и отправка в соответствии с форматом сообщения выше

Структура полезной нагрузки 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

  1. Download the latest release
  2. Place Hyvote.jar in your server's plugins folder
  3. Start your server - settings.json will be generated automatically
  4. Configure your settings (see below)
  5. 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 processed
    • join - When the player joins (or immediately if already online)
  • type: Type of action (currently only command is 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

  1. Generate a random 256-bit AES key
  2. Encrypt vote JSON with AES-256-CBC (include 16-byte IV prepended to ciphertext)
  3. Encrypt the AES key with the server's RSA public key (PKCS1 or OAEP padding)
  4. 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

Early Access 16.01.2026 25.6 МБ
Скачать