- What is Beaconz?
- Architecture Overview
- Getting Started
- Commands Reference
- Permissions
- For Developers
- History
- Credits
- License
- Links
Beaconz is a competitive territory control minigame that transforms Minecraft beacons into strategic objectives. Born from the Silicon Valley Minecraft Meetup over a decade ago, this 2.0 rewrite brings the classic gameplay into the modern era with cutting-edge Paper API integration and Java 21 features.
Think Ingress meets Minecraft โ teams compete to capture beacons, create links between them, and form triangular control fields that claim territory. The larger your triangular territories, the more points you score. Overlap territories for even greater strategic depth!
- Capture Beacons โ Find and claim scattered beacons across the world
- Create Links โ Connect your beacons with other friendly beacons
- Form Triangles โ Three linked beacons create a control field
- Control Territory โ The area inside your triangles scores points
- Defend & Attack โ Protect your network while disrupting enemies
- Win the Game โ Achieve the goal (most territory, triangles, or beacons)
- ๐ Real-time Territory Visualization โ Custom map rendering shows colored territories with darker shading where triangles overlap
- โ๏ธ Active Defense Systems โ Beacons fight back with defensive blocks and projectile launchers
- ๐จ 16 Team Colors โ Support for wool, concrete, terracotta, and stained glass team materials
- ๐บ๏ธ Smart Map System โ Interactive maps display beacons, links, territories, and player positions
- ๐ Flexible Scoring โ Win by area controlled, beacons captured, links created, or triangles formed
- โก Performance Optimized โ Intelligent caching and lazy evaluation for smooth gameplay even with hundreds of beacons
For plugin developers looking to understand, extend, or learn from the codebase:
com.wasteofplastic.beaconz/
โโโ commands/ # Command handlers (player & admin)
โโโ listeners/ # Event listeners for game mechanics
โโโ map/ # Territory map rendering system
โโโ dynmap/ # Optional Dynmap integration
โโโ Game.java # Core game instance & state
โโโ GameMgr.java # Multi-game manager
โโโ Register.java # Beacon & triangle registry
โโโ Scorecard.java # Team scoring & scoreboard
โโโ TriangleField.java # Geometric triangle calculations
โโโ BeaconObj.java # Beacon data & linking logic
Beaconz.javaโ Main plugin class, initialization, world setupGameMgr.javaโ Manages multiple concurrent games across regionsGame.javaโ Individual game instance with players, settings, lifecycleScorecard.javaโ Tracks team scores, manages Minecraft scoreboards, handles timers
-
Register.javaโ Central registry for beacons and triangle fields- Spatial indexing for fast "what triangle contains this point?" queries
- Link validation and network integrity checking
- Triangle computation from beacon networks
-
TriangleField.javaโ Geometric representation of controlled territory- 2D polygon math for point-in-triangle tests
- Area calculation for scoring
- Line intersection detection for field interactions
-
BeaconObj.javaโ Beacon data model- Ownership tracking
- Link management (graph of connected beacons)
- Passive defense block coordination
-
TerritoryMapRenderer.javaโ The crown jewel ๐- Real-time territory visualization on Minecraft maps
- Color gradient system (bright = 1 triangle, dark = many overlapping)
- Intelligent caching (only recomputes when beacons change)
- Supports all 16 dye colors across 4 material types
- See full documentation: Extensively commented for learning
-
MapCoordinateConverter.javaโ Handles world โ pixel โ cursor transformations
DefenseBlock.javaโ Passive defense block mechanicsBeaconPassiveDefenseListener.javaโ Handles defense block placement/activationBeaconProjectileDefenseListener.javaโ Active projectile launching system
| Listener | Purpose |
|---|---|
BeaconCaptureListener |
Handles beacon claiming/capturing |
BeaconLinkListener |
Manages link creation between beacons |
BeaconProtectionListener |
Protects beacons from griefing |
BeaconSurroundListener |
Enforces beacon placement rules |
PlayerMovementListener |
Region boundaries & movement restrictions |
PlayerDeathListener |
Death handling in game zones |
ChatListener |
Team-based chat filtering |
LobbyListener |
Lobby mechanics & game joining |
- Registry Pattern โ Central beacon/triangle registration
- Observer Pattern โ Event-driven game mechanics
- State Pattern โ Game lifecycle management (lobby โ active โ ended)
- Caching Pattern โ Map rendering, triangle queries, color gradients
- Dependency Injection โ
BeaconzPluginDependentbase class - Command Pattern โ Modular command handlers
This rewrite leverages Java 21 capabilities:
- โ Switch Expressions โ Cleaner material โ color mapping
- โ
Records โ
TeamCursorfor immutable data - โ Enhanced Type Inference โ Less verbose generics
- โ Text Blocks โ Cleaner multi-line strings
- โ Pattern Matching โ instanceof with variable binding
- Java 21 or higher
- Paper 1.21.10+ (or compatible fork)
- Maven 3.6+ for building
git clone https://github.com/tastybento/beaconz.git
cd beaconz
mvn clean packageThe compiled JAR will be in target/Beaconz-2.0.0-SNAPSHOT.jar
- Copy the JAR to your Paper server's
plugins/folder - Start/restart the server
- Configure
plugins/Beaconz/config.ymlto your liking - Use
/badmin newgame <name>to create a game (see Commands Reference for details) - Set team spawns with
/badmin setspawn <team> - Players teleport to lobby with
/beaconzand are auto-assigned to teams
- Dynmap โ Territory overlay on Dynmap web interface
- Vault โ Economy integration (planned)
# As an admin, create a simple 2-team game
/badmin newgame quickmatch teams:2 goal:triangles goalvalue:5
# Set spawns for each team (stand at desired location)
/badmin setspawn red
/badmin setspawn blue
# As a player, join the game
/beaconz # Teleport to lobby
/beaconz score # Check your team assignment and scoresSee the complete Commands Reference below for all available commands and options.
Players use the /beaconz (or /bz) command to interact with the game:
| Command | Permission | Description |
|---|---|---|
/beaconz |
beaconz.player |
Teleport to the lobby spawn point |
/beaconz help |
beaconz.player |
Display help for all available player commands |
/beaconz score |
beaconz.player |
View current game scores and your team |
/beaconz sb |
beaconz.player |
Toggle scoreboard display on/off |
/beaconz leave <game> |
beaconz.player.leave |
Leave a game and return to lobby |
/beaconz join <game> |
Operator only | Admin bypass to force join any game (undocumented) |
Examples:
/beaconz # Teleport to lobby
/beaconz score # Check your team and game scores
/beaconz sb # Show/hide scoreboard
/beaconz leave mygame # Leave the game "mygame"
Admins use the /badmin (or /bzadmin) command to manage games and players:
| Command | Description |
|---|---|
/badmin newgame <name> [params...] |
Create a new game with optional custom parameters |
/badmin delete <gamename> |
Permanently delete a game (cannot be undone!) |
/badmin games |
List all active games and their regions |
/badmin listparms <gamename> |
Display all parameters for a specific game |
/badmin force_end <gamename> |
Immediately end a game and declare winner |
/badmin reload |
Save state and reload all configuration files |
Game Creation Parameters:
When creating a new game with /badmin newgame, you can specify these optional parameters:
gamemode:minigame|strategy- Set game mode (default: minigame)size:<number>- Set region size (e.g.,size:500)teams:<number>- Number of teams (e.g.,teams:2)goal:area|beacons|links|triangles- Victory conditiongoalvalue:<number>- Target value for goal (0 = unlimited)countdown:<seconds>- Game timer (0 = count up, >0 = countdown)scoretypes:<types>- Scores to display (e.g.,area-triangles-beacons-links)distribution:<0.01-0.99>- Beacon spawn probability per chunk
Examples:
/badmin newgame pvp1 # Create game with defaults
/badmin newgame ctf teams:2 goal:beacons goalvalue:10 # Capture 10 beacons to win
/badmin newgame mega size:1000 teams:4 goal:area # Large 4-team area control
/badmin listparms pvp1 # View game settings
/badmin delete oldgame # Remove a game
| Command | Description |
|---|---|
/badmin join <gamename> <team> |
Force yourself to join a specific team |
/badmin kick <player> <gamename> |
Remove a player from a game (sends to lobby) |
/badmin kick all <gamename> |
Remove all players from a game |
/badmin switch |
Switch yourself to another team in your current game |
/badmin switch <player> |
Switch another player to a different team |
/badmin teams all |
Display rosters for all games |
/badmin teams <gamename> |
Display team rosters for a specific game |
Examples:
/badmin join pvp1 red # Join the red team in pvp1
/badmin kick PlayerName pvp1 # Kick a player from pvp1
/badmin switch # Switch to another team
/badmin teams pvp1 # View team rosters
| Command | Description |
|---|---|
/badmin claim <team> |
Assign beacon you're standing on to a team |
/badmin claim unowned |
Mark beacon you're standing on as unowned |
/badmin list all <team> |
List all beacons, optionally filtered by team |
/badmin list <gamename> <team> |
List beacons in a game, optionally by team |
/badmin distribution <0.0-1.0> |
Set beacon spawn probability |
Examples:
/badmin claim red # Claim beacon for red team (stand on it)
/badmin claim unowned # Unclaim the beacon
/badmin list pvp1 # List all beacons in pvp1
/badmin list pvp1 blue # List blue team's beacons in pvp1
/badmin distribution 0.3 # 30% chance per chunk
| Command | Description |
|---|---|
/badmin setspawn |
Set lobby spawn point (stand where you want spawn) |
/badmin setspawn <team> |
Set team spawn point for current game |
Examples:
/badmin setspawn # Set lobby spawn to your location
/badmin setspawn red # Set red team spawn (in game region)
| Permission | Default | Description |
|---|---|---|
beaconz.player |
true | Basic player access - use /beaconz commands |
beaconz.player.leave |
op | Ability to leave games with /beaconz leave |
| Permission | Default | Description |
|---|---|---|
beaconz.admin |
op | Full admin access - use all /badmin commands |
Notes:
- Server operators have all permissions by default
- Non-op players can participate in games with just
beaconz.player - The
leavepermission can be granted to all players if desired - Use your permission plugin (LuckPerms, PermissionsEx, etc.) to customize access
Example Permission Setup (LuckPerms):
# Give all players basic access
/lp group default permission set beaconz.player true
# Allow players to leave games on their own
/lp group default permission set beaconz.player.leave true
# Grant admin access to moderators
/lp group moderator permission set beaconz.admin trueWe welcome contributions! Areas of focus:
- ๐ Bug fixes and stability improvements
- โก Performance optimizations
- ๐จ New game modes and victory conditions
- ๐ ๏ธ Admin tools and management features
- ๐ Documentation and examples
- Modern Java practices โ Use Java 21 features where appropriate
- Comprehensive comments โ Explain the "why", not just the "what"
- Null safety โ Use
@NotNulland@Nullableannotations - Testing โ Unit tests with JUnit 5 + MockBukkit
Best places to start:
TerritoryMapRenderer.javaโ Excellent example of caching, coordinate systems, and Paper map APITriangleField.javaโ Clean geometric computation with Java AWTRegister.javaโ Spatial indexing and graph algorithmsScorecard.javaโ Bukkit scoreboard API usage and team management
The codebase demonstrates modern Paper API usage:
- โ
Map rendering with
MapCanvasandMapView - โ Scoreboard teams and objectives
- โ
Custom world generation (
ChunkGenerator) - โ Particle effects and visual feedback
- โ Persistent data storage with YAML
- โ Event-driven architecture
2015 โ Created by the Silicon Valley Minecraft Meetup community
2015-2020 โ Active development and gameplay refinement
2021-2024 โ Maintenance mode as Minecraft APIs evolved
2025 โ Complete rewrite for Minecraft 1.21+ with modern Java and Paper API
The original vision was to create a game that combined strategic thinking with Minecraft's creativity. This rewrite honors that vision while bringing it into the modern Minecraft ecosystem.
- Original Concept โ Silicon Valley Minecraft Meetup
- Original Development โ tastybento & community contributors
- 2.0 Rewrite โ tastybento
- Inspired by โ Niantic's Ingress
MIT License โ See LICENSE.txt for details
- Issues & Bugs: GitHub Issues
- Discussions: GitHub Discussions
- SpigotMC: (coming soon)