VotePipe - Unified Vote Rewards for Hytale
The only Hytale vote plugin that handles both Webhook and Votifier sites through one unified pipeline. Connect all 7 major server list sites with a single plugin — no open ports, no extra setup per protocol, no juggling multiple vote plugins.
- Webhook + Votifier in one plugin — supports V1 RSA, V2 HMAC, and HTTPS webhooks natively
- No port forwarding required — outbound-only connections keep your server secure
- Visual reward builder — configure rewards from a web dashboard, no code needed
- Free tier available — get started in minutes with no commitment
Supported Providers
Every provider feeds into the same reward system — no separate plugins needed.
Webhook Providers
Votes arrive over HTTPS. You get a webhook URL and secret from the dashboard — paste them into the vote site settings.
Votifier Providers
Votes arrive over TCP using the Votifier protocol. VotePipe auto-generates your RSA keys and HMAC tokens — just copy the connection info from the dashboard into the vote site. One-click key rotation if you ever need it.
Quick Start
- Download
VotePipe.jar and place it in your server's plugins/ folder
- Start the server — a default config file is generated automatically
- Create an account at app.votepipe.com and add your server
- Copy your plugin token from Settings > Plugin in the dashboard
- Set the token in-game with
/votepipe token vpt_your_token or edit plugins/votepipe/config.json
- Add providers in the dashboard — you'll get webhook URLs or Votifier connection info to paste into each vote site
Votes start flowing within seconds. Your server only makes outbound requests — no open ports, no firewall rules. Failed deliveries retry automatically.
Operating Modes
Automatic Mode
Configure everything from the dashboard. No code required.
- Go to Settings > Rewards in your dashboard
- Set Plugin Mode to Automatic
- Create reward configurations with the visual builder
- The plugin handles execution, retry, and claim tracking
Developer Mode
Full control with custom code. Register a handler for VoteReceivedEvent and implement your own reward logic.
- Set Plugin Mode to Developer in the dashboard
- Register an event handler (see Plugin API below)
- Call
event.success() or event.fail(reason) to report delivery status
Reward Types
| Type |
Description |
Free |
Pro+ |
| Base Rewards |
Given for every vote |
Yes |
Yes |
| Streak Rewards |
Bonuses for consecutive voting days (3, 7, 14, 30 days) |
- |
Yes |
| Lucky Votes |
Random chance rewards with configurable tiers |
- |
Yes |
| Milestones |
Rewards at vote count thresholds (10, 50, 100, 500 votes) |
- |
Yes |
Available Actions
Actions are the building blocks of rewards. Combine them freely in each reward config.
| Action |
Description |
Plans |
| Command |
Execute server commands (with {player} substitution) |
All |
| Broadcast |
Send a message to all online players |
All |
| Player Message |
Send a private message to the voter |
All |
| Sound |
Play a sound effect for the voter |
All |
| Item |
Give items to the voter's inventory |
All |
| Title |
Display a title/subtitle on screen |
Pro+ |
| UI Notification |
Show an in-game notification popup |
Pro+ |
Variables available in actions:
| Variable |
Description |
{player} |
Player username |
{service} |
Provider name |
{vote_count} |
Player's total votes |
{streak} |
Current voting streak |
{provider_server_url} |
Provider's server/vote page URL |
Text formatting tags:
| Tag |
Effect |
<#RRGGBB> |
Set hex color |
<BOLD> |
Bold text |
<ITALIC> |
Italic text |
<MONO> |
Monospace text |
<RESET> |
Reset formatting |
Example:
<#FFD700><BOLD>{player}<RESET> voted on <#00BFFF>{service}<RESET>!
Configuration
Location: plugins/votepipe/config.json
{
"token": "vpt_your_token_here",
"api_base_url": "https://api.votepipe.com/v1",
"poll_interval_ms": 5000,
"claim_timeout_ms": 5000,
"enabled": true,
"debug": false
}
| Setting |
Default |
Description |
token |
required |
Plugin token from your dashboard (Settings > Plugin) |
api_base_url |
https://api.votepipe.com/v1 |
API endpoint |
poll_interval_ms |
5000 |
How often to check for new votes (minimum 5000ms) |
claim_timeout_ms |
5000 |
Timeout for Developer mode reward handlers |
enabled |
true |
Enable or disable the plugin |
debug |
false |
Enable verbose logging for troubleshooting |
Commands
| Command |
Description |
/votepipe |
Show available commands |
/votepipe status |
Show connection status, token info, and vote statistics |
/votepipe reload |
Reload configuration from disk |
/votepipe token <token> |
Set plugin token without restarting the server |
Plugin API
For developers who want full control, VotePipe provides both an event system and a static API.
Developer Mode Event Handler
import com.mythlane.votepipe.event.VoteReceivedEvent;
public class MyPlugin extends JavaPlugin {
@Override
public void setup() {
getEventRegistry().register(VoteReceivedEvent.class, event -> {
Player player = server.getPlayer(event.getVoterName());
if (player != null && player.isOnline()) {
player.getInventory().add(new ItemStack(Items.DIAMOND, 5));
player.sendMessage("Thanks for voting on " + event.getProviderName() + "!");
event.success();
} else {
event.fail("Player offline");
}
});
}
}
Event fields:
| Field |
Type |
Description |
voteId |
String |
Vote ID (UUID) |
voterName |
String |
Player username |
provider |
String |
Provider key |
providerName |
String |
Provider display name |
receivedAt |
Instant |
Vote timestamp |
Static API
Add VotePipe as a compile-only dependency:
dependencies {
compileOnly("com.mythlane:votepipe:1.0.1")
}
import com.mythlane.votepipe.api.VotePipe;
// Check connection status
boolean connected = VotePipe.isConnected();
// Get leaderboard
VotePipe.getLeaderboard().thenAccept(leaderboard -> {
for (LeaderboardEntry entry : leaderboard.getEntries()) {
System.out.println(entry.getRank() + ". " + entry.getPlayerName());
}
});
// Get leaderboard with options
VotePipe.getLeaderboard(new LeaderboardOptions()
.period(Period.WEEKLY)
.limit(20)
.provider("hytalecharts")
);
// Trigger manual poll
VotePipe.triggerPoll();
Migrating from Votifier / NuVotifier
VotePipe now natively supports the Votifier protocol (both V1 RSA and V2 HMAC), making migration simpler than ever. You don't need to change how your vote sites send votes — VotePipe can receive them directly.
Migration Steps
Install VotePipe alongside your existing Votifier plugin
- Download and place
VotePipe.jar in your plugins/ folder
- Set your plugin token via
/votepipe token <token>
Add your vote sites as Votifier providers in the VotePipe dashboard
- VotePipe auto-generates RSA keys and HMAC tokens for each provider
- Copy the generated Host, Port, and Public Key into each vote site's Votifier settings
- For V2-compatible sites, also copy the HMAC token
Configure rewards
- Automatic mode: Set up reward configs in the dashboard's visual builder
- Developer mode: Port your existing reward logic to use
VoteReceivedEvent
Remove the old plugin once votes are flowing through VotePipe
- Delete Votifier/NuVotifier from
plugins/
- Clean up old config files
What changes
| Before (Votifier) |
After (VotePipe) |
| Open port 8192 on your server |
No incoming connections needed |
| Votes go directly to your server |
Votes go to VotePipe cloud, plugin polls for them |
| No retry if server is offline |
Automatic retry until delivered |
| No analytics |
Full dashboard with vote history, streaks, leaderboards |
| Config files only |
Visual reward builder + config files |
| No Discord notifications |
Built-in Discord notifications |
Plan Comparison
| Feature |
Free |
Pro |
Network |
| Automatic Rewards |
Yes |
Yes |
Yes |
| Reward Configs |
3 |
5 |
Unlimited |
| Actions per Config |
5 |
10 |
Unlimited |
| Streak Tiers |
- |
5 |
Unlimited |
| Lucky Tiers |
- |
3 |
Unlimited |
| Milestones |
- |
5 |
Unlimited |
Requirements
- Hytale Server
- Java 25 or higher
- VotePipe account (free signup)
Plugin API calls (polling, claims, leaderboard) don't count against your rate limits.
Support
License
MIT License