Package Ladders

Package Ladders is designed to help server owners manage packages on their server. Many servers allow players to donate for "packages", usually there are several tiers of packages and the donation system will allow players to only pay the difference if they choose to upgrade package at a later date (commonly refereed to as "laddering"). This is great for server owners and players but one of the problems comes from the lack of configuration avialable from donation systems which can lead to players exploiting the ladder to get more than a player that donated for the top package right away. If you use laddered packages on your server, then this plugin is a must have.

The problem

When you are configuring your packages on donation systems (such as BuyCraft or DonationCraft) you are only asked for what commands to run if the player buys the package and you cannot change the commands run to take into consideration a previous package. This then leads to player being able exploit the configuration to get more than they should when donating.

Lets take an extremely simplified example: a server has 2 packages henceforth referred to as "Package 1" and "Package 2". Package 1 gives the player $1000 of in game money and costs $5 of real world money; Package 2 gives them $5000 of in game money and costs $10 of real world money. If a player purchases either package they will get the amount of in game money specified, however once a player has purchased Package 1, they can then purchase Package 2 through the donation system for the cost of Package 2 less the cost of Package 1 (so in this case, the cost of upgrading from Package 1 to Package 2 is $5). The problem arises when the person who purchased Package 1 then decides to upgrade to Package 2. They will pay $5 more (meaning they spent a total of $10 which is what Package 2 would cost if purchased on its own) but due to the setup of the donation system, it will give the player the $5000, as if they just donated for Package 2 irrespective of the pack they already had been given $1000 from purchasing Package 1 and so, this player ends up getting $6000 for $10 of real life money where as a player who donates for Package 2 right away will only get $5000 for the same $10 of real world money.

This flaw in how the donation system works will then lead to some players taking advantage and exploiting it, purposefully buying Package 1, then Package 2 when they could have in fact gone straight to Package 2 knowing that by laddering, they will get an extra $1000. This makes donations unfair and means 2 players donating the same amount are getting different quantities of rewards in game.

You can make a solution that avoids this within the donation manager but it can get very complicated, with the complexity increasing exponentially with the more packages you have. This plugin provides a simple and effective solution for this problem.

How it works

With this plugin, you configure all the commands that should be run when a player purchases a package and you should only be providing your donation manager with the respective Package Ladders command. The plugin keeps track of what packages a player has purchased by assigning and modifying groups associated with the player: for each package you should have a unique group for the player (which actually makes giving players permissions for each package level a doddle).

When a player gets a new package through the donation system, the donation system runs a console command that tells Package Ladder what package the player has purchased. Package Ladders then checks what groups the player is in to see if they have already purchased a package on the same ladder as the newly purchased package and will run the appropriate commands to either give them everything they would expect from the package (for a new package purchase) or just the difference from their previous package.


  • Create ladders which players can progress through when donating without allowing them to exploit the configuration to gain more than they should.
  • Create multiple ladders
  • Create ladders with an infinite number of steps
  • Pass arguments to be substituted into commands.


  • Vault - Provides hooks to compatible permissions plugins
  • Vault compatible Permissions - required with vault in order for the plugin to work. This is for internal permissions (i.e. command permissions) as well as for checking and modifying player groups when running the /packageladder command.


The config.yml is very simple but can take a little thinking about to wrap your head around at first. The first thing to note is that Package Ladders allows you to have multiple package ladders if on your server you have several distinct ladders.

In the config their is the ladders section, and in this section their arbitrary but unique names for each ladder. In the following example, we have one ladder, called "packages":

            - eco give {player} 1000
            - eco give {player} 4000

in the ladder "packages" there are (in this example) two nodes, one representing each of the packages. These names must match your permissions system's group names and are case sensitive so ensure that they match your permissions config exactly. For this example, you should assume there are two groups within the permissions manager called "Package1" and "Package2". You can have as many packages as you wish within a ladder but the group names should be globally unique (for example, you should not use the same group name for two ladders or define the same package with a ladder more than once as this may have undesired effects).

Each of these package nodes then has a list of commands to be executed for that step on the ladder. The config quite literally works like a ladder (where the player travels from top to bottom). The commands at each step should define what extra needs to be done from the previous step. In the above example, Package1 gives $1000 and Package2 gives $4000. If a player goes to package two (either directly or through laddering) the commands for both Package1 and Package2 will be run giving the player a sum total of $5000 in game.

As the player travels down the ladder, their groups are automatically modified by the plugin with their old groups being removed and new groups being added (they should only have one group from a ladder at any one time) and so if you want them to progressively gain permissions the standard configuration would be to have each package group inheriting from the group before it in your permissions config.

The final important thing to note is that every step on the ladder should be defined, whether there are commands to be run or not. It is common for no commands to be run at a step on the ladder if the changes between two packages are purely permission based. In this situation you should define the step as an empty list (e.g. "group: []"). In the following example, Package2 has been made into Package3 and an additional package has been added between which has no commands to be run:

            - eco give {player} 1000
        Package2: []
            - eco give {player} 4000

There are more advanced configuration features (such as passing custom arguments) which you can find out about on the Advanced Configuration page.


Currently there is just one command for Package Ladders:

  • /packageladder <player> <group> [args...]

<player> should be substituted for the player who has purchased a new package and <group> should be the group that purchasing that package would put them in. The plugin will automatically determine which ladder this group is part of and perform the required commands to give the player that group.

Arguments can be specified in the format key:value where {key} in commands will be replaced with value. Arguments should not contain spaces.


Although the package ladder command is designed to be run in console, there is a permission which allows you to run the /packageladder command in game:

  • packageladder.set - allows player to run the /packageladder command in game.

This can be used to manually give players packages or to test the configuration easily in game.


Posts Quoted:
Clear All Quotes

About This Project



Recent Files