Hyvote

Hyvote

Por deveroonie 18 de enero de 2026
#API#cifrado#Desarrollo#Hytale#Hyvote#plugin#seguridad#votación

Un plugin de escucha de votos seguro para Hytale que permite a los sitios de votación enviar notificaciones de votos a tu servidor.

Características

  • Protocolo de Cifrado Híbrido: Utiliza cifrado RSA + AES-256 para una transmisión de votos segura y flexible
  • Acciones Configurables: Ejecuta comandos automáticamente cuando se reciben votos o cuando los jugadores se unen
  • API para Desarrolladores: Genera eventos personalizados e integra el manejo de votos en tus propios plugins
  • Protección contra Repeticiones: Validación de marca de tiempo y nonce incorporada previene votos duplicados
  • Soporte para Múltiples Protocolos: El campo de versión permite actualizaciones futuras del protocolo sin romper integraciones existentes

Instalación

  • Descarga la última versión
  • Coloca Hyvote.jar en la carpeta de plugins de tu servidor
  • Inicia tu servidor – settings.json se generará automáticamente
  • Configura tus ajustes (ver más abajo)
  • Comparte tu clave RSA pública con los sitios de votación (encontrada en keys/public.pem)

Configuración

Los ajustes se almacenan en 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} ¡acaba de votar en ${voteSite}!"
    },
    {
      "on": "join",
      "type": "command",
      "command": "say ¡Bienvenido de nuevo ${player}! Gracias por votar en ${voteSite}"
    }
  ]
}

Opciones de Configuración

port: El puerto TCP al que se vincula el oyente de votos (por defecto: 2250)

database: Las opciones de configuración para la base de datos

actions: Array de acciones a ejecutar cuando se reciben votos

Propiedades de la Base de Datos

Las bases de datos se utilizan para rastrear qué nonces han sido utilizados y entregar votos para acciones que requieren que el usuario esté en línea pero se reciben cuando está fuera de línea.

  • type: El tipo de base de datos a utilizar (soportados – MySQL, MariaDB, SQLite, PostgreSQL)
  • host: El host de la base de datos (ignorando cuando se utiliza SQLite)
  • port: El puerto en el que escucha la base de datos (ignorando cuando se utiliza SQLite)
  • username: El nombre de usuario para el usuario de la base de datos (ignorando cuando se utiliza SQLite)
  • password: La contraseña para el usuario de la base de datos (ignorando cuando se utiliza SQLite)
  • database: La base de datos a utilizar (ignorando cuando se utiliza SQLite)

Propiedades de Acción

  • on: Cuándo ejecutar la acción

    • vote – Inmediatamente después de que se procese el voto
    • join – Cuando el jugador se une (o inmediatamente si ya está en línea)
  • type: Tipo de acción (actualmente solo se soporta command)

  • command: El comando a ejecutar. Soporta marcadores de posición:

    • ${player} – El nombre de usuario del votante
    • ${voteSite} – El nombre del sitio de votación
    • ${uuid} – El UUID del votante
    • ${timestamp} – Marca de tiempo del voto

API para Desarrolladores

Hyvote proporciona un sistema de eventos para que los desarrolladores de plugins integren un manejo de votos personalizado.

Escuchando Votos

import uk.co.deveroonie.hyvote.api.VoteEventManager;
import uk.co.deveroonie.hyvote.api.VoteReceivedEvent;

// Registra tu oyente
VoteEventManager.registerListener(event -> {
    Vote vote = event.getVote();

    // Accede a los datos del voto
    String player = vote.playerName;
    String site = vote.voteSite;
    long timestamp = vote.timestamp;

    // Opcionalmente cancela el procesamiento por defecto
    event.setCancelled(true);

    // Implementa tu lógica personalizada
    myPlugin.giveCustomReward(player);
});

Objeto Voto

public class Vote {
    public String uuid;          // UUID del jugador
    public String playerName;    // Nombre de usuario del jugador
    public String voteSite;      // Identificador del sitio de votación
    public long timestamp;       // Marca de tiempo Unix
    public String nonce;         // Nonce de protección contra repeticiones
}

Desregistrando Oyentes

VoteListener myListener = event -> { /* ... */ };
VoteEventManager.registerListener(myListener);

// Más tarde...
VoteEventManager.unregisterListener(myListener);

Especificación del Protocolo

Hyvote utiliza un protocolo binario personalizado (HV01) para la transmisión de votos:

Formato del Mensaje

[4 bytes] Magia: "HV01"
[4 bytes] Longitud de clave AES cifrada (entero big-endian)
[N bytes] Clave AES-256 cifrada con RSA
[4 bytes] Longitud de carga útil cifrada (entero big-endian)
[M bytes] Carga útil JSON cifrada con AES

Cifrado

  • Generar una clave AES de 256 bits aleatoria
  • Cifrar el JSON del voto con AES-256-CBC (incluir IV de 16 bytes precedido al texto cifrado)
  • Cifrar la clave AES con la clave pública RSA del servidor (relleno PKCS1 u OAEP)
  • Empaquetar y enviar de acuerdo con el formato de mensaje anterior

Estructura de la Carga Útil JSON

{
  "uuid": "player-uuid-here",
  "playerName": "PlayerName",
  "voteSite": "VotingSiteName",
  "timestamp": 1737000000000,
  "nonce": "unique-random-string"
}

Bibliotecas del Cliente

Pronto estarán disponibles bibliotecas oficiales del cliente para:

  • Java
  • JavaScript/Node.js

Seguridad

  • Todos los datos de votos están cifrados de extremo a extremo utilizando cifrado híbrido RSA + AES
  • Los ataques de repetición se mitigan a través de nonces
  • Los mensajes malformados son rechazados antes del procesamiento

Soporte

Para problemas, solicitudes de funciones o preguntas sobre el protocolo, visita nuestro repositorio de GitHub.

Licencia

MIT

Relacionados:

Synapse

Synapse

#API#Desarrollo#Hytale

Synapse v1.3.0 — API moderna de marcadores de posición (¡Ahora con soporte para Hytale!) Synapse es un poderoso y modern...

Bridge

Bridge

#API#gestión#Hytale

Una poderosa biblioteca de plugins de Hytale para crear, gestionar y orquestar mundos temporales con facilidad. Bridge p...

HyDB

HyDB

#API#Base de datos#Desarrollo

HyDB – API de Base de Datos SQLite Profesional para Hytale 📊 Resumen HyDB es un plugin base profesional para Hyta...

Advanced Parties

Advanced Parties

#AdvancedParties#API#grupos

⚠️ Trabajo en Progreso ⚠️AdvancedParties está en desarrollo activo. Se planean características como la interfaz gráfica ...

Cassaforte

Cassaforte

#API#Cassaforte#Desarrollo

Una API de abstracción de plataforma para plugins de Hytale, que proporciona interfaces de economía, permisos y chat. De...

Coins

Coins

#API#Economía#Hytale

Hytale Coins Mod Un sencillo mod de economía para Hytale que añade monedas físicas y un sistema de cartera digital. Cara...