ProfitMultiplier
Reward your grinders. The more they sell, the more every sale is worth.
Spigot & Paper 1.8 → 26.x • Single jar • Java 8 bytecode
NEW in 1.1.0: EssentialsX /sell support • Milestone commands • Donor threshold scaling • Discord webhooks
▎ What is ProfitMultiplier?
ProfitMultiplier gives every player a
cumulative sell-multiplier that climbs the more they sell. It hooks straight into the shop plugin you already run and boosts the payout
at the moment of sale. There is nothing to migrate, no prices to rewrite, and no second economy to manage.
Turn passive grinding into long-term progression. Reward your most active players, give them a reason to keep selling, and keep your economy humming, all from a single config file.
▎ Features
- Cumulative progression: multipliers rise as players cross sold-total thresholds and stay unlocked. The boost is applied per unit, so a sale that crosses a threshold only boosts the units at or after it. No rounding exploits, no cliffs.
- Three ladder types: per-item ladders (DIAMOND, WHEAT…), shared groups (many materials, one counter), and a default fallback ladder for everything else.
- Stacking control: per group, decide whether the group multiplier wins, the item multiplier wins, or both stack (item 1.5x × group 1.2x = 1.8x).
- Multi-shop support: auto-detects and hooks every supported shop you have installed — including EssentialsX /sell.
- NEW Milestone commands: run any console command when a player unlocks a tier — crate keys, titles, broadcasts — globally or per tier. An automated achievement system out of the box.
- NEW Donor threshold scaling: permission-based discounts so ranked players level up faster (e.g. VIPs need 20% fewer lifetime sales). Applied consistently to payouts, messages, the GUI, and placeholders.
- NEW Discord webhooks: announce milestone achievements to your community — as a classic rich embed or a modern Components V2 message. Every line is templated.
- Custom currencies: per-group display formatting; the multiplier itself is currency-agnostic and works with whatever your shop pays in.
- Fully configurable GUI: custom items via Nexo / Oraxen / ItemsAdder / HeadDatabase, PlaceholderAPI everywhere, click actions, pagination, and live-updating progress bars.
- PlaceholderAPI expansion: drop progression and multipliers into scoreboards, holograms, tab, and more.
- Auto-reset: optionally wipe everyone's progression on a schedule for seasons and map resets.
- Developer API: read progression, react to milestones, and adjust the boost from your own plugin.
- Update-safe configs: new default groups, messages, and menus are merged into existing installs on update; your values are never overwritten.
Ships ready to play with eight pre-built groups: Crops • Ores • Resources • Excavation • Fishing • Nether • Mob Drops • Building Blocks
▎ How it works
Define a ladder of thresholds and multipliers. As a player's lifetime sold-total for an item or group passes each threshold, their multiplier steps up, permanently.
Code (YAML):
groups:
crops:
icon
: GRASS_BLOCK
display-name
:
"Crops"
stack-mode
: group
# group | item | stack
materials
:
[WHEAT, CARROT, POTATO, KELP, SUGAR_CANE,
...
]
tiers:
- { threshold
: 10000, multiplier
: 1.1, icon
: GRASS_BLOCK
}
- { threshold
: 100000, multiplier
: 1.2, icon
: WHEAT
}
- { threshold
: 1000000, multiplier
: 1.3, icon
: KELP
}
Because the boost is applied
per unit, a single bulk sale that crosses a threshold only multiplies the units sold at or after that point, so progression is always fair and never gameable by timing one giant sale.
▎ Milestones, ranks & Discord
Every tier a player unlocks is a
milestone, and you decide what happens. Run console commands globally, per tier, or only when a ladder is
mastered:
Code (YAML):
milestones:
commands:
on-tier
:
-
"crates give {player} key vote 1"
on-max-tier
:
-
"broadcast &6{player} &emastered &b{name}&e!"
-
"lp user {player} permission set titles.grinder true"
Tiers can carry their own
commands: list too, so tier 3 of Diamonds can hand out a different reward than tier 1. Placeholders like
{player},
{name},
{tier},
{multiplier} and
{total} work everywhere.
Donor ranks level faster. Map any permission node to a threshold discount — scaling applies to the payout math, chat messages, GUI progress bars, and placeholders alike:
Code (YAML):
threshold-scaling:
enabled
: true
ranks:
vip
:
{ permission
: profitmultiplier.scale.vip, scale
: 0.8
}
# 20% less needed
mvp
:
{ permission
: profitmultiplier.scale.mvp, scale
: 0.65
}
# 35% less needed
Show it off on Discord. Post max-tier achievements (or every tier-up) to a channel webhook, asynchronously, with zero impact on TPS. Choose a fully-templated classic
embed or a modern
Components V2 layout with sections, thumbnails, separators, and images — no bot required, just a webhook URL.
Code (YAML):
milestones:
discord:
enabled
: true
webhook-url
:
"https://discord.com/api/webhooks/..."
announce
: max-tier
# max-tier | every-tier
style
: components-v2
# embed | components-v2
▎ Supported shops
| EconomyShopGUI (+ Premium) |
Native PreTransactionEvent |
| ShopGUI+ |
ShopPreTransactionEvent |
| zShop |
ZShopSellEvent / ZShopSellAllEvent |
| UltimateShop |
ItemPreTransactionEvent (scales the reward) |
| GUIShop |
DynamicPriceProvider (sales through the shop GUI) |
| EssentialsX NEW |
/sell, /sell hand, /sell inventory, /sell blocks — bonus paid on top of the worth payout |
Every hook is auto-detected and individually toggleable in
config.yml. The startup log lists exactly which hooks went live.
▎ The GUI ( /sellmulti )
A clean, player-facing menu that shows each player their current multipliers and how far they are from the next tier, fully yours to restyle.
- Live, per-viewer tokens (no PlaceholderAPI required): {sold}, {multiplier}, {threshold}, {remaining}, {progress_bar}, {progress_percent}, {status}
- Any icon: vanilla materials, nexo:id, oraxen:id, itemsadder:ns:id, hdb:1234, player heads, and base-head textures
- Click actions: messages, broadcasts, console & player commands, open/close menus, sounds, refresh, and full pagination
- Auto-paginated browsers: /pm gui groups generates a paged view of every group you've defined
▎ Commands & permissions
| /sellmulti |
Open the sell-multiplier menu |
profitmultiplier.gui |
| /pm gui [menu] [player] |
Open a menu (yourself or another player) |
profitmultiplier.gui / .admin |
| /pm stats [player] |
View sell progression |
profitmultiplier.stats |
| /pm reload |
Reload config, lang, currencies, menus & milestones |
profitmultiplier.admin |
| /pm reset <player> |
Reset one player's totals |
profitmultiplier.admin |
| /pm resetall |
Reset every player's totals |
profitmultiplier.admin |
Aliases:
/pm,
/sellmulti •
Threshold-scaling permission nodes are free-form — define your own in
config.yml
▎ PlaceholderAPI
Code (Text):
%profitmultiplier_sold_total%
%profitmultiplier_bonus_total%
%profitmultiplier_multiplier_<MATERIAL>%
%profitmultiplier_remaining_<MATERIAL>%
%profitmultiplier_group_multiplier_<group>%
%profitmultiplier_group_next_threshold_<group>%
%profitmultiplier_group_progress_<group>%
▎ Installation
- Install a supported shop plugin (EconomyShopGUI, ShopGUI+, zShop, UltimateShop, GUIShop, or EssentialsX) and its economy (e.g. Vault).
- Drop ProfitMultiplier-x.x.x.jar into /plugins.
- Optional: add PlaceholderAPI and any custom-item plugin you want to use in menus.
- Restart, edit config.yml, then run /pm reload.
Everything is auto-detected. ProfitMultiplier hooks whatever supported shops it finds. Out of the box you get a working setup, so you can be live in under a minute.
▎ Developer API
A small, stable API (
me.docdrewskii.profitmultiplier.api) for reading progression, reacting to milestones, and adjusting the boost. Available via JitPack:
Code (Text):
repositories { maven("https://jitpack.io") }
dependencies { compileOnly("com.github.DevDocDrewskii:ProfitMultiplier:1.1.0") }
▎ Compatibility & support
- Versions: Spigot & Paper 1.8 → 26.x. One jar, Java 8 bytecode, no version-locked builds.
- Requires: a supported shop plugin (+ its economy)
- Optional: PlaceholderAPI, Nexo / Oraxen / ItemsAdder / HeadDatabase, a Discord webhook URL for milestone announcements