AirTrade | Flexible, Fast, and Highly Customizable! icon

AirTrade | Flexible, Fast, and Highly Customizable! -----

Enable smooth, intuitive trading with a powerful and easy-to-use plugin.



AirTrade provides a reliable trading system that allows players to exchange items safely through a synchronized GUI.​
It includes request handling, restrictions, blacklists, and complete GUI customization.
Designed to remain lightweight while still offering flexible configuration options.
upload_2025-11-27_23-32-49.png

Features
✅ Configurable trading GUI (`gui/trade.yml`)
✅ Shift-right-click option to send trade requests
✅ Trade confirmation countdown
✅ Item, world, distance, and gamemode restrictions
✅ Blacklist support (materials, names, lore, enchants, exact items)
✅ Customizable sounds for all trade events
✅ Request cooldowns and expiration timers
✅ Automatic cancellation on logout, death, or closing the GUI
✅ MiniMessage-based messages and PlaceholderAPI support
✅ MySQL or SQLite for persistent player toggles
✅ Option to disable item dropping during trades

Code (Text):

# ==========================================
# AirTrade — Configuration
# ==========================================

# Which language pack to load (file: AirTrade/lang/<code>.yml)
# You can create your own lang file!
lang: en_US

# Command aliases (restart required to reflect changes)
aliases:
  - trade
  - atrade

# Database Configuration
mysql:
  enabled: false
  host: "localhost"
  port: 3306
  database: "airtrade"
  username: "your_username"
  password: "your_password"

# Sneak + right-click to send trade request
shift-click-request: true

# Allow dropping items during trade
allow-item-drop-during-trade: false

# Seconds to wait after both players are ready before completing the trade (-1 to disable)
trade-confirm-countdown: 5

# Cancel certain events when trading
cancel-trade-when:
  move: true
  command: true
  interact: true

# Show a summary of items exchanged upon trade completion
enable-trade-summary: true

# Cooldown (in seconds) between requests to same player (-1 to disable)
trade-request-cooldown: 5

# Expiry (in seconds) for pending requests (-1 to disable)
# I's recommended to set it to 5 at least
trade-expire-time: 60

# Retain requests and cooldowns after logout
retain-request-state-on-logout: false

# Require players to be in the same world
same-world: true

# Max distance allowed between players (-1 to disable)
max-distance: 10

# Worlds where trading is disabled
blacklisted-worlds:
  - example_world

# Gamemodes where trading is disabled
# Options: SURVIVAL, CREATIVE, ADVENTURE, SPECTATOR
blacklisted-gamemodes:
  - CREATIVE
  - SPECTATOR

# Restrict specific items from being traded
blacklisted-trades:
  # Blacklist specific materials
  materials:
    - SPAWNER
    # - SPAWNER:COW
    - BEDROCK
  # - ENCHANTED_BOOK:EFFICIENCY
  # - SPLASH_POTION:POISON
  # - TIPPED_ARROW:HEALING

  # Blacklist specific item enchantments
  enchantments:
    - BINDING_CURSE
    - VANISHING_CURSE
  # - PROTECTION
  # - SHARPNESS:3

  # Blacklist specific item names (no need to include colours)
  # Prefix with * for case-insensitive matching
  names:
    - "Ilegal Item"
    - "*banned item"

  # Blacklist specific item lore (no need to include colours)
  # Prefix with * for case-insensitive matching
  lore:
    - "0:Banned Lore" # Any item with the lore line 0 as "Banned Lore" will be blacklisted
    - "1:*ilegal lore"

  # Blacklist very specific items (no need to include colours)
  items:
    admin-sword:
      material: DIAMOND_SWORD
      name: "Admin Sword"
      lore:
        - "Only for admins"
        - "Do not trade!"
      enchantments:
        - SHARPNESS:5
        - FIRE_ASPECT:2

# Sounds for certain events
# Format: SOUND_NAME VOLUME PITCH ("" to disable)
sounds:
  trade-request-sent: "entity.experience_orb.pickup 1.0 1.0"
  trade-request-received: "entity.player.levelup 0.8 1.2"
  trade-started: "entity.player.levelup 0.8 2.0"
  trade-completed: "entity.player.levelup 0.8 2.0"
  trade-countdown: "entity.experience_orb.pickup 1.0 2.0"
  trade-cancelled: "entity.zombie.break_wooden_door 1.0 2.0"

 
lang/en_US.yml | es_ES.yml | pt_BR.yml
Code (Text):

# ==========================================
# AirTrade — Messages
# ==========================================
# Supports MiniMessage & PlaceholderAPI.
# Leave blank ("") to disable a message.
# Use %prefix% to inject the prefix anywhere.
# ==========================================

# ------------------------------------------
# Prefix
# ------------------------------------------
prefix: "<gray>[<gradient:#00ffcc:#0066ff>AirTrade</gradient>]</gray>"

# ------------------------------------------
# Trade Flow, Usage, Toggles, Limits
# ------------------------------------------
trade:
  # Admin / reload
  reloaded: "%prefix% <green>Configuration and messages reloaded."

  # Usage
  usage-player:
    - "%prefix% <red>Usage:"
    - "<yellow>/%label% <player>"
    - "<yellow>/%label% accept"
    - "<yellow>/%label% deny"
    - "<yellow>/%label% toggle"

  usage-admin:
    - "%prefix% <red>Usage:"
    - "<yellow>/%label% <player>"
    - "<yellow>/%label% accept"
    - "<yellow>/%label% deny"
    - "<yellow>/%label% toggle"
    - "<gold>/%label% reload"

  # Requests
  request-sent: "%prefix% <green>Trade request sent to <yellow>%target%</yellow>."
  request-received: "%prefix% <yellow>%player%</yellow> <green>wants to trade with you."
  expired: "%prefix% <red>Your trade request to <yellow>%target%</yellow> has expired."
  request-expired: "%prefix% <red>The trade request from <yellow>%player%</yellow> has expired."

  # Toggle Preferences
  toggle-on: "%prefix% <green>You can now receive trade requests."
  toggle-off: "%prefix% <red>You will no longer receive trade requests."
  target-toggle-disabled: "%prefix% <red>You cannot send a trade request to <yellow>%target%</yellow> because they have trades disabled."

  # Accept / Deny
  no-requests: "%prefix% <red>You have no pending trade requests."
  no-request-from: "%prefix% <red>You have no trade request from <yellow>%player%</yellow>."
  request-accepted: "%prefix% <green>You accepted the trade request from <yellow>%target%</yellow>."
  request-accepted-target: "%prefix% <yellow>%player%</yellow> <green>accepted your trade request."
  request-denied: "%prefix% <red>You declined the trade request from <yellow>%target%</yellow>."
  request-denied-target: "%prefix% <yellow>%player%</yellow> <red>declined your trade request."
  all-requests-denied: "%prefix% <red>You declined all previous trade requests."

  # Session
  cancelled: "%prefix% <red>Trade cancelled."
  completed: "%prefix% <green>Trade completed successfully!"
  summary:
    header: "%prefix% <green>Trade summary:"
    received: "<green>+ x%amount% %item%"
    given: "<red>- x%amount% %item%"
  item-cooldown: "%prefix% <red>You must wait <yellow>%seconds%</yellow> seconds before using this item again!"
  item-blacklisted: "%prefix% <red>This item is blacklisted!"

  # Limits / Restrictions
  cooldown: "%prefix% <red>You must wait <yellow>%seconds%</yellow> seconds before sending another trade request to <yellow>%target%</yellow>."
  too-far: "%prefix% <red>You cannot trade with <yellow>%target%</yellow>. Maximum distance allowed is <yellow>%blocks%</yellow> blocks."
  different-world: "%prefix% <red>You must be in the same world as <yellow>%target%</yellow> to trade."
  blacklisted-gamemode-sender: "%prefix% <red>You cannot send trade requests while in your current gamemode."
  blacklisted-gamemode-target: "%prefix% <red>You cannot trade with <yellow>%target%</yellow> because they are in a blocked gamemode."
  blacklisted-world-sender: "%prefix% <red>You cannot send trade requests while in this world."
  blacklisted-world-target: "%prefix% <red>You cannot trade with <yellow>%target%</yellow> because they are in a blocked world."

# ------------------------------------------
# Errors
# ------------------------------------------
errors:
  player-not-found: "%prefix% <red>Player not found or not online."
  self-trade: "%prefix% <red>You cannot trade with yourself."
  no-permission: "%prefix% <red>You do not have permission to use this command."
 
Code (Text):

# ==========================================
# AirTrade — GUI Configuration
# ==========================================

title: "<dark_gray>Trading with %target%"

# Inventory size (must be multiple of 9)
size: 54

# Local player's trade slots
player-slots: [10, 11, 12, 19, 20, 21, 28, 29, 30]

# Target player's trade slots
target-slots: [14, 15, 16, 23, 24, 25, 32, 33, 34]

items:
  # Player ready states (built-in)
  player:
    cooldown: 3 # Shared cooldown for both states
    not-ready:
      material: RED_STAINED_GLASS_PANE
      slots: [9, 18, 27]
      display-name: "<red>Not ready"
    ready:
      material: LIME_STAINED_GLASS_PANE
      slots: [9, 18, 27]
      display-name: "<green>You are ready to trade"
      lore:
        - ""
        - "<gray>Waiting for %target%..."
      apply-confirm-countdown: true
      amount: 5

  # Target ready states (built-in)
  target:
    not-ready:
      material: RED_STAINED_GLASS_PANE
      slots: [17, 26, 35]
      display-name: "<red>Not ready"
    ready:
      material: LIME_STAINED_GLASS_PANE
      slots: [17, 26, 35]
      display-name: "<green>%target% is ready to trade"
      apply-confirm-countdown: true
      amount: 5

  # Custom Items (editable/removable)

  filler:
    material: BLACK_STAINED_GLASS_PANE
    slots: [0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 31, 36, 37, 38, 39 , 40, 41, 42, 43, 44, 49]
    hide-tooltip: true

  close:
    material: BARRIER
    slots: [22]
    display-name: "<red>Cancel trade"
    actions:
      - "[close]"

  # Example of stateful custom item
  player-head:
    cooldown: 3
    not-ready:
      material: PLAYER_HEAD
      skull-owner: "%player%"
      slots: [45]
      display-name: "<green>You (%player%)"
      lore:
        - "<red>Not ready!"
        - ""
        - "<gray>→ Click to toggle ready status"
      actions:
        - "[toggle]"
        - "[sound] entity.experience_orb.pickup 1.0 1.0"
    ready:
      material: PLAYER_HEAD
      skull-owner: "%player%"
      slots: [45]
      display-name: "<green>You (%player%)"
      lore:
        - "<green>Ready to trade!"
        - ""
        - "<gray>→ Click to toggle ready status"
      actions:
        - "[toggle]"
        - "[sound] entity.experience_orb.pickup 1.0 1.0"

  target-head:
    material: PLAYER_HEAD
    skull-owner: "%target%"
    slots: [53]
    display-name: "<green>Them (%target%)"
 

Commands
Code (Text):

/airtrade <player>          - Send a trade request
/airtrade accept            - Accept the most recent request
/airtrade accept [player]   - Accept a specific player request
/airtrade deny              - Deny a trade request
/airtrade deny [player]     - Deny a specific player request
/airtrade toggle            - Enable/disable receiving trade requests
/airtrade reload            - Reload config and GUI files
 
Aliases can be added in `config.yml`.

Permissions
Permission Description
airtrade.use Allows using the trade command
airtrade.admin Access to admin commands
airtrade.bypass.all Grants all bypass permissions
airtrade.bypass.distance Bypass distance restriction
airtrade.bypass.world Bypass world restrictions
airtrade.bypass.gamemode Bypass gamemode restrictions
airtrade.bypass.toggle Allow trading with players who disabled trades
airtrade.bypass.blacklist Bypass item blacklist


PlaceholderAPI Placeholders
Placeholder Description
%airtrade_trade_toggled% Returns "true" if the player has trade requests enabled
%airtrade_player_is_ready% Returns "true" if the player is marked as ready inside an active trade
%airtrade_target_is_ready% Returns "true" if the player’s trade partner is ready
%airtrade_confirm_countdown% Remaining countdown seconds before the trade completes (or full countdown value if not started yet)
%airtrade_is_trading% Returns "true" if the player is currently in a trade session
%airtrade_active_trades% Returns the number of active trade sessions on the server


To-Do
  • Vault compatibility for trading money
  • Optional trade logging
  • Additional GUI action types

If you find any bug, need help, or want to suggest a feature, feel free to contact me on Discord (@featxeven) or use the plugin’s discussion section!
Resource Information
Author:
----------
Total Downloads: 4
First Release: Nov 28, 2025
Last Update: Nov 28, 2025
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings