Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
Avatar for Johndinglesin

A bounty system plugin for Paper server

Report Simple-Bounty?

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.

LeaderBoard


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

  1. Download the SimpleBounty.jar file
  2. Place it in your server's plugins/ folder
  3. Restart your server
  4. 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:

  1. Player A receives 20% of Player B's bounty points
  2. That same amount is removed from Player B's bounty
  3. 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.db file exists and isn't corrupted

Players aren't losing points for inactivity

  • Check that lose-points-on-inactivity is set to true in 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-minutes is set to a value greater than 0

Support

If you encounter any issues, please report them to the Google Form

Information

Category
Admin Tools
Published
August 5, 2026
License
Unspecified
0Downloads
1Stars

Pinned Versions

Members