DUXPLIMA Documentation

Storage and Levels

Per-product levels, capacity, requirements and upgrading everything at once.

Every product the farmer collects has its own level. The level sets how much of that product the farmer can hold, what one unit is worth, and what tax is taken when it sells — so upgrading wheat does nothing for cactus, and a player builds the ladder they actually use.

What a level defines

1:
  price: 1000
  unit-price: 1.6
  tax-price: 0.14
  capacity: 10000
  requirements: {}
  player-commands: []
  console-commands: []
KeyEffect
priceWhat the player pays to reach this level
capacityHow much of the product the farmer may hold
unit-priceOverrides the product's price from this level on
tax-priceOverrides the tax from this level on
requirementsConditions the player must satisfy before paying
player-commandsRun as the player when the level is reached
console-commandsRun from console when the level is reached

unit-price and tax-price are optional and inherit downward: a level that does not state them keeps whatever the last level that did was using. This is how a product gets more profitable as it is upgraded without you rewriting every line.

Both command lists support PlaceholderAPI.

Requirements

A requirement is a PlaceholderAPI condition with a line of text to show the player:

requirements:
  "playtime":
    display: "<blue>1 Hour Playtime (Current: <papi:'math_0:floor_{statistic_PLAY_ONE_MINUTE}/72000'>)"
    condition: "%math_({statistic_PLAY_ONE_MINUTE}/72000)>60%"
    required-output: "1"
  "vip":
    display: "<green>VIP Rank"
    condition: "%vault_hasgroup_VIP%"
    required-output: "yes"

The plugin resolves condition and compares the result to required-output as a string. The math expansion returns 1 for a true expression and 0 for a false one, which is why the playtime check compares against "1".

display is what the player reads in the upgrade menu. Write it as the requirement, not as the expression — the player does not need to see your placeholder.

Braces inside conditions

Inside a placeholder argument, {...} is used for nested placeholders so the outer %...% does not terminate early. %math_({statistic_PLAY_ONE_MINUTE}/72000)>60% reads the playtime statistic, divides it, and compares — all inside one math call.

Default levels

default-levels.yml is the ladder used by any product that does not define its own. It runs from level 0 at 2,500 capacity to the top of your table, with prices climbing as capacity does. Products in collected-materials.yml with their own levels section ignore it completely.

Keep the default ladder as your baseline and give a product its own only when it genuinely needs a different shape — a rare product with high unit price and low capacity, for instance.

Upgrade All

/farmer players can upgrade every product at once from the upgrade-all menu.

upgrade-all-upgrades-everything: false
upgrade-all-must-meet-all-requirements: false
upgrade-all-discount: 50
only-owners-can-upgrade: false
OptionWhat it does
upgrade-all-upgrades-everythingUpgrades every product in collected-materials.yml, not only the ones this farmer has collected
upgrade-all-must-meet-all-requirementsRequires every product's money requirement to be met before any upgrade happens
upgrade-all-discountPercentage off the total, as an incentive to upgrade in bulk
only-owners-can-upgradeMembers with the UPGRADE rank permission are still refused

upgrade-all-must-meet-all-requirements applies to money requirements only — placeholder requirements are always checked per product, because there is no meaningful way to partially satisfy a VIP rank check.

Per-player discounts come from uxmfarmer.upgradediscount.<percentage>, which replaces the configured upgrade-all-discount for that player.

Storage limits and full stock

glow-if-stock-is-full: true puts a glow on the product's slot in the menu, which is the fastest way for a player to see what needs selling. notify-when-stock-gets-full messages them; the notify-amount setting caps how many notifications they get before it stops repeating.

Setting levels as staff

/uxmfarmer select
/uxmfarmer setproductlevel WHEAT 12
/uxmfarmer give LEVEL_ADDER Notch 1 WHEAT 3

The first sets a level directly. The second gives the player an item that adds three wheat levels when right-clicked near a farmer, which is what you hand out as a reward rather than editing someone's data by hand.