expTrade

Trade XP levels with other players via commands. Send offers or requests, accept or decline with clickable chat buttons. Accurate per-level XP math ensures fair transfers. Includes admin controls and per-player thresholds.

90

expTrade

expTrade

A Minecraft mod/plugin that lets players trade XP with each other. Offers and requests queue up per-player with individual TTLs, and are managed through an in-game chest GUI.

---

Branches

| Branch | Platform | MC Version | |---|---|---| | `multi_1.21.11` | Fabric + NeoForge (Architectury) | 1.21.11 | | `plugin_1.21.11` | Spigot, Paper, Purpur, Pufferfish | 1.21.11 | | `multi_26.x` *(upcoming)* | Fabric + NeoForge (Architectury) | 26.x | | `plugin_26.x` *(upcoming)* | Spigot, Paper, Purpur, Pufferfish | 26.x |

---

Features

- Give or request XP levels or raw XP from any online player - Per-player incoming trade queue — multiple players can send trades simultaneously - Chest GUI to review, accept, and decline queued trades - Live TTL countdown per trade — expired trades are removed automatically - Configurable timeout and max queue size - Personal XP threshold — prevent trades that would drop you below a set level - Admin force-transfer with confirmation step - Config hot-reload without restarting the server

---

Trade Queue GUI

Opening `/exptrade pending` shows a chest with one row per queued trade:

| Slot | Item | Meaning | |---|---|---| | 1 | Clock | Seconds remaining before this trade expires | | 2 | Player Head | Who sent the trade | | 3 | Water Bucket / Bucket | Offer (giving XP) / Request (asking for XP) | | 4 | Paper | Trade details on hover (from, type, amount) | | 8 | Recovery Compass | Click to decline | | 9 | Compass | Click to decline |

The GUI stays open after each action as long as trades remain in the queue.

---

Commands

All commands use `/exptrade`.

| Command | Description | |---|---| | `/exptrade give <player> <levels|exp> <amount|all>` | Offer XP to a player | | `/exptrade request <player> <levels|exp> <amount|all>` | Request XP from a player | | `/exptrade accept [player]` | Accept the first (or a specific) queued trade | | `/exptrade decline [player]` | Decline the first (or a specific) queued trade | | `/exptrade cancel` | Cancel your outgoing trade | | `/exptrade pending` | Open the trade queue GUI | | `/exptrade threshold <levels>` | Set minimum level to keep after a trade |

Admin (`exptrade.admin` / op permission)

| Command | Description | |---|---| | `/exptrade admin transfer <from> <to> <levels|exp> <amount|all>` | Force an XP transfer between two players | | `/exptrade admin confirm` | Confirm a pending admin transfer | | `/exptrade admin cancel` | Cancel a pending admin transfer | | `/exptrade config timeout <10-300>` | Set trade TTL in seconds | | `/exptrade config maxqueue <1-50>` | Set max trades per player queue | | `/exptrade config reload` | Reload config from disk |

---

Configuration

Config is written on first launch.

Paper plugin — `config/exptrade.json` Paper plugin — `plugins/expTrade/config.json`

```json { "timeoutSeconds": 60, "maxQueueSize": 10 } ```

| Field | Default | Description | |---|---|---| | `timeoutSeconds` | `60` | Seconds before an unaccepted trade expires | | `maxQueueSize` | `10` | Max number of queued trades per player |

---

Requirements

Paper: Architectury API Paper: Paper 1.21.11+

ADS