SimpleBounty
SimpleBounty adds a dynamic bounty system to your Minecraft server. Every player starts with a base amount of bounty points. Players can earn bounty points by killing other players, and their bounty grows over time under certain conditions. The higher a player's bounty, the more points you'll receive for taking them down.

Features
- Starting Bounty: Every player starts with 50 bounty points (configurable)
- PvP Bounty Transfer: When you kill another player, you receive 20% of their bounty (configurable), and that amount is removed from their total
- High Bounty Growth: Players with 5,000+ bounty points (configurable) gain +3 points (configurable) every 5 minutes (configurable) while online
- Dragon Egg Bonus: Players holding a Dragon Egg in their inventory gain +10 points (configurable) every 5 minutes (configurable)
- Inactivity Decay: Players who don't gain any bounty for 30 minutes (configurable) lose 1 point (configurable) every 20 minutes (configurable)
- Natural Death Penalty: Dying to anything other than a player (mobs, fall damage, lava, etc.) causes you to lose 2% (configurable) of your bounty
- Top 5 Broadcast: Every 15 minutes (configurable), a chat message shows the top 5 players by bounty, including how many points you'd get for killing them
- Admin Commands: Add, remove, or set bounty points for any player
- H2 Database Storage: All data is stored in a reliable H2 database file
- Public API: Other plugins can hook into SimpleBounty to display bounty points on scoreboards, tablists, etc.
Installation
- Download the
SimpleBounty.jarfile - Place it in your server's
plugins/folder - Restart your server
- The plugin will generate its config file and H2 database on first run
Requirements:
- Paper 1.21.1 or higher
- Java 21 or higher
Commands
| Command | Description | Permission |
|---|---|---|
/bounty |
Check your current bounty points | simplebounty.check (default: everyone) |
/bountyadmin add <player> <amount> |
Add bounty points to a player | simplebounty.admin (default: OP) |
/bountyadmin remove <player> <amount> |
Remove bounty points from a player | simplebounty.admin (default: OP) |
/bountyadmin set <player> <amount> |
Set a player's bounty to an exact amount | simplebounty.admin (default: OP) |
/ba |
Alias for /bountyadmin |
simplebounty.admin |
Permissions
| Permission | Description | Default |
|---|---|---|
simplebounty.check |
Allows checking your own bounty | Everyone |
simplebounty.top |
Allows viewing the top bounty list | Everyone |
simplebounty.admin |
Allows admin bounty commands | OP |
Configuration
All settings are in plugins/SimpleBounty/config.yml. Here's what each option does:
Core Settings
| Setting | Default | Description |
|---|---|---|
starting-bounty |
50 |
How many bounty points a player starts with |
kill-reward-percent |
20 |
What percent of a killed player's bounty the killer receives (0-100) |
natural-death-loss-percent |
2 |
What percent of their bounty a player loses on natural death (0-100) |
Inactivity Decay
| Setting | Default | Description |
|---|---|---|
lose-points-on-inactivity |
true |
Whether players lose points for not gaining bounty |
inactivity-decay-amount |
1 |
How many points are lost per decay interval |
inactivity-decay-start-minutes |
30 |
How long without gaining bounty before decay starts |
inactivity-decay-interval-minutes |
20 |
How often an inactive player loses points |
High Bounty Growth
| Setting | Default | Description |
|---|---|---|
bounty-increase-threshold |
5000 |
Bounty amount required to start growing (set to 0 to disable) |
bounty-increase-amount |
3 |
Points gained per interval once above the threshold |
bounty-increase-interval-minutes |
5 |
How often players above the threshold gain points |
Dragon Egg Bonus
| Setting | Default | Description |
|---|---|---|
dragon-egg-bounty-enabled |
true |
Whether holding the Dragon Egg increases bounty |
dragon-egg-bounty-amount |
10 |
Points gained per interval while holding the egg |
dragon-egg-interval-minutes |
5 |
How often Dragon Egg holders gain points |
Chat Broadcast
| Setting | Default | Description |
|---|---|---|
bounty-message-interval-minutes |
15 |
How often the top 5 bounty list is broadcast (set to 0 to disable) |
Messages
All chat messages can be customized in the messages: section of the config. Use & for color codes and the following placeholders:
%points%- The player's bounty points%player%- A player's name%amount%- An amount of points%reward%- The reward for killing a player%position%- Position in the top list
How It Works
Bounty Points
- Every player starts with 50 bounty points when they first join
- Points are stored in an H2 database file at
plugins/SimpleBounty/bounties.mv.db - Points are saved to the database on every change, on player quit, every 5 minutes, and on server shutdown
PvP Kills
When Player A kills Player B:
- Player A receives 20% of Player B's bounty points
- That same amount is removed from Player B's bounty
- Both players are notified in chat
Example: If Player B has 1,000 bounty and Player A kills them:
- Player A gains 200 points
- Player B's bounty drops to 800
Natural Deaths
If a player dies to anything other than a player (mobs, fall damage, drowning, lava, etc.):
- They lose 2% of their current bounty
- This is treated as a "natural death" - no points are transferred to anyone
High Bounty Growth
Once a player reaches 5,000 bounty points:
- They gain 3 points every 5 minutes while online
- This encourages high-bounty players to become bigger targets
Dragon Egg Bonus
If a player has a Dragon Egg in their inventory:
- They gain 10 points every 5 minutes while online
- This makes holding the Dragon Egg a high-risk, high-reward activity
Inactivity Decay
If a player hasn't gained any bounty points for 30 minutes:
- They lose 1 point every 20 minutes
- Any bounty gain (PvP kill, passive growth, admin add) resets the inactivity timer
Public API
SimpleBounty provides a public API so other plugin developers can display bounty points on scoreboards, tablists, or anywhere else.
Getting the API
import com.johndinglesin.simplebounty.SimpleBountyPlugin;
import com.johndinglesin.simplebounty.api.BountyAPI;
// Get the SimpleBounty plugin instance
SimpleBountyPlugin bountyPlugin = (SimpleBountyPlugin) Bukkit.getPluginManager().getPlugin("SimpleBounty");
if (bountyPlugin != null) {
BountyAPI api = bountyPlugin.getBountyAPI();
// Get a player's bounty points
double points = api.getBounty(player);
// Get an offline player's bounty points
double offlinePoints = api.getBounty(offlinePlayer);
// Get bounty by UUID
double uuidPoints = api.getBounty(uuid, "PlayerName");
// Modify bounty points
api.addBounty(player, 100.0);
api.removeBounty(player, 50.0);
api.setBounty(player, 1000.0);
// Get configuration values
double killPercent = api.getKillRewardPercent();
double startingBounty = api.getStartingBounty();
// Get the top 10 players by bounty
List<BountyEntry> top = api.getTopBounties(10);
for (BountyEntry entry : top) {
String name = entry.getPlayerName();
double bounty = entry.getBounty();
UUID uuid = entry.getUuid();
}
}
API Methods
| Method | Description |
|---|---|
getBounty(Player) |
Get an online player's bounty points |
getBounty(OfflinePlayer) |
Get an offline player's bounty points |
getBounty(UUID, String) |
Get bounty points by UUID |
addBounty(Player, double) |
Add points to a player |
removeBounty(Player, double) |
Remove points from a player |
setBounty(Player, double) |
Set a player's bounty to an exact amount |
getKillRewardPercent() |
Get the configured kill reward percentage |
getStartingBounty() |
Get the configured starting bounty |
getTopBounties(int) |
Get the top N players by bounty, sorted descending |
getSimpleBountyPlugin() |
Static helper to get the plugin instance |
BountyEntry Class
The BountyEntry class (from com.johndinglesin.simplebounty.data.BountyEntry) represents a single player's bounty record:
public class BountyEntry {
public UUID getUuid(); // The player's UUID
public String getPlayerName(); // The player's name
public double getBounty(); // The player's bounty points
}
Example: Scoreboard Integration
// In your scoreboard update task
SimpleBountyPlugin bountyPlugin = (SimpleBountyPlugin) Bukkit.getPluginManager().getPlugin("SimpleBounty");
if (bountyPlugin != null) {
double points = bountyPlugin.getBountyAPI().getBounty(player);
scoreboard.getObjective("bounty").getScore(player.getName()).setScore((int) points);
}
Example: Tablist Integration
// In your tablist update task
SimpleBountyPlugin bountyPlugin = (SimpleBountyPlugin) Bukkit.getPluginManager().getPlugin("SimpleBounty");
if (bountyPlugin != null) {
double points = bountyPlugin.getBountyAPI().getBounty(player);
player.setPlayerListName(ChatColor.GOLD + player.getName() + ChatColor.GRAY + " [" + (int) points + "]");
}
Example: Custom Leaderboard
// Get the top 5 players for a custom leaderboard
SimpleBountyPlugin bountyPlugin = (SimpleBountyPlugin) Bukkit.getPluginManager().getPlugin("SimpleBounty");
if (bountyPlugin != null) {
List<BountyEntry> top = bountyPlugin.getBountyAPI().getTopBounties(5);
for (int i = 0; i < top.size(); i++) {
BountyEntry entry = top.get(i);
// Display on a sign, hologram, or GUI
System.out.println((i + 1) + ". " + entry.getPlayerName() + " - " + (int) entry.getBounty());
}
}
Adding SimpleBounty as a Dependency
To compile against the SimpleBounty API, add the jar to your plugin's build path:
Maven:
<dependency>
<groupId>com.johndinglesin</groupId>
<artifactId>SimpleBounty</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/SimpleBounty.jar</systemPath>
</dependency>
Gradle:
dependencies {
compileOnly files('libs/SimpleBounty.jar')
}
Storage
SimpleBounty uses H2 Database for reliable data storage, This provides:
- Atomic writes - No corrupted data from crashes
- Concurrent access - Safe for multiple players modifying data simultaneously
- Efficient queries - Fast top-5 lookups even with thousands of players
- File-based - Data is stored in
plugins/SimpleBounty/bounties.mv.db
The H2 database is bundled inside the plugin jar, so no additional installation is needed.
Troubleshooting
The plugin doesn't load
- Make sure you're running Paper 1.21.1 or higher
- Make sure you have Java 21 or higher installed
- Check the server console for error messages
Bounty points reset
- Check that the
plugins/SimpleBounty/folder has write permissions - Make sure the
bounties.mv.dbfile exists and isn't corrupted
Players aren't losing points for inactivity
- Check that
lose-points-on-inactivityis set totruein the config - Remember: the inactivity timer resets whenever a player gains bounty points
The top 5 message isn't showing
- Check that
bounty-message-interval-minutesis set to a value greater than 0
Support
If you encounter any issues, please report them to the Google Form
Information
Pinned Versions
- R1.21–26.2
Pages
Members
Owner