EasyGG - Easiest GunGame yet icon

EasyGG - Easiest GunGame yet 0.1

Fast, polished, and fully configurable GunGame plugin for every Minecraft server network!

EasyGG.jpg

EasyGG - Fast, polished, fully configurable GunGame for modern servers 
Bring high-energy PvP to your server with clean admin tools, smart automation, and a player-friendly flow.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

What is GG in Minecraft?
In GunGame (GG), every player fights for themselves - no teams, no alliances, just pure PvP. Players instantly respawn, jump back into action, and compete for kills, points, rank-ups, and bragging rights. A great GunGame feels smooth, fair, and snappy. That's exactly what EasyGG is built for.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Why EasyGG?
EasyGG focuses on admin productivity and player flow:

  • Zero-friction admin tools: one-command safe-zone editor, per-world spawn control, map rotation with countdowns, and map-specific kits.
  • Progression & feedback: player level tracking, killstreak broadcasts, action bar messages, scoreboard and tablist.
  •  Modern & lightweight: no NMS, up-to-date Spigot API support, optimized performance, simple config.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Feature Highlights

  • Safe Zones — Protect spawn/areas with a simple two-point selection flow.
  • Map Rotation — Automated rotation with messages, countdowns, and teleports.
  • Kits & Map Kits — Create kits from inventory and assign per-world.
  • Stats & Levels — Track kills, deaths, K/D, and player level.
  • Killstreaks — Broadcast milestones (configurable in config.yml).
  • Leaderboard — Built-in top list command.
  • Powerups — World spawners with cooldown, actionbar feedback, and multiple types (speed, jump, strength, etc.).
  • DeathBlocks — Optional instakill on touch for configured blocks/liquids (e.g., water, lava).
  • Combat Logging — Tag timer + optional punishments/commands.
  • Scoreboard & Tablist — Show player stats/rank; configurable formatting.
  • Join Flow & Spawn — Spawn countdown, world-specific spawns, optional force-adventure-mode, and QoL rules (prevent drops/breaking/durability).
  • Build Mode — Admins can toggle build mode for editing during GG.
  • Chat Control — Quick clear your own chat or global chat via admin commands.
  • Game Rule Loader — Automatically (re)applies sensible world gamerules on startup.
  • Config-First — Everything is configurable in config.yml.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Requirements & Compatibility

  • Spigot/Paper 1.21+
  • Java 21 recommended (built for modern runtimes)
  • Optional: MySQL/MariaDB if you enable database storage (driver included)


Note: EasyGG is designed for network setups. The scoreboard, join/leave handling, and related messages/mechanics are always active by design. 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Installation

  1. Place the EasyGG jar into your server's plugins folder.
  2. Start the server once to generate config files.
  3. Open plugins/EasyGG/config.yml and adjust settings (messages, killstreaks, chat format, combat tag, powerups, leaderboard, etc.).
  4. (Optional) Enable MySQL in the config and set credentials (details below).
  5. Create kits, set map spawns, and (optional) define safe zones.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Quick Start 

  • Set spawn for your current world: /gg setspawn
  • Create a kit from your inventory: /gg kit create <name> <level>
  • (Optional) Define a safe zone: /gg zone set (twice to complete the two corners)
  • (Optional) Choose default active world (when map rotation is off): /gg activemap <world>
  • (Optional) Start map rotation: /gg mapchange start
  • (Optional) Add a powerup spawn: look at a plate and run /gg powerup create <id> [cooldown]


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Maps & Safe Zones

  • Spawn Per World
    /gg setspawn
     sets the GG spawn point for the current world. Players can use /spawn; a configurable countdown prevents abuse.
  • Safe Zone Setup
    • Stand at corner 1 and run: /gg zone set
    • Stand at the opposite corner and run: /gg zone set again
    • Done — the region is protected, with clear titles on enter/leave
    If you make a mistake: /gg zone del cancels the setup.
    Zones are saved per-world and automatically loaded on server start.
  • Active Map (Join Behavior, No Rotation)
    If automatic map rotation is not used, the world configured under ActiveWorldName in config.yml is treated as the active GG world. All players are teleported to this world on join. For the best GG experience, make sure this world has a properly defined safe zone and spawn.

    Use /gg activemap <world> to update the default active world. This command immediately updates the config value and teleports all online players to the newly set world.

    If you do not enable map rotation and also leave ActiveWorldName unset/unused, players will join in a random/default world as defined by the server. This behavior is not controlled by EasyGG.
  • Map Rotation
    Use /gg mapchange start to begin rotation across your configured worlds, with broadcasted countdowns and automatic teleports. Stop anytime with /gg mapchange stop. If enabled in config and at least two maps are available, rotation can auto-start on server boot.
    When map rotation is enabled, ActiveWorldName is ignored and players will always join the current rotating map.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Kits

  • Create from Inventory: Equip items/armor, then run /gg kit create <name> <level>.
  • List Kits/gg kit list
  • Delete Kit/gg kit delete <name>
  • Players can use assigned map kits automatically on join.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Stats, Levels & Killstreaks

  • Stats GUI/stats to view personal stats (kills, deaths, K/D, level).
  • Levels: Player level increases/decreases on kills/deaths (see config keys).
  • Killstreaks: Broadcast messages at configured thresholds in GG.Killstreaks.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

[/list]

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Combat Logging Control
Tag players in combat for a set duration. Optionally execute server commands, deduct levels, or reset stats if they log out.
Configure under GG.CombatLogging in config.yml.
Common options:
• TagDurationSeconds: how long a player stays in combat after the last hit.
• Punishments.CommandsEnabled + Punishments.Commands: run console commands (e.g., warn/kick).
• Punishments.ResetAllStatsEnabled: reset the offender's stats.
• Punishments.DeductLevelsEnabled + DeductLevels: remove levels on combat logout.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Scoreboard and Tablist

  • Scoreboard: Toggle and customize titles/lines in GG.Scoreboard.
  • Tablist: Show level and format names (e.g., Format: '&f[Lv %LEVEL%] %NAME%').


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Storage Options

  • Flatfile (Default) — Simple YAML storage; no setup required. Files: kits.ymlstats.ymllevels.ymlkillstreaks.yml.
  • MySQL/MariaDB (Optional) — Enable in config.yml under GG.MySQL.
Code:
GG:
  MySQL:
    Enabled: true
    Host: 'localhost'
    Port: 3306
    Username: 'minecraft'
    Password: 'password'



━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Optional Chat Styling
You can optionally enable EasyGG's chat formatting and styling in config.yml:

• Path: GG.Chat
• Enabled: true/false
• Format: e.g. "%PREFIX% [Lv %LEVEL%] %PLAYER%&7: %MESSAGE%"
• DefaultPrefix: e.g. "&7"

When enabled, EasyGG will format player chat according to your Format. You can include rank/prefix placeholders.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Commands & Usage

  • /stats — View your GG stats
  • /spawn — Teleport to the map spawn (with optional countdown/cooldown)
  • /gg leaderbord — Open the leaderboard GUI (top 3)
  • /gg
    • /gg — Info & help
    • /gg tp <world> — Teleport to a world
    • /gg activemap <world> — Set the default active world (updates ActiveWorldName) and teleport all players there
    • /gg zone set — Start/complete a safe-zone selection
    • /gg zone del — Cancel a safe-zone selection
    • /gg spawn — Teleport to current world’s map spawn
    • /gg setspawn — Set/update spawn for current world (admin)
    • /gg build — Toggle build mode (admin)
    • /gg mapchange <start|stop|state> — Control map rotation
    • /gg deathblocks <on|off> — Toggle instakill blocks/liquids
    • /gg powerup create <powerupname> [cooldown] — Create a powerup spawn at the plate you are looking at (admin)
    • /gg powerup remove <powerupname> — Remove the powerup spawn at the plate you are looking at (admin)
    • /gg kit list — List kits and map assignments
    • /gg kit create <name> <level> — Create a kit for a specific level
    • /gg kit delete <name> — Delete a kit (admin)
    • /gg kit setmap <name> — Assign kit to current world (admin)
    • /gg resetstats <stats|killstreaks|level|all> — Reset stats (admin)
    • /gg cc — Clear your own chat (admin)
    • /gg ccg — Clear global chat (admin)

Note: /gg resetstats lets you target a specific category or all.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

API Documentation
You can find detailed API documentation in the documentation, including event subscription examples and integration tips.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Permissions Overview

  • easygg.* — Full access
  • easygg.gg — Use /gg (default: true)
  • easygg.world.tp — World teleport (default: op)
  • easygg.kit — Use kits (default: true)
  • easygg.admin.kit — Manage kits (default: op)
  • easygg.admin.setspawn — Set spawn (default: op)
  • easygg.admin.cc — Clear chat (default: op)
  • easygg.admin.zone — Manage safe zones (default: op)
  • easygg.admin.resetstats — Reset player statistics (default: op)
  • easygg.admin.build — Toggle build mode (default: op)
  • easygg.admin.mapchange — Control map rotation (default: op)
  • easygg.admin.activemap — Use /gg activemap (default: op)
  • easygg.admin.chatclear — Use /gg cc and /gg ccg (default: op)
  • easygg.admin.deathblocks — Toggle instakill blocks/liquids (default: op)
  • easygg.admin.powerup — Manage powerup spawns (default: op)


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Configuration Tips

  • Adjust killstreak broadcasts under GG.Killstreaks.
  • Customize scoreboard and tablist in their respective sections.
  • Use the action bar kill messages to keep feedback snappy and non-intrusive.
  • Configure powerups under GG.Powerups and use admin commands to place spawns.
  • Toggle instakill blocks with GG.KillPlayerOnBlockTouch and set GG.DeathBlockList.
  • Tune leaderboard defaults under GG.Leaderboard.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Ready to host a smooth, modern GG?
Install EasyGG and let your players jump straight into the action. 


EasyGG — Admin & Setup Documentation

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Prerequisites

  • Server: Spigot/Paper 1.21+
  • Java: 21 recommended
  • Optional: MySQL/MariaDB if you enable database storage


Install / First Run

  1. Place the EasyGG jar into plugins.
  2. Start the server once to generate config files.
  3. Open plugins/EasyGG/config.yml and adjust the basics (messages, killstreaks, chat format, combat tag, powerups, leaderboard, etc.).
  4. Proceed with the Quick Setup below.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Quick Setup (recommended order) 

  1. Go to your GG world and set the spawn: /gg setspawn
  2. Create your first kit from your inventory: /gg kit create <name> <level>
  3. (Optional) Define a safe zone (see section below).
  4. (Optional) Not using rotation? Set the default active world: /gg activemap <world>
  5. (Optional) Enable Map Rotation (see section below).
  6. (Optional) Create a powerup spawn (look at a plate): /gg powerup create <id> [cooldownSeconds]


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Maps & Safe Zones

  • World spawn
    Use /gg setspawn in each world where you run GG. Players can use /spawn; a countdown prevents abuse (configurable).
  • Safe zone setup (two corners)
    • Stand at corner 1 and run: /gg zone set
    • Stand at the opposite corner and run: /gg zone set again
    • Done - the region is protected, with titles on enter/leave
    If you make a mistake: /gg zone del cancels the setup.
    Safe zones are saved per-world and auto-loaded on server start.
  • Active map when rotation is OFF
    If you are not using Map Rotation, the world set under ActiveWorldName in config.yml is considered the active GG world. On join, players are teleported to this world automatically. For best results, ensure the world has a safe zone and a valid spawn.

    Use /gg activemap <world> to update ActiveWorldName. Executing this command also teleports all online players to the newly set world immediately.

    If Map Rotation is disabled and ActiveWorldName is not set/used, players will join a random/default world defined by the server. This fallback is not controlled by EasyGG.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Kits Management

  • Create from inventory: equip items/armor, then run /gg kit create <name> <level>
  • List kits/gg kit list
  • Delete kit/gg kit delete <name>
    Players joining that world will receive the assigned map kit automatically.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Map Rotation

  • Start/gg mapchange start
  • Stop/gg mapchange stop
  • Status/gg mapchange state
    Rotation broadcasts countdowns and teleports players when switching. If GG.UseMapchange is enabled and at least two maps are configured/available, rotation can auto-start on boot.


Note: When Map Rotation is enabled, ActiveWorldName is ignored. Players always join the current rotating map.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Stats, Levels & Killstreaks

  • View stats/stats
  • Levels: Level up/down on kills/deaths. Displayed in scoreboard/tablist.
  • Configuration: adjust killstreak broadcasts under GG.Killstreaks.
  • Reset stats (admin)/gg resetstats <stats|killstreaks|level|all>
    Use categories to target specific subsets or all.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Leaderboard

  • Command/gg leaderbord
  • Usage/gg leaderbord — opens the leaderboard GUI (top 3)
  • Formatting: configure GG.Leaderboard.Header and GG.Leaderboard.LineFormat (placeholders: %pos%, %name%, %level%, %hs%, %kd%)


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Powerups 

  • What they are: Temporary effects or actions granted via world spawners (e.g., speed, jump, strength, invisibility, instant heal, freeze grenade, etc.).
  • Create/Remove: Look at a pressure/weight plate and use /gg powerup create <id> [cooldownSeconds] or /gg powerup remove <id>
  • Config pathGG.Powerups — toggle, cooldown, display, actionbar/title texts, and definitions.
  • Messages: Action bar messages configurable at GG.Powerups.ActionBar. Title on use at GG.Powerups.UsageTitle.
  • Events: Listen for PowerupActivateEvent to react to activations.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

