GameVoting

A Minecraft plugin to vote for games and launch the game server with CloudNet.

46

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

ADS