Both editions use the same recovery rules. A hold is a request to inspect the outcome, not evidence that the action failed. Never automatically resolve every hold the same way.
When an operation stops halfway
- Stop further trading for the affected player while investigating. Take a stopped-server backup of the plugin data plus matching world/player files. Preserve logs and the operation ID.
- Run
/fmarket recoveras an operator or from the console. It lists the operation kind, ID, player UUID and amount/quantity.PREPARED/CLAIMINGoperations found on startup becomeREVIEW. - Inspect the player's inventory, corresponding logs and—if applicable—the external provider's transaction ledger. Compare the operation quantity with the observed result. Do not guess from the player's current wallet alone.
- Resolve that ID once using the table below. The resolution is audited. Reusing a resolved ID is rejected.
- Confirm the player's items, wallet, stock and delivery inbox now agree. Record the evidence staff used.
| Kind | occurred means |
Resolution effect |
|---|---|---|
deposit |
The specified items really left the depositing player's inventory | Add the reserved quantity to the offer |
deposit + not-occurred |
The items never left the inventory | Cancel reservation; no market stock is created |
delivery |
The reserved claim stack really arrived in the player's inventory | Remove that quantity from the inbox record |
delivery + not-occurred |
The player did not receive the reserved stack | Make the parcel claimable again |
Bank DEPOSIT |
External economy successfully debited the player | Credit the internal wallet |
Bank DEPOSIT + not-occurred |
External debit did not happen | Cancel with no internal credit |
Bank WITHDRAW |
External economy successfully credited the player | Finish the already-reserved internal debit |
Bank WITHDRAW + not-occurred |
External credit did not happen | Refund the internal wallet reservation |
Examples:
/fmarket recover
/fmarket resolve deposit <transfer-uuid> occurred
/fmarket resolve delivery <numeric-parcel-id> not-occurred
/fmarket resolve bank <transfer-uuid> occurred
/fmarket audit
occurred always refers to the physical/external action, not whether the plugin showed a success message. If a provider reports a partial or incorrect amount, or evidence is inconclusive, leave the hold in place until staff reconcile the external state. The plugin cannot infer that safely. A wallet at its maximum can also need capacity freed before reconciliation.
Backup and migration
- Use full stop/start, never Bukkit
/reloador plugin hot-loading. - Back up all of
plugins/ForgeMarket/, including SQLite sidecar files if present, and matching world/player data from the same stopped state. - Do not restore only the wallet database to an earlier time while keeping newer player inventory files. That can resurrect spent money or claimed items.
- Test restoring your backup on an isolated clone. Normal restart checks do not establish arbitrary crash or disk-failure recovery.
- Free/Premium share their data directory and schema. Replace the JAR; retain the data. Keep the previous JAR plus the matching data backup for rollback.
- Protect
forgemarket.admin. Credits grants and manual resolutions alter the economy.
Current boundaries
Local SQLite operations are synchronized and run on the server/player callback thread. High traffic or slow disks can delay gameplay; this build has not been stress-qualified for large economies. One plugin process owns one database. No cross-server sync, SQL replication, automatic provider retry, partial external transfer reconciliation or chargeback system is provided.
Offer browsing returns up to 1,000 matching active offers; use search to narrow large catalogues. Inbox pages expose the first 1,000 pending records, with later records becoming accessible as earlier ones are claimed. Each offer holds at most 1,000,000 items. A checkout line accepts at most 2,304 items. A wallet caps at 1,000,000,000,000.00 credits; input fields accept at most 12 whole-number digits and two fractional digits. Reviews query up to 50 records and display the first eight; comprehensive review moderation/pagination is not included yet.
Item transfers are restricted to living Survival/Adventure players. Existing protection plugins do not control a virtual marketplace's transactions automatically; there is no world-block shop or protection integration to configure here.