GameVoting
A Minecraft plugin to vote for games and launch the game server with CloudNet.
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
GameVoting
GameVoting
中文文档 | User Guide | 使用文档
A powerful and feature-rich Minecraft voting system plugin for Paper servers, designed for CloudNet v4 network environments. Support for automatic game selection, player ready system, holographic displays, and multi-database persistence.
✨ Features
🎮 Voting System
- Multi-phase Voting Flow - Automatic item distribution based on player count (≥6 players) - Pre-voting ready phase with emerald trigger items - Voting phase with compass menu interface - Post-voting ready phase with dye-based ready indicators
- Smart Player Ready System - Players receive emerald items when ≥6 players online - Right-click to mark ready/unready status - Automatic voting start when all players are ready - Real-time hologram updates showing ready count
- Flexible Voting Modes - Manual start: `/vote start [duration]` - Always starts voting immediately - Automatic start: Emerald ready system triggers voting when all players ready - Custom voting duration (default 60 seconds)
📊 Holographic Displays
- Dynamic Display States - Idle: Historical top 10 winning games with vote counts - Pre-voting Ready: Shows ready player count and progress - Voting Active: Current available games with live vote counts - Vote Ended: Top 10 voted games from current session - Post-teleport: Returns to historical top 10
- Multi-location Support - Create holograms at any location with `/vote holograms create` - Automatic synchronization across all hologram locations - List and remove holograms with simple commands
🗄️ Database Integration
- Multi-database Support - PostgreSQL (recommended for production) - MySQL/MariaDB - MongoDB - Optional: Can run without database
- Vote History Tracking - Records winning game, total votes, player count - Stores detailed vote breakdown per game - Timestamp-based historical analytics - Automatic top 10 winner statistics
🌐 CloudNet Integration
- Seamless Service Management - Automatic CloudNet service detection - Service status-based game filtering - Player teleportation via proxy commands - Only teleports players who actually voted
- Service Configuration - Game-to-service mapping via `games.yml` - Configurable service name patterns - Support for multiple services per game type
🌍 Internationalization
- Multi-language Support - English (en-US, en-UK) - Simplified Chinese (zh-CN) - Easy to add custom languages
- Complete Translation Coverage - All commands, messages, and UI elements - Item names and lore - Hologram displays - Error messages and feedback
🎯 Advanced Features
- Smart Item Management - Automatic item distribution in slot 9 - Different items for different server states - Undropable vote items with persistent data - Color-coded ready status indicators
- Party System Integration - Create and manage player parties - Party-based game teleportation - Party member management
- Robust Permission System - Fine-grained permission control - Admin vs player command separation - Configurable access levels
📋 Requirements
- Server - Paper 1.16 or higher (Spigot/Bukkit not supported) - Java 17 or higher - CloudNet v4 (4.0.0-RC10 or higher)
- Dependencies - DecentHolograms 2.8.6+ (for hologram displays) - CloudNet Driver & Bridge modules
- Optional - PostgreSQL 12+ / MySQL 8.0+ / MongoDB 5.0+ (for vote history)
🚀 Installation
1. Download the plugin ```bash
Build from source
git clone https://github.com/yourusername/GameVoting.git cd GameVoting mvn clean package ```
2. Install dependencies - Download and install Install dependencies - Ensure CloudNet v4 is properly configured
3. Deploy the plugin ```bash
Copy the compiled JAR to your plugins folder
cp target/GameVoting-1.1.0.jar /path/to/server/plugins/ ```
4. Configure the plugin - Start the server to generate default configuration files - Edit `plugins/GameVoting/config.yml` - Configure `plugins/GameVoting/games.yml` - Restart the server
⚙️ Configuration
config.yml
```yaml
Debug mode for detailed logging
debug: false
Language: en-US, en-UK, zh-CN
language: "en-US"
CloudNet proxy service name
proxy-service-name: "Proxy-1"
Database configuration
database: enabled: true type: "postgresql" # postgresql, mysql, mongodb host: "localhost" port: 5432 database: "gamevoting" username: "postgres" password: "password"
Hologram locations (managed via commands)
holograms: locations: [] ```
games.yml
```yaml games: - id: "skywars" name: "SkyWars" service-name: "SkyWars-{number}" icon: "GOLDEN_SWORD" description: "Fight in the sky!"
- id: "bedwars" name: "BedWars" service-name: "BedWars-{number}" icon: "RED_BED" description: "Protect your bed!" ```
📖 Usage
For Players
1. Automatic Voting (≥6 players) ``` - Wait for emerald item in slot 9 - Right-click to mark ready - Voting starts when all players ready ```
2. Manual Voting ``` - Admin starts: /vote start - Receive compass in slot 9 - Right-click to open voting menu - Select your preferred game ```
3. Post-voting Ready ``` - Receive gray dye after voting ends - Right-click to mark ready - Changes to lime dye when ready - Game starts when all players ready ```
For Administrators
```bash
Start voting manually
/vote start [duration]
Force start game (skip ready phase)
/vote forcestart
Cancel active voting
/vote cancel
Reload configuration
/vote reload
Hologram management
/vote holograms create # Create at current location /vote holograms list # List all holograms /vote holograms remove <id> # Remove specific hologram
Join game service
/vote join <service>
Party commands
/party create # Create a party /party invite <player> # Invite a player /party join <player> # Join a party /party leave # Leave current party /party disband # Disband your party ```
🔌 API Usage
For Developers
```java // Get voting session VotingSession session = VotingSession.getInstance();
// Check voting state boolean isVoting = session.isVotingInProgress(); boolean isReady = session.isReadyPhaseActive();
// Get vote counts Map<String, Integer> votes = session.getVoteCounts();
// Access database VoteHistoryRepository repo = DatabaseManager.getInstance() .getVoteHistoryRepository(); List<VoteHistory> history = repo.getTopWinningGames(10);
// Hologram management HologramManager manager = plugin.getHologramManager(); manager.updateAllDisplays(DisplayState.VOTING_ACTIVE); ```
🏗️ Project Structure
``` GameVoting/ ├── src/main/java/com/talexck/gameVoting/ │ ├── GameVoting.java # Main plugin class │ ├── commands/ # Command handlers │ │ ├── VoteCommand.java # Voting commands │ │ └── PartyCommand.java # Party commands │ ├── config/ # Configuration management │ │ ├── GameConfig.java # Game configuration │ │ └── ConfigLoader.java # Config loader │ ├── voting/ # Voting system │ │ └── VotingSession.java # Vote session manager │ ├── database/ # Database layer │ │ ├── DatabaseManager.java # Database connections │ │ ├── models/ # Data models │ │ └── repositories/ # Data repositories │ ├── hologram/ # Hologram displays │ │ ├── HologramManager.java # Hologram manager │ │ └── HologramDisplayManager.java │ ├── listeners/ # Event listeners │ │ ├── VoteItemListener.java # Vote item interactions │ │ ├── PlayerJoinListener.java # Player join events │ │ └── VotingPlayerQuitListener.java │ ├── cloudnet/ # CloudNet integration │ │ └── CloudNetAPI.java # CloudNet API wrapper │ ├── party/ # Party system │ │ └── PartyManager.java # Party management │ └── utils/ # Utility classes │ ├── item/VoteItem.java # Vote item management │ ├── MessageUtil.java # Message utilities │ └── ActionBarUtil.java # ActionBar utilities ├── src/main/resources/ │ ├── plugin.yml # Plugin metadata │ ├── config.yml # Default config │ ├── games.yml # Game definitions │ └── lang/ # Language files │ ├── en-US.yml │ ├── en-UK.yml │ └── zh-CN.yml └── pom.xml # Maven configuration ```
🤝 Contributing
Contributions are welcome! Please follow these guidelines:
1. Fork the repository 2. Create a feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request
📝 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- PaperMC - High-performance Minecraft server - CloudNet - Minecraft cloud system - DecentHolograms - Hologram API - All contributors and users of this plugin
📧 Support
- Chinese Documentation: Chinese Documentation - Chinese Documentation: %%MD1%% - Chinese Documentation: %%MD2%%
🔄 Version History
v1.1.0
- Added pre-voting ready system with emerald triggers - Implemented post-voting ready phase with dye indicators - Added player count-based item distribution - Enhanced hologram display states - Improved CloudNet integration - Added vote history database tracking - Teleport filtering for voted players only
v1.0.0
- Initial release - Basic voting system - CloudNet service integration - Hologram displays - Multi-language support