TownyElections

Hold real elections in your Minecraft town.

Candidacy, campaigns, ranked-choice ballots, and a proper election-night show, built for Towny.

paper 1.21.4+ java 21+ towny 0.100.0.0+

Towny ballot

town of Oakvale, mayoral election

the paper stand-in; the real one opens in-game with /election
  • 3

    voting systems

  • 5

    tie-breakers

  • 16

    commands

  • 13

    placeholders

How it got reborn

Every fork has an origin story. This one starts with a pull request.

  1. chapter one

    The find

    Deep in GitHub I found a plugin that added real elections to Minecraft servers. Towny towns could nominate candidates, campaign, and vote for their mayor. Coolest thing I had seen all week.

  2. chapter two

    The pull request

    I liked it enough to contribute, so I opened a pull request and waited.

  3. chapter three

    The archive

    Turns out the creator had abandoned the project long before. My PR was the poke that reminded them it existed, and they archived the repo right after.

    This repository has been archived by the owner. It is now read-only.

  4. chapter four

    The next day

    I came back the next day to check on my PR and found the whole thing sealed behind GitHub’s archived banner. No merge. No reply. Just a read-only repo and my diff, still open.

  5. chapter five

    The rebirth

    So I forked it and rebuilt it myself, feature by feature, with AI as the pair programmer. That fork is TownyElections Reborn, and it is very much alive.

What it does

  • 01

    Three ways to vote

    Plurality, ranked-choice instant runoff, or approval ballots, chosen per election in config.

  • 02

    Political parties

    Candidates join, create, and colour parties; standings persist between elections and colour every result.

  • 03

    Election night

    A staged results show: title card, boss-bar scoreboard, candidate reveals, sounds, and party-coloured fireworks.

  • 04

    The election desk

    A click-driven inventory GUI with player-head ballots, campaigns, parties, and admin tools.

  • 05

    Winner takes office

    Winners get Towny ranks, optional mayorship, and your console commands; the previous holder’s ranks can be revoked.

  • 06

    Fair counts

    Five tie-breaker strategies, optional secret ballots, and per-IP vote limits against alt abuse.

  • 07

    Always on schedule

    Auto-scheduled recurring elections, reminders for non-voters, and results that survive restarts in data.yml.

  • 08

    Speaks your server

    PlaceholderAPI placeholders, bStats metrics, GitHub update checks, localised colour messages, renamable sub-commands.

Election night is a show

When voting closes, results unfold like a live broadcast: round-by-round counts, a boss-bar scoreboard, then fireworks in the winner’s party colours. Replay it with /election night, fast-forward with /election night skip.

Election night

Oakvale, ranked choice, 9 ballots

round 1

  • Rowan

    Independent

    2

  • Mira

    Reform Coalition

    3

  • Alex

    Reform Coalition

    4

Rowan eliminated, ballots transfer to next preference

round 2

  • Rowan

    Independent

    0

  • Mira

    Reform Coalition

    5

  • Alex

    Reform Coalition

    4

Rowan was eliminated in round 1; Mira reaches 5 of 9 and wins

Mira

mayor-elect of Oakvale, Reform Coalition, 5 of 9 ballots

the demo replays the worked example from the readme, nine ballots and one runoff

The commands

Every sub-command is renamable in config. Click a row to copy it.

root command /election, aliases /elec and /te

commandwhowhat it does
residentsopen the election desk GUI
candidatesstand as a candidate
candidateswithdraw from the race
candidatesset your campaign message
candidatesjoin or create a political party
residentslist current parties and standings
residentscast or change your vote or ballot
residentsview the current election
residentslist candidates, parties, campaigns
residentsview the last concluded results
residentsreplay the last result as a show
adminfast-forward a running show
adminstart an election
adminend voting early and tally
admincancel with no winner
adminreload configuration

permissions, defaults straight from the plugin

nodedefaultgrants
everyonerunning and managing a campaign
everyonevoting
everyoneviewing status, candidates, results
opstart, stop, cancel, reload
opeverything

Get it running

  1. 1

    Download the jar from GitHub Releases.

  2. 2

    Drop it in your server’s plugins/ folder.

  3. 3

    Make sure Towny is installed.

  4. 4

    Restart, then edit plugins/TownyElections/config.yml.

  5. 5

    Run after any change.

Download from releases

requirements

dependencyversionrequired
Paper1.21.4 or neweryes
Java21+yes
Towny0.100.0.0+, 0.103 recommendedyes
PlaceholderAPIany recentoptional

build from source

mvn clean package

the shaded jar lands in target/; the same command runs the tests, including the instant-runoff counter