- Версия Java
-
- 21
- 22
- 23
- 24
- 25
- 26
- Ядро
-
- Paper
- Поддерживаемые версии
-
- 1.21.x
Удобный и безопасный обмен между игроками: предметы, деньги, уровни опыта и поинты в одном окне с двойным подтверждением.
О плагине
InTrade - серверный плагин для прямого обмена между игроками. Слева ваше предложение, справа - предложение партнёра. У каждого по 16 слотов для предметов и кнопки доступных валют. Никаких модов на клиенте не нужно, всё работает через обычное меню.
Главная задача плагина - сделать обмен честным. Подменить предмет в последний момент не получится: любое изменение сбрасывает готовность обоих игроков и сразу подсвечивается у партнёра.
Возможности
- Одно окно на двоих - по 16 слотов на каждую сторону. ЛКМ добавляет стак, ПКМ — один предмет.
- Несколько валют - деньги (Vault), целые уровни опыта, PlayerPoints. Сумму можно вводить как
1500,2.5kили1m. - Защита от подмены - после любого изменения кнопка «Готов» блокируется на 3 секунды, изменённые предметы подсвечиваются 6 секунд, на месте убранного остаётся красная отметка. Финальный отсчёт после подтверждения обоих — 3 секунды, и любое изменение его останавливает.
- Просмотр шалкеров и мешков - содержимое контейнеров партнёра можно посмотреть до обмена.
- Проверка места в инвентаре - обмен не завершится, если предметам некуда поместиться.
- Возврат предметов - всё, что не поместилось при возврате, и предметы участника, погибшего во время обмена, сохраняются для
/trade claim. - История обменов - меню с предметами и валютами каждого завершённого обмена.
- Статистика и топ - счётчик обменов и таблица лидеров, которые не сбрасываются при очистке истории.
- SQLite или MySQL/MariaDB - работает из коробки, а при необходимости несколько серверов могут использовать общую базу.
- Язык по клиенту - в режиме
autoкаждый игрок видит меню и сообщения на языке своей игры. В комплекте русский и английский, тексты в формате MiniMessage. - Поддержка Bedrock - игроки через Geyser/Floodgate вводят сумму в нативной форме.
- Доступ по рангам - обмен и отдельные валюты можно открывать с нужного ранга через LuckPerms.
- Быстрый запрос - Shift + ПКМ по игроку.
- PlaceholderAPI и API для разработчиков.
Как проходит обмен
- Отправьте
/trade <игрок>или нажмите ПКМ по игроку, удерживая Shift. Он принимает запрос командой/trade accept. - Добавьте предметы из инвентаря. Чтобы забрать предмет обратно, нажмите на него в окне обмена.
- Выберите валюту и введите сумму.
- Проверьте предложение партнёра и нажмите «Готов». Когда подтвердят оба, начнётся короткий отсчёт, после которого обмен завершится.
Требования
- Paper 1.21.7 или новее.
- Java той версии, которую требует ваш Paper (минимум 21).
- Доступ к интернету при первом запуске: Paper сам скачает нужные библиотеки.
Необязательные интеграции:
| Плагин | Что добавляет |
| Vault + плагин экономики | Деньги в окне обмена |
| PlayerPoints | Обмен поинтами |
| Floodgate | Нативная форма ввода суммы для Bedrock-игроков |
| PlaceholderAPI | Плейсхолдеры статистики и состояния игрока |
Установка
- Положите
InTrade-x.x.x.jarв папкуplugins. - Перезапустите сервер.
- При необходимости настройте
plugins/InTrade/config.ymlи выполните/trade reload.
Команды
| Команда | Описание |
/trade <игрок> | Отправить запрос или принять входящий от этого игрока |
/trade accept [игрок] | Принять запрос |
/trade deny [игрок] | Отклонить запрос |
/trade toggle | Включить или выключить входящие запросы |
/trade claim | Забрать сохранённые для вас предметы |
/trade history [игрок] | Своя история; для администрации — история другого игрока |
/trade reload | Перезагрузить конфигурацию и переводы |
/intrade. По умолчанию запрос действует 60 секунд, задержка между запросами - 5 секунд.| Право | По умолчанию | Доступ |
intrade.player | все | Все права игрока |
intrade.use | все | Запросы и /trade claim |
intrade.sneak | все | Запрос через Shift + ПКМ |
intrade.toggle | все | Переключение входящих запросов |
intrade.history | все | Своя история |
intrade.currency.money | все | Деньги Vault |
intrade.currency.experience | все | Уровни опыта |
intrade.currency.playerpoints | все | Поинты PlayerPoints |
intrade.admin | op | Все права администрации |
intrade.history.others | op | Чужая история |
intrade.reload | op | Перезагрузка настроек |
intrade.bypass.distance | op | Обход ограничений расстояния и миров |
intrade.bypass.cooldown | op | Обход задержки запросов |
intrade.bypass.blocked | op | Обмен запрещёнными предметами |
intrade.*, intrade.currency.*, intrade.bypass.*.Обмен только с определённого ранга. Укажите в конфиге:
YAML:
permissions:
open-to-everyone: false /trade reload и выдайте доступ группе: Код:
/lp group rank3 permission set intrade.player true Код:
/lp group rank3 permission set intrade.currency.money false
/lp group rank5 permission set intrade.currency.money true YAML:
# InTrade configuration.
# Messages and menu texts are in lang/<language>.yml.
# "auto" shows every player the messages in their game language. English and Russian are included,
# other languages can be added as new files in lang/. Any other value (for example "ru") uses one
# language for everyone.
language: auto
# Used for the console and for game languages without a file in lang/.
default-language: en
permissions:
# true: all players can trade by default.
# false: players need intrade.player (or individual permissions) from a permissions plugin such as LuckPerms.
# Staff permissions are always limited to operators by default.
open-to-everyone: true
requests:
# Time before an unanswered request expires.
expire-seconds: 60
# Minimum time between two requests from the same player.
cooldown-seconds: 5
# Allow sending a request by sneaking and right-clicking a player.
sneak-click: true
# Maximum distance between players. 0 disables the check.
max-distance: 0
# Allow trades only between players in the same world.
same-world: false
safety:
# Time after any change during which the "Ready" button is locked.
change-lock-seconds: 3
# Time a changed or removed item stays highlighted for the partner.
highlight-seconds: 6
# Countdown after both players are ready. Any change stops it.
confirm-seconds: 3
currencies:
# Requires Vault and an economy plugin.
money:
enabled: true
# Whole experience levels.
experience:
enabled: true
# Requires PlayerPoints.
playerpoints:
enabled: true
# Materials that cannot be traded.
blocked-items: []
# - BEDROCK
# - BARRIER
# Worlds where trades cannot be started.
disabled-worlds: []
history:
enabled: true
# Trades older than this are deleted on startup. 0 keeps all trades.
# Trade counts and the top list are not affected.
keep-days: 90
# Changes in this section require a server restart.
storage:
# sqlite: local file plugins/InTrade/trades.db, no setup required.
# mysql: MySQL or MariaDB server, configured below.
type: sqlite
# Unique name of this server. Only needed when several servers use the same MySQL database.
# Items in open trade windows and /trade claim mail are kept per server,
# trade history and trade counts are shared.
server-id: main
mysql:
host: localhost
port: 3306
database: minecraft
user: root
password: ""
# Number of connections. One is used for writing, the rest for reading.
pool-size: 4
# Additional JDBC driver properties.
properties:
useSSL: false
allowPublicKeyRetrieval: true | Плейсхолдер | Значение |
%intrade_trades% | Количество завершённых обменов игрока |
%intrade_trading% | Находится ли игрок сейчас в обмене |
%intrade_accepting% | Принимает ли игрок входящие запросы |
%intrade_top_<1-10>_name% | Ник игрока на указанном месте топа |
%intrade_top_<1-10>_trades% | Количество обменов у игрока на этом месте |
По умолчанию история хранится 90 дней, очистка выполняется при запуске сервера.
SQLite работает без настройки, база лежит в
Сеть серверов. Несколько серверов могут использовать одну базу с общей историей и статистикой. Каждому серверу нужен уникальный
history.keep-days: 0 отключает удаление. Счётчики обменов и топ хранятся отдельно и при очистке не сбрасываются.SQLite работает без настройки, база лежит в
plugins/InTrade/trades.db. Для MySQL или MariaDB укажите storage.type: mysql, заполните раздел storage.mysql и перезапустите сервер. Таблицы с префиксом intrade_ создаются автоматически.Сеть серверов. Несколько серверов могут использовать одну базу с общей историей и статистикой. Каждому серверу нужен уникальный
storage.server-id: незавершённые предложения и предметы для /trade claim привязаны к конкретному серверу.Модуль
api даёт доступ к статистике и событиям обмена. Подключите его как compileOnly и добавьте InTrade в depend или softdepend своего плагина. Java:
import me.spolzer.intrade.api.InTrade;
InTrade trade = InTrade.get();
trade.tradeCount(player.getUniqueId()).thenAccept(count ->
getLogger().info("Completed trades: " + count)); TradeRequestEventиTradeStartEventможно отменить.TradeCompleteEventсодержит оба предложения.TradeCancelEventсообщает причину отмены.- Статистика возвращается через
CompletableFuture. Для работы с Bukkit-объектами переключайтесь на основной поток сервера.
Нужен ли мод на клиенте?
Нет, плагин полностью серверный.
Можно ли запретить обмен определёнными предметами?
Да, через список
Можно ли ограничить обмен по расстоянию или мирам?
Да:
Что будет, если игрок выйдет или умрёт во время обмена?
Обмен отменяется, а предметы возвращаются владельцам. Если что-то не помещается в инвентарь, это сохраняется для
Как добавить свой язык?
Создайте файл
Есть ли абсолютная защита при падении сервера?
Незавершённые предложения записываются в базу и восстанавливаются после перезапуска. Однако сохранение игрока, запись в базу и операции сторонней экономики не объединены в одну транзакцию, поэтому при аварийном завершении сервера стопроцентной гарантии дать нельзя.
Нет, плагин полностью серверный.
Можно ли запретить обмен определёнными предметами?
Да, через список
blocked-items в конфиге. Администрация с правом intrade.bypass.blocked может обменивать их всё равно.Можно ли ограничить обмен по расстоянию или мирам?
Да:
max-distance, same-world и disabled-worlds.Что будет, если игрок выйдет или умрёт во время обмена?
Обмен отменяется, а предметы возвращаются владельцам. Если что-то не помещается в инвентарь, это сохраняется для
/trade claim.Как добавить свой язык?
Создайте файл
lang/<код>.yml по образцу en.yml или ru.yml.Есть ли абсолютная защита при падении сервера?
Незавершённые предложения записываются в базу и восстанавливаются после перезапуска. Однако сохранение игрока, запись в базу и операции сторонней экономики не объединены в одну транзакцию, поэтому при аварийном завершении сервера стопроцентной гарантии дать нельзя.
Ссылки
GitHub • CurseForge • Поддержка
Нашли баг или есть идея? Пишите в обсуждении ресурса или открывайте issue на GitHub.
GitHub • CurseForge • Поддержка
Нашли баг или есть идея? Пишите в обсуждении ресурса или открывайте issue на GitHub.