TradeForge
One shared window, and nothing moves until both say yes
TradeForge is player-to-player trading for Paper 1.21.x, built around the three decisions that separate a trade window somebody can trust from one that loses items.
THE THREE DECISIONS
- One shared window. There is exactly one place where a traded stack exists at any moment. Two copies have to be synchronised on every click, and any drift is an item that exists twice or not at all
- Any change clears both confirmations — items, money, either side. It is not a setting you can weaken: it is the whole defence against changing the deal after somebody agreed to it
- All or nothing. Inventory space and balance are checked for both players before anything moves. Handing the goods over and sorting out the leftovers afterwards is how a trade ends with half the load on the floor of somebody else's claim
WHAT HAPPENS WHEN THINGS GO WRONGThis is where trade plugins lose items, so it is worth being specific:Somebody disconnects mid-trade — what they had on the table is written to disk and handed back the next time they log in. An offline player has no inventory to write to, and dropping the stacks on the ground is a free chest for whoever is standing thereSomebody dies mid-trade — same thing, handed over on respawn. Putting items into a dead player's inventory means they are wiped when they come backThe server stops mid-trade — same again, written before the plugin disablesYour balance drops between confirming and closing — the trade aborts and tells both of you, rather than half-paying anybodyOne of you walks away — the distance is measured again at settlement, not only when the window openedSomebody's inventory is full — the trade stays open and says who has no room, so it can be fixed without starting overBoth close the window at the same instant — the goods are returned once. Not twiceFEATURES
- Money on the table — through Vault, with an optional per-trade ceiling. Withdrawn and deposited only at settlement
- Blocked materials — a list of what may not be traded, with a bypass permission for staff
- Distance limit — trading is face to face by default, configurable or off
- Combat aware — refuses to start while either player is tagged in combat by your combat plugin
- Audit log — every settled trade is appended to trades.log, tab separated so you can grep it, and read back on restart. /trade log shows the recent ones in game. A log that only lives in memory answers "he scammed me" until the next restart, which is exactly when somebody asks
- Shift-click to offer — lands in your half of the window, never in theirs
- Configurable window — 1 to 12 slots per side
- PlaceholderAPI — whether a player is trading, and with whom
- English and Spanish included, and every string a player sees lives in the language file
COMMANDS AND PERMISSIONS
- /trade <player> · /trade accept · /trade deny · /trade cancel · /trade money <amount> · /trade log
- tradeforge.use and tradeforge.money default to everyone; tradeforge.log, tradeforge.reload and the two bypasses default to operators
- Every node is declared in plugin.yml, so your permissions plugin can see them all