What Is a Plugin?
Minecraft server plugins are JAR (Java Archive) files that add new features to your server. They are developed against the Bukkit/Spigot/Paper API and placed in your server's plugins/ folder.
The plugin system takes your Minecraft server beyond vanilla: permission management, economy, region protection, chat formatting, minigames and much more are added through plugins.
- Bukkit API — the original plugin API, works with CraftBukkit
- Spigot API — the extended version of Bukkit, offering more events and features
- Paper API — a modern API built on top of Spigot, with advanced features such as async chunk loading
- Folia API — the multithreaded version of Paper, for high player counts
Every plugin is loaded when the server starts, its onEnable() method is called, and it is cleaned up with onDisable() when the server shuts down. Plugins can declare depend and softdepend relationships with each other.
How to Install a Plugin
Installing a plugin has three steps: download, drop in, restart. The .jar file downloaded from a trusted source is placed in the plugins/ folder and the server is fully restarted.
Trusted Download Sources
| Platform | URL | Notes |
|---|---|---|
| SpigotMC | spigotmc.org | The largest plugin marketplace, premium and free plugins |
| Modrinth | modrinth.com | A modern platform that prioritises open source |
| Hangar | hangar.papermc.io | PaperMC's official plugin repository |
| GitHub Releases | github.com | Official distributions of open-source plugins |
| Bukkit Dev | dev.bukkit.org | The old but still-used CurseForge source |
Installation Steps
# 1. Download the plugin JAR
cd ~/server/plugins
wget https://download.luckperms.net/1556/bukkit/loader/LuckPerms-Bukkit-5.4.141.jar
# 2. Stop the server completely
screen -r minecraft
stop
# 3. Start the server again
screen -S minecraft
java -Xms4G -Xmx4G -jar paper.jar noguiPlugin File Structure
On its first run, every plugin creates its configuration files under a plugins/PluginName/ folder. Understanding this file structure is essential for configuring plugins correctly.
plugins/
├── LuckPerms/
│ ├── config.yml # Main configuration
│ ├── luckperms-bukkit.jar # Loader file
│ └── translations/ # Language files
├── Essentials/
│ ├── config.yml # Main configuration (600+ lines)
│ ├── kits.yml # Kit definitions
│ ├── worth.yml # Item prices
│ └── userdata/ # Player data
├── WorldGuard/
│ ├── config.yml
│ └── worlds/
│ └── world/
│ └── regions.yml # Region definitions
└── CoreProtect/
├── config.yml
└── database.db # SQLite databaseconfig.yml Basics
Most plugins use a configuration file in YAML format. In YAML files indentation is critical — always use spaces, never tabs.
# Example config.yml structure
settings:
debug: false
locale: en_US
auto-save: true
auto-save-interval: 300
database:
type: sqlite # sqlite, mysql, h2
host: localhost
port: 3306
name: plugin_dbPermission Nodes
Every plugin defines permission nodes that control access to its commands. These nodes usually follow the plugin.command format.
# Example permission definitions from a plugin.yml
permissions:
essentials.home:
description: Permission to use the home command
default: true
essentials.ban:
description: Permission to ban players
default: op
essentials.*:
description: All EssentialsX permissions
children:
essentials.home: true
essentials.ban: trueThe Must-Have Plugins
The table below summarises the core plugins that belong on almost every Minecraft server. Each has a different job, a different relationship to the others and a different priority.
| Plugin | Job | Dependency | Priority |
|---|---|---|---|
| <strong>Vault</strong> | Economy and permission API bridge | None | Mandatory |
| <strong>LuckPerms</strong> | Permission and group management | None | Mandatory |
| <strong>EssentialsX</strong> | Core commands, economy, teleport | Vault (recommended) | Mandatory |
| <strong>WorldEdit</strong> | World editing tools | None | Mandatory |
| <strong>WorldGuard</strong> | Region protection, flag system | WorldEdit | Mandatory |
| <strong>CoreProtect</strong> | Logging, rollback, inspect | None | Mandatory |
| <strong>TAB</strong> | Tab list, nametags, scoreboard | PlaceholderAPI (recommended) | Highly Recommended |
| <strong>DiscordSRV</strong> | MC-Discord chat synchronisation | None | Recommended |
| <strong>Spark</strong> | Performance profiler | None | Highly Recommended |
| <strong>ViaVersion</strong> | Multi-version support | None | Situational |
| <strong>Geyser</strong> | Bedrock support | Floodgate | Situational |
Vault
Vault is a bridge plugin that provides a shared API layer for economy, permission and chat systems on Minecraft servers. It offers no feature of its own; it lets other plugins talk to each other.
EssentialsX, for example, provides an economy system and LuckPerms provides a permission system — Vault connects the two. Chest shop plugins reach the economy through Vault, and chat plugins get prefix/suffix data through Vault.
- Economy API: connects economy plugins such as EssentialsX and CMI to other plugins
- Permission API: integrates permission plugins such as LuckPerms with other systems
- Chat API: shares prefix, suffix and chat format information
# Installing Vault
cd ~/server/plugins
wget https://github.com/MilkBowl/Vault/releases/latest/download/Vault.jar
# Restart the server
# Vault detects LuckPerms and EssentialsX automaticallyLuckPerms
LuckPerms is the industry-standard permission management plugin for modern Minecraft servers. It offers a group system, inheritance, prefixes/suffixes, a web editor and multi-platform support. It has replaced the older PermissionsEx and GroupManager.
For more detail on LuckPerms, take a look at our comprehensive guide:
# Quick start commands
/lp editor # Open the web editor
/lp creategroup admin # Create a group
/lp group admin parent add default # Set up inheritance
/lp user Player parent set admin # Assign a player to the groupEssentialsX
EssentialsX is a comprehensive plugin with more than 100 commands: home/spawn/warp teleport system, economy, chat formatting, kits, private messaging and much more. It is the foundation stone of almost every server.
Take a look at our detailed EssentialsX configuration guide:
# Key settings in plugins/Essentials/config.yml
teleport-cooldown: 3
teleport-delay: 3
starting-balance: 1000
currency-symbol: '$'
max-homes: 3
spawn-on-join: trueWorldEdit
WorldEdit is a powerful tool that lets you make large-scale edits to a Minecraft world. Selecting regions, replacing blocks, copy-paste, generating shapes and saving schematics can all be done from the command line.
| Command | Description | Example |
|---|---|---|
| <code>//wand</code> | Gives you the selection tool (a wooden axe) | Left click = pos1, right click = pos2 |
| <code>//set <block></code> | Fills the selection with the given block | <code>//set stone</code> |
| <code>//copy</code> | Copies the selection to the clipboard | Relative to the player's position |
| <code>//paste</code> | Pastes from the clipboard | <code>//paste -a</code> (ignore air) |
| <code>//undo</code> | Undoes the last operation | <code>//undo 5</code> (last 5 operations) |
| <code>//replace <old> <new></code> | Replaces the given blocks | <code>//replace dirt grass_block</code> |
| <code>//sphere <block> <radius></code> | Generates a sphere | <code>//sphere glass 10</code> |
| <code>//cyl <block> <radius> <height></code> | Generates a cylinder | <code>//cyl stone 5 10</code> |
# A common WorldEdit workflow
//wand # Grab the selection tool
# Left click for point 1, right click for point 2
//set air # Clear the selection
//copy # Copy the build
//paste # Paste it somewhere else
//undo # Undo if you made a mistakeWorldGuard
WorldGuard works together with WorldEdit to provide a region-based protection system. It supports spawn protection, PvP zones, mob spawn control, enter/exit messages and much more.
| Command | Description |
|---|---|
| <code>//wand</code> + selection | Mark the region boundaries with WorldEdit |
| <code>/rg define <name></code> | Define a new region |
| <code>/rg flag <region> <flag> <value></code> | Set a flag on the region |
| <code>/rg addowner <region> <player></code> | Add an owner to the region |
| <code>/rg addmember <region> <player></code> | Add a member to the region |
| <code>/rg info <region></code> | Show region details |
| <code>/rg list</code> | List every region |
| <code>/rg remove <region></code> | Delete the region |
# Example: creating a spawn region
//wand
# Select point 1 and point 2
//expand vert # Expand from sky to bedrock
/rg define spawn
/rg flag spawn pvp deny
/rg flag spawn build deny
/rg flag spawn mob-spawning deny
/rg flag spawn greeting &aWelcome to the spawn area!Take a look at our detailed WorldGuard guide:
CoreProtect
CoreProtect is a logging/rollback plugin that records every block change, chest access, chat message and command on your server. It is indispensable for detecting and undoing griefing.
Inspect Mode
In inspect mode you can click any block to see who changed it and when:
/co inspect
# Now click any block
# It shows who placed/broke it, when, and what it was changed to
# Run /co inspect again to leave the modeRollback
Undo the changes made by a specific player or within a time range:
# Roll back one player's last hour
/co rollback user:Griefer time:1h
# Roll back one player's last 24 hours within a 20-block radius
/co rollback user:Griefer time:24h radius:20
# Roll back block breaks only
/co rollback user:Griefer time:6h action:break
# Roll back TNT explosions
/co rollback time:1h action:tntLookup
You can view the log records without rolling anything back:
# Search all block breaks by a player
/co lookup user:Player action:break time:7d
# Show every change made in a given area
/co lookup radius:10 time:24h
# Check chest access logs
/co lookup user:Player action:container time:3dTAB Plugin
TAB is a comprehensive plugin for customising the player list (the Tab key), nametags and the scoreboard. It integrates with PlaceholderAPI to show dynamic information.
Tab List Configuration
# plugins/TAB/config.yml
header-footer:
enabled: true
header:
- '&b&lKEYDAL &fNetwork'
- '&7Online: &a%online%/%maxplayers%'
footer:
- '&7keydal.com | &bDiscord: discord.gg/keydal'Nametag Configuration
# Nametag (the text above a player's head)
nametags:
enabled: true
groups:
admin:
tagprefix: '&c[Admin] '
tagsuffix: '
moderator:
tagprefix: '&6[Mod] '
tagsuffix: '
default:
tagprefix: '&7'
tagsuffix: 'Scoreboard Configuration
# Scoreboard (the info panel on the right of the screen)
scoreboard:
enabled: true
title: '&b&lKEYDAL'
lines:
- '&7&m '
- '&fPlayer: &a%player%'
- '&fPing: &a%ping%ms'
- '&fTPS: &a%tps%'
- '
- '&fBalance: &a%essentials_balance%'
- '&fRank: &a%luckperms_prefix%'
- '&7&m '
- '&bkeydal.com'DiscordSRV
DiscordSRV provides two-way chat synchronisation between your Minecraft server and your Discord server. You can send messages from in-game to Discord and from Discord into the game.
Installation Steps
- Create a new bot in the Discord Developer Portal
- Copy the bot token
- Enable the MESSAGE CONTENT INTENT and SERVER MEMBERS INTENT permissions
- Invite the bot to your server
- Drop the DiscordSRV JAR into the
plugins/folder - Restart the server
# plugins/DiscordSRV/config.yml
BotToken: 'PASTE_YOUR_BOT_TOKEN_HERE'
Channels:
global: '123456789012345678' # Discord channel ID
# Message format (MC -> Discord)
MinecraftChatToDiscordMessageFormat: '**%displayname%** > %message%'
# Message format (Discord -> MC)
DiscordToMinecraftChatMessageFormat: '&9[Discord] &f%name% &7> &f%message%'ViaVersion and Geyser
ViaVersion and Geyser let players connect to your server from different platforms and versions. ViaVersion supports different Java Edition versions, and Geyser supports Bedrock Edition players.
ViaVersion
Even if your server runs 1.21.4, it allows players on older versions such as 1.20.x and 1.19.x to connect:
# Installing ViaVersion
cd ~/server/plugins
wget https://hangar.papermc.io/ViaVersion/ViaVersion/releases/latest/download/ViaVersion.jar
# Companion add-ons
# ViaBackwards — connecting from older versions
# ViaRewind — 1.7/1.8 supportGeyser (Bedrock Support)
Geyser lets Bedrock Edition players (mobile, console, Windows 10) connect to your Java Edition server:
# Installing Geyser + Floodgate
cd ~/server/plugins
wget https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot -O Geyser-Spigot.jar
wget https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot -O Floodgate-Spigot.jarPerformance Plugins
These are the plugins used to monitor and optimise server performance. They either improve TPS directly or help you identify bottlenecks.
Spark
Spark is a lightweight performance tool that lets you profile your server's CPU and memory usage. It is indispensable for finding the cause of TPS drops:
# Start CPU profiling (30 seconds)
/spark profiler start
/spark profiler stop
# TPS and tick duration info
/spark tps
# Show memory usage
/spark healthChunky
Chunky pre-generates world chunks, removing the chunk-generation lag that would otherwise happen during play:
# Pre-generation within a 5000-block radius
/chunky radius 5000
/chunky start
# Watch the progress
/chunky progress
# Stop
/chunky pauseViewDistanceTweaks
ViewDistanceTweaks adjusts view distance dynamically based on server performance. When TPS drops, view distance falls; when TPS is high, it rises.
# ViewDistanceTweaks config.yml
enabled: true
target-tps: 19.5
min-view-distance: 4
max-view-distance: 10
adjustment-mode: proactivePlugin Compatibility
Plugin compatibility problems are among the most common issues in server administration. A wrong version, an API conflict or a missing dependency can leave your server unable to start.
Version Checking
Every plugin is compatible with specific Minecraft and API versions. Before installing, check the Supported Versions section on the plugin page.
- Check the supported MC versions on the plugin page
- Verify Paper/Spigot/Bukkit compatibility
- Check the
api-versionvalue inplugins/PluginName/plugin.yml - Old plugins may not work on newer MC versions
API Conflicts
Several plugins doing the same job can conflict:
- Do not run two economy plugins at once (EssentialsX Eco + CMI Eco)
- Do not run two permission plugins at once (LuckPerms + PermissionsEx)
- Two chat formatting plugins can conflict
- Plugins listening to the same event can produce unexpected behaviour
Dependency Problems
Some plugins depend on others. A missing dependency stops the plugin from loading:
| Plugin | Required Dependency | Recommended Dependency |
|---|---|---|
| WorldGuard | WorldEdit | — |
| EssentialsX Chat | EssentialsX | Vault, LuckPerms |
| TAB | — | PlaceholderAPI |
| Geyser | — | Floodgate |
| DeluxeChat | — | Vault, PlaceholderAPI |
Plugin Security
Plugin security is critical to the integrity of your server. Malicious plugins can open a backdoor, steal player data or run a cryptominer.
Trusted Sources
- Always download from official sources: SpigotMC, Modrinth, Hangar, GitHub Releases
- Buy premium plugins: cracked/nulled plugins almost always carry malware
- Check the download count and reviews: popular plugins are generally safer
- Prefer open-source plugins: you can read the source code
Malware Risks
Common behaviours of malicious plugins:
- Backdoor: grants OP to specific player names
- Cryptominer: uses your server's CPU for crypto mining
- Data stealer: sends player IP addresses and data to a third party
- RAT (Remote Access Trojan): takes full control of your server
- Botnet: uses your server in DDoS attacks
Permission Auditing
Audit the permissions your plugins ask for on a regular basis:
# List every permission granted through LuckPerms
/lp group default permission info
/lp group admin permission info
# Use verbose mode to watch which permissions are being checked
/lp verbose on
# Remove permissions you do not need
/lp group default permission unset unnecessary.permissionNext Steps
Once you have finished installing your plugins, take a look at the guides below to develop your server further: