Loyalty Rewards
Loyalty Rewards gives every player a points wallet they build up by buying, voting, and referring friends, then spend as a discount at checkout. Points are a per-player balance tied to their username, and you control how they’re earned, what they’re worth, and when they expire.
The currency label is brandable per store. Call them “Points”, “Gems”, “Coins”, or whatever fits your server. Throughout this page, “label” refers to whatever singular or plural name you’ve configured.
How Loyalty Rewards Work
Players accumulate points from the activities you enable, then redeem them at checkout for a currency discount. A player with 500 points and a redemption rate of “50 points = $1 off” can knock $10 off their next order. Points are debited when the order is paid, and restored if the order is later refunded.
Loyalty Rewards is off by default. Enable it and set your redemption rate from Dashboard > Loyalty Rewards before players can earn or spend.
Points Value
The redemption rate sets what points are worth at checkout. It’s defined as the number of points required for one unit of your store currency (RedeemPointsPerUnit).
For example, with a rate of 50, 50 points convert to $1 of discount, so 500 points are worth $10. Choose a rate that makes earning feel rewarding without giving away more margin than you’re comfortable with.
Earning Points
All earning rules are configured in the dashboard. You can mix and match the sources below.
-
Purchases. Players earn on every paid order. Choose one store-wide mode:
- Percent of spend. A percentage of the order subtotal is converted into points.
- Flat points per currency unit. A fixed number of points awarded for each unit of currency spent.
You can set per-package overrides so specific packages earn at a different rate (or none at all) regardless of the store-wide mode.
-
Votes. When you run a vote-reward campaign through Votifier, the FluxStore plugin awards points per vote. Set your points-per-vote value in the dashboard. See the plugin protocol for how votes are delivered.
-
Referrals. When a referral converts, the referrer can be awarded points on top of any reward commands you’ve configured.
-
Manual grants. Give points by hand from the dashboard. Use the Give points action or open a player’s row and adjust their balance directly. Useful for one-off rewards, goodwill, or corrections.
-
API and in-game grants. Award points programmatically through the Loyalty API or in-game with
/fluxstore points give.
Earning never applies to the points-funded portion of an order or to tax. If a player pays partly with redeemed points, only the remaining cash portion (excluding tax) counts toward new points earned.
Spending Points at Checkout
When loyalty is enabled and a player has a balance, checkout shows an “Apply my points” toggle (labelled with your configured currency name and balance). Turning it on converts the player’s points into a currency discount.
Points are applied after any coupon and gift card, against the remaining order total. Two limits keep redemption in check:
- Minimum redeem. Players must redeem at least this many points to apply a discount.
- Maximum percent of order. Caps the points discount at a percentage of the order total, so points can never cover the entire order.
The points are debited when the order is paid, not when the toggle is switched on. If the order isn’t completed, the player keeps their balance.
Refunds
Refunding an order reverses both sides of the loyalty ledger for that order:
- Any points the player spent on the order are restored to their balance.
- Any points the player earned on the order are clawed back.
If a clawback would take a player below zero (for example, they already spent the earned points), their balance is reduced as far as it can go. Refunds never leave a negative balance.
Expiry
Points can optionally expire. Set the expiry window in days, and points expire that many days after they were earned. Set it to 0 to disable expiry, in which case points never expire.
Expiry is evaluated per batch of earned points, so a player’s oldest points are always the first to expire.
In-Game Commands
The FluxStore plugin adds player-facing loyalty commands. Vote rewards additionally require Votifier.
| Command | Description | Permission |
|---|---|---|
/fluxstore points | Shows the player their current balance. | fluxstore.points (granted to everyone by default) |
/fluxstore points <player> | Shows another player’s balance. | fluxstore.points.view.others (operators by default) |
/fluxstore points give <player> <amount> [reason] | Grants points to a player, with an optional reason logged against the grant. | fluxstore.points.give (operators by default) |
In-game commands require the FluxStore plugin to be connected to your server, and are available on every supported platform (see the platform feature matrix). The permissions above apply to Spigot/Paper and proxies; on Fabric/Forge/NeoForge, viewing another player’s balance and giving points require vanilla permission level 2 (op) instead. Vote rewards also require Votifier (Spigot/Paper) or NuVotifier (BungeeCord/Velocity). Without the plugin you can still grant and manage points from the dashboard and the API.
Plugin notifications
The plugin can also message players about their points. These are controlled per server in the plugin’s config.yml:
loyalty:
# Award loyalty points for Votifier votes. Points-per-vote is configured on the
# dashboard under Loyalty Rewards; set this to false to stop earning on this server.
vote-rewards: true
# Tell players in chat how many points they earned when they vote
vote-message: true
# Show players their points balance when they join (skipped when the balance is zero)
join-balance-message: false- Vote message. When a vote awards points, the voter sees how many they earned and their new balance. On by default.
- Join balance message. Shortly after joining, players are reminded of their balance so they remember to spend it. Off by default, and never shown for zero balances.
- Vote rewards toggle. If you run multiple servers and only want votes on some of them to earn points, turn
vote-rewardsoff on the others. The dashboard’s points-per-vote setting still controls how much each vote is worth.
Both messages are only shown to players with the fluxstore.points permission, so revoking that node hides the points system from a player entirely.
Settings Reference
Configure these from Dashboard > Loyalty Rewards.
| Setting | Description |
|---|---|
| Enabled | Turns Loyalty Rewards on or off for the store. |
| Label (singular) | Singular currency label, e.g. “Point”, “Gem”, “Coin”. |
| Label (plural) | Plural currency label, e.g. “Points”, “Gems”, “Coins”. |
| Redeem rate | Points required per unit of store currency (RedeemPointsPerUnit). For example, 50 means 50 points = $1 off. |
| Purchase earn mode | Percent of spend or Flat points per currency unit. |
| Purchase earn value | The percentage (percent mode) or points-per-currency-unit (flat mode) used for purchase earning. |
| Earn on sale items | Whether purchases of discounted or on-sale packages earn points. |
| Points per vote | Points awarded for each Votifier vote. |
| Referral points | Points awarded to the referrer when a referral converts. |
| Minimum redeem points | The smallest number of points a player can redeem in a single order. |
| Maximum redeem percent | Caps the points discount at this percentage of the order total. |
| Expiry days | Days after earning that points expire. 0 means points never expire. |
Next Steps
- Referrals to reward customers who bring in new buyers
- Gift Cards for store credit that customers can purchase and redeem
- Loyalty API to read balances and grant points programmatically