DeathBlocks 

  • What it does: Instantly kills players who touch/stand on configured blocks/liquids (e.g., WATER, LAVA).
  • Toggle/gg deathblocks <on|off> — broadcasts a message to all players.
  • Config pathGG.KillPlayerOnBlockTouch (boolean) and GG.DeathBlockList (list of Bukkit Material names).
  • Messages: Broadcast texts under GG.Messages.DeathBlocks.*. Per-death message uses GG.Messages.Death.DeathBlock.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Combat Logging Control 
Tag players in combat and punish logout during tag time.

  • Config pathGG.CombatLogging
  • Key options:
    • TagDurationSeconds - duration after last hit
    • Punishments.CommandsEnabled + Punishments.Commands - console cmds (e.g., warn/kick)
    • Punishments.ResetAllStatsEnabled - reset offender stats
    • Punishments.DeductLevelsEnabled + DeductLevels - remove levels


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Chat Styling (optional)
Enable EasyGG chat formatting to standardize PvP chat style.

  • Config pathGG.Chat
  • KeysEnabledFormatDefaultPrefix
  • Example Format"%PREFIX% [Lv %LEVEL%] %PLAYER%&7: %MESSAGE%"


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Scoreboard & Tablist

  • Scoreboard: configure visibility/lines under GG.Scoreboard
  • Tablist: format and level display (example format provided in description)


Note: EasyGG targets network setups. The scoreboard, join/leave handling, and related messages/mechanics are always active. 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Subscribing to EasyGG Events
Integrate with EasyGG by subscribing to custom events. This allows you to easily integrate your own money/currency systems.

  • KillstreakStartEvent - Triggered when a player's killstreak starts.
  • KillstreakChangeEvent - Triggered when a player's killstreak changes.
  • KillstreakEndEvent - Triggered when a player's killstreak ends.
  • EasyGGKillEvent - Triggered when a player kills another player.
  • EasyGGDeathEvent - Triggered when a player dies from a non-PvP cause.
  • LevelChangeEvent - Triggered when a player's level changes (up or down). Includes previous and current level values.
  • PowerupActivateEvent - Triggered when a player activates a powerup.


For a practical example, see the GitHub Gist with a ready-to-use plugin main file.

Note: All events are fired on the main server thread. Keep your event handlers lightweight.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Admin Utilities ️

  • Build Mode/gg build — toggle admin build mode
  • Clear Chat/gg cc (self), /gg ccg (global)
  • Teleport World/gg tp <world>
  • Active Map/gg activemap <world> — set ActiveWorldName and teleport all players to it
  • Spawn/gg spawn (teleport), /gg setspawn (set)
  • DeathBlocks/gg deathblocks <on|off> — toggle instakill blocks/liquids
  • Powerups/gg powerup create <id> [cooldown]/gg powerup remove <id>
  • Main Help/gg


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Storage

  • Flatfile (Default)kits.ymlstats.ymllevels.ymlkillstreaks.yml
  • MySQL (Optional): enable in GG.MySQL. Stats/levels/killstreaks can be stored in MySQL; other data may remain YAML.


MySQL Quick Example

Code:
GG:
  MySQL:
    Enabled: true
    Host: 'localhost'
    Port: 3306
    Username: 'minecraft'
    Password: 'password'


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Permissions (Summary)

  • easygg.* — everything
  • easygg.gg — use /gg (default: true)
  • easygg.world.tp — world teleport
  • easygg.kit — use kits (default: true)
  • easygg.admin.kit — manage kits
  • easygg.admin.setspawn — set spawn
  • easygg.admin.cc — clear chat
  • easygg.admin.zone — manage safe zones
  • easygg.admin.resetstats — reset stats
  • easygg.admin.build — toggle build mode
  • easygg.admin.mapchange — change maps
  • easygg.admin.activemap — use /gg activemap
  • easygg.admin.chatclear — used by /gg cc and /gg ccg
  • easygg.admin.deathblocks — toggle instakill blocks/liquids
  • easygg.admin.powerup — create/remove powerup spawns


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Troubleshooting 

  • Map rotation won’t start: ensure GG.UseMapchange is true and at least 2 maps are available.
  • Spawn not set: use /gg setspawn in the target world.
  • Stats not saving to MySQL: verify credentials in GG.MySQL and check console for connection logs.
  • Players keep items/durability changes: review QoL toggles in config (prevent drops/durability/breaking).
  • Combat tag not punishing: enable punishments and configure commands/values under GG.CombatLogging.Punishments.
  • Powerup command not working: ensure you are looking at a pressure/weight plate; use a valid powerup id from the config; check permissions.
  • DeathBlocks not working: toggle with /gg deathblocks on and ensure GG.KillPlayerOnBlockTouch is true and GG.DeathBlockList contains your blocks.