Developer Mode: Events
Developer
Handle vote events programmatically with custom code (Developer Mode)
💡 New to VotePipe? Consider Automatic Mode for visual configuration without coding!
VoteReceivedEvent
This event is emitted when a vote is received from VotePipe. You must respond with success or failure so VotePipe knows whether to retry.
Event Fields
| Field | Type | Description |
|---|---|---|
| voteId | String | Unique vote identifier (UUID) |
| voterName | String | Player username who voted |
| provider | String | Provider key (e.g., "hytale-servers-pro") |
| providerName | String | Provider display name |
| receivedAt | Instant | When the vote was received |
Response Methods
| Method | When to Use | VotePipe Action |
|---|---|---|
| event.success() | Reward was given successfully | Marks vote as claimed |
| event.fail(reason) | Could not give reward (retry later) | Marks vote as failed, retries next poll |
Example: Basic Reward Handler
java
@EventHandler
public void onVoteReceived(VoteReceivedEvent event) {
String playerName = event.getVoterName();
Player player = Bukkit.getPlayer(playerName);
if (player == null || !player.isOnline()) {
// Player offline - VotePipe will retry next poll
event.fail("Player offline");
return;
}
// Give reward
player.getInventory().addItem(new ItemStack(Material.DIAMOND, 1));
player.sendMessage("Thanks for voting on " + event.getProviderName() + "!");
// Mark as successful
event.success();
}Example: Queued Rewards
For better handling of offline players, you can queue rewards and mark as success:
java
@EventHandler
public void onVoteReceived(VoteReceivedEvent event) {
String playerName = event.getVoterName();
Player player = Bukkit.getPlayer(playerName);
if (player != null && player.isOnline()) {
// Give reward immediately
giveReward(player);
player.sendMessage("Thanks for voting!");
} else {
// Queue reward for when they join
pendingRewards.add(playerName, event.getProvider());
// Still mark as success - we'll handle delivery ourselves
}
// Always mark as success since we're handling the queuing
event.success();
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
List<String> rewards = pendingRewards.get(player.getName());
if (!rewards.isEmpty()) {
for (String provider : rewards) {
giveReward(player);
}
player.sendMessage("You received " + rewards.size() + " vote reward(s)!");
pendingRewards.remove(player.getName());
}
}Tip: If you handle reward queuing yourself, always call event.success(). Only use event.fail() if you want VotePipe to retry the vote.
Common Failure Scenarios
| Scenario | Recommended Action | Result |
|---|---|---|
| Player online, reward given | event.success() | Vote marked claimed |
| Player offline | event.fail("Player offline") | Retry on next poll |
| Inventory full | event.fail("Inventory full") | Retry on next poll |
| Unknown player (typo on vote site) | event.success() | Don't retry forever |
| No response (timeout) | Automatic | Retry on next poll |