mc-voting-polls

flexible in-game voting and polling system for Bukkit/Spigot/Paper servers. Admins can create command-based polls, while regular players can create restricted, silent polls from admin-approved templates.

25

mc-voting-polls

Testet only on mc version 1.21.11

flexible in-game voting and polling system for Bukkit/Spigot/Paper servers. Admins can create command-based polls, while regular players can create restricted, silent polls from admin-approved templates. Polls are displayed in a GUI, support repetition, reminders, persistence, and multilingual messages.

---

Features

* In-game YES / NO voting * Admin-controlled polls with full configuration * Player-created polls limited to whitelisted templates * Optional repeating polls * Silent polls (no broadcast or reminders) * GUI-based poll list and detailed view * Persistent storage (survives restarts) * Configurable reminders * Language and message customization * Vote history tracking

---

Installation

1. Place the plugin JAR into the `plugins/` folder 2. Start the server once to generate config files 3. Configure:

* `config.yml` * `lang.yml` * `polls.yml` * `history.yml` 4. Reload configuration with:

``` /votepoll reload ```

---

Core Concepts

Poll

A poll represents a vote with the following properties:

* Unique ID (random or specified) * Display name * Description * Console command to execute on success * Duration (seconds) * Minimum YES / NO votes * Optional repeat interval * Silent flag * Creator (player, admin, or console)

Supported command placeholders:

* `{target}` * `{creator}`

---

Templates (`customCommands`)

Poll templates defined in `config.yml`. They are reusable and safe predefined commands.

Only templates listed in `playerAllowedCommands` can be used by non-admin players.

---

Player-Created Polls

* Can only be created from allowed templates * Always receive a random poll ID * Always silent * No global notifications or reminders * Visible only via GUI

Example:

``` /votepoll add example_ban --target=RareHuman ```

---

Admin-Created Polls

* Full control over all poll parameters * Can broadcast to players * Can send reminders * Can be repeating or silent * Can specify custom IDs

---

Commands

Player Commands

Open poll GUI:

``` /votepoll ``` Preview the poll info:

``` /preview <id> ```

Create a poll from an allowed template:

``` /votepoll add <templateId> [--target=PLAYER] ```

Vote on a poll:

``` /vote <pollId> yes /vote <pollId> no ```

Toggle reminders:

``` /votepoll notify on /votepoll notify off ```

Set language:

``` /votelang <languageCode> ```

---

Admin Commands (`votepoll.admin` or OP)

Create a poll:

``` /votepoll add [id] <duration> <minYes> <minNo> "<display>" <command> [flags] ```

Supported flags:

* `--target=PLAYER` * `--repeat` * `--repeat=SECONDS` * `--interval=SECONDS` * `--silent` * `--display=NAME`

Examples:

``` /votepoll add banVote 300 5 3 "Ban toxic player" ban {target} --target=BadPlayer /votepoll add 600 4 2 "Restart server?" restart --silent ```

Other admin commands:

``` /votepoll cancel <id> /votepoll reload /votepoll preview <id> ```

---

GUI

Active Votes GUI

* Lists all active polls * Displays full poll information:

* Name * Description * Command * End date * Creator * Required YES / NO votes * Poll ID * Time remaining * Vote command

Poll Detail GUI

* Shows the same information as notifications * Includes YES and NO voting buttons

---

Notifications and Reminders

* Admin-created polls:

* Broadcast on creation * Periodic reminders based on `reminderIntervalSeconds` * Player-created polls:

* Never broadcast * Never send reminders * Players can opt out of reminders individually

---

Persistence

* `polls.yml` stores active polls * `history.yml` stores completed polls * Polls resume correctly after server restart

---

Configuration Example

```yaml reminderIntervalSeconds: 1800 defaultRepeatIntervalSeconds: 60

playerAllowedCommands: - "example_ban"

customCommands: - id: "example_ban" display: "Ban example player" description: "Ban a player for breaking rules" command: "ban {target} Breaking server rules" durationSeconds: 300 minYes: 5 minNo: 3 repeat: false repeatIntervalSeconds: 0

messages: usage_votepoll: "&cUsage: /votepoll add|cancel|list|reload|notify" no_permission: "&cYou don't have permission to do that." usage_cancel: "&cUsage: /votepoll cancel <id>" unknown_subcommand: "&cUnknown subcommand." vote_failed: "&cUnable to vote." poll_canceled: "&cVote canceled: &6{display} (id: {id})" broadcast_new_poll: "&aNew vote created: &6{display} &f(id: {id})" vote_passed: "&aVote passed: &6{display}" vote_failed: "&cVote failed: &6{display}" vote_passed_majority: "&aVote passed (majority): &6{display}" vote_failed_majority: "&cVote failed (majority): &6{display}" ```

---

Permissions

| Permission | Description | | ---------------- | ----------------------------------------- | | `votepoll.admin` | Full administrative access | | none | Required for voting and allowed templates |

---

Important Behavior

* Players receive a permission error if the template is not listed in `playerAllowedCommands` * Player-created polls are silent by design * If a repeating poll has no valid interval, `defaultRepeatIntervalSeconds` is used

---

ADS