- Для версий
- 1.21.✘
- 26.✘
- Исходный код
- https://github.com/SpolzerMod/InOrders
Заказы на предметы: игрок оплачивает нужное заранее, а тот, у кого это есть, сдаёт товар и сразу получает деньги.
О плагине
InOrders - плагин заказов, устроенный наоборот по сравнению с аукционом. Здесь не ждут покупателя: игрок сам пишет, что ему нужно, например «64 дубовых брёвен по 2 монеты за штуку». Вся сумма списывается сразу и лежит в заказе, поэтому продавцу не приходится верить покупателю на слово.
Любой, у кого есть подходящие предметы, сдаёт их в пару кликов и тут же получает оплату. Заказчик забирает покупку, когда ему удобно, даже если в момент сдачи был не в сети.
Возможности
- Поиск на двух языках - алмаз и diamond, починка и mending находят одно и то же.
- Заказ по образцу - можно заказать точно такой же предмет, как в руке, вместе с чарами и эффектами зелий.
- Количество стаками - 640, 10ст или 2.5к. Цена указывается за штуку, в деньгах Vault или поинтах PlayerPoints.
- Подсветка подходящих заказов - заказы, для которых у вас уже есть предметы, выделены в списке. Shift + ЛКМ сдаёт всё сразу.
- Только точные совпадения - повреждённые, переименованные предметы и предметы с другими чарами не принимаются. Если двое сдают одновременно, заказ не возьмёт больше, чем нужно.
- Возврат денег - при отмене или окончании срока неизрасходованная сумма возвращается заказчику, уже купленное остаётся в заказе.
- Уведомления - заказчик узнаёт о каждой сдаче, а при входе на сервер получает напоминание, если его что-то ждёт.
- Слоты по рангам - сколько заказов можно держать открытыми, задаётся правами LuckPerms.
- Bedrock и старые клиенты - игроки через Geyser/Floodgate и клиенты младше 1.21.6 через ViaVersion получают те же формы в виде меню-сундуков.
- SQLite или MySQL/MariaDB - работает сразу после установки, несколько серверов могут делить одну базу.
- Язык по клиенту - в режиме auto каждый видит меню на языке своей игры. В комплекте русский и английский, тексты в формате MiniMessage.
- API для разработчиков с событиями создания, сдачи и отмены заказов.
СкриншотыСписок заказов
Создание заказа
Сдача предметов
Как это работает
Заказчик
- Откройте /orders и нажмите «Создать заказ».
- Найдите предмет в каталоге или возьмите его из своего инвентаря.
- Укажите количество, цену за штуку и срок. Проверьте итог и подтвердите: сумма спишется сразу.
- Заберите купленное в «Моих заказах» (/orders my).
Продавец
- Откройте /orders. Заказы, для которых у вас есть предметы, подсвечены.
- Нажмите на заказ и выберите ползунком, сколько сдать, или сдайте всё через Shift + ЛКМ.
- Оплата приходит сразу после сдачи.
Требования
- Paper 1.21.7 - 26.3, один jar на все версии.
- Java той версии, которую требует ваш Paper (минимум 21).
- Хотя бы одна валюта: Vault с плагином экономики или PlayerPoints.
- Доступ к интернету при первом запуске: Paper сам скачает нужные библиотеки.
интеграции:
| Плагин | Что добавляет |
| Vault (обязательно) | Заказы за деньги |
| PlayerPoints | Заказы за поинты |
| LuckPerms | Число слотов через мету inorders-limit с учётом мира и сервера |
| Floodgate | Нативные формы ввода для Bedrock-игроков |
| ViaVersion | Меню-сундуки для клиентов младше 1.21.6 |
Установка
- Положите InOrders-x.x.x.jar в папку plugins.
- Перезапустите сервер.
- При необходимости настройте plugins/InOrders/config.yml и выполните /orders reload.
Команды
| Команда | Описание |
| /orders | Открыть список заказов |
| /orders my | Ваши заказы: сколько уже сдали, получение покупок, отмена |
| /orders create [hand] | Создать заказ; с hand - на предмет из руки |
| /orders search <текст> | Найти заказы по названию предмета |
| /orders open <игрок> [my] | Открыть меню другому игроку, например из NPC |
| /orders reload | Перезагрузить конфигурацию и переводы |
| Право | По умолчанию | Доступ |
| inorders.player | все | Все права игрока |
| inorders.use | все | Список заказов и «Мои заказы» |
| inorders.create | все | Создание заказов |
| inorders.deliver | все | Сдача предметов |
| inorders.cancel | все | Отмена своих заказов |
| inorders.currency.money | все | Заказы за деньги Vault |
| inorders.currency.playerpoints | все | Заказы за поинты |
| inorders.limit.<число> | нет | Сколько заказов можно держать открытыми |
| inorders.limit.unlimited | нет | Без ограничения на открытые заказы |
| inorders.bypass.fee | нет | Без комиссии при создании заказа |
| inorders.bypass.tax | нет | Без налога при сдаче |
| inorders.admin | op | Все права администрации |
| inorders.admin.cancel | op | Снятие чужих заказов с возвратом денег заказчику |
| inorders.admin.open | op | /orders open |
| inorders.admin.reload | op | Перезагрузка настроек |
| inorders.admin.worlds | op | Заказы в мирах из disabled-worlds |
Заказы с определённого ранга. Укажите в конфиге:
YAML:
permissions:
open-to-everyone: false Код:
/lp group rank3 permission set inorders.player true Код:
/lp group rank3 permission set inorders.currency.money false
/lp group rank5 permission set inorders.currency.money trueСлоты заказов. Без прав действует orders.max-active из конфига. Право inorders.limit.<число> заменяет это значение, из нескольких берётся наибольшее, так что лимит можно и уменьшить:
Код:
/lp group default permission set inorders.limit.3 true
/lp group vip permission set inorders.limit.5 true
/lp group admin permission set inorders.limit.unlimited true Код:
/lp group vip meta set inorders-limit 5 YAML:
# InOrders 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 use orders by default.
# false: players need inorders.player (or individual permissions) from a permissions plugin such as LuckPerms.
# Staff permissions are always limited to operators by default.
open-to-everyone: true
menus:
# How forms are shown: creating an order, choosing an amount, entering a price or a search.
# auto: game dialogs (Minecraft 1.21.6 and newer), chest menus for Bedrock players and older clients.
# dialog: dialogs wherever the client supports them.
# chest: chest menus and chat input for everyone.
# With dialogs the item catalog is a dialog too, with item icons for clients 1.21.11 and newer.
# Order lists are always chest menus.
forms: auto
# Creative tabs hidden from the item catalog. Tab ids: building_blocks, colored_blocks, natural_blocks,
# functional_blocks, redstone_blocks, tools_and_utilities, combat, food_and_drinks, ingredients, spawn_eggs.
hidden-tabs:
- spawn_eggs
orders:
# Open orders per player without a limit permission. inorders.limit.<number> or the LuckPerms meta
# inorders-limit replace it, inorders.limit.unlimited removes the limit.
max-active: 7
# Largest number of items in one order. 2304 is a full inventory of 64-item stacks.
max-amount: 2304
# Durations in days a player can choose from.
durations: [1, 3, 7]
default-duration: 3
# Paid on top of the order price when it is created. Not returned when the order is cancelled.
fee-percent: 0
# Taken from the money a seller receives for delivered items.
tax-percent: 0
currencies:
# Requires Vault and an economy plugin.
money:
enabled: true
# Price limits for one item. 0 as max-price means no limit.
min-price: 0.01
max-price: 0
# Requires PlayerPoints.
playerpoints:
enabled: true
min-price: 1
max-price: 0
# Items that cannot be ordered.
blocked-items: []
# - BEDROCK
# - BARRIER
# Worlds where the order menus cannot be opened.
disabled-worlds: []
notifications:
# Tell online owners when items are delivered to their orders.
deliveries: true
# Remind players on join that they have items or refunds to collect.
join-reminder: true
# Format: "<sound> [volume] [pitch]". Leave empty to turn a sound off.
sounds:
click: "ui.button.click 0.4 1.2"
success: "entity.player.levelup 0.6 1.4"
sell: "entity.experience_orb.pickup 0.8 1.1"
claim: "entity.item.pickup 0.8 0.9"
notify: "block.note_block.chime 0.8 1.2"
error: "entity.villager.no 0.6 1"
# Changes in this section require a server restart.
storage:
# sqlite: local file plugins/InOrders/orders.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.
server-id: main
# true: orders from every server sharing the database are visible everywhere.
# Only enable this when all these servers share one economy, otherwise money moves between economies.
shared-orders: false
mysql:
host: localhost
port: 3306
database: minecraft
user: root
password: ""
# Number of connections.
pool-size: 4
# Additional JDBC driver properties.
properties:
useSSL: false
allowPublicKeyRetrieval: trueSQLite работает без настройки, база лежит в plugins/InOrders/orders.db. Для MySQL или MariaDB укажите storage.type: mysql, заполните раздел storage.mysql и перезапустите сервер. Таблица inorders_orders создаётся сама.
Каждое изменение заказа выполняется одной транзакцией, все записи одного сервера идут по очереди. Суммы хранятся в целых сотых, поэтому ошибок округления нет.
Сеть серверов. Серверы с общей базой различаются по storage.server-id и по умолчанию видят только свои заказы. storage.shared-orders: true делает заказы общими для всей сети, но включать это стоит только при общей экономике.
Каждое изменение заказа выполняется одной транзакцией, все записи одного сервера идут по очереди. Суммы хранятся в целых сотых, поэтому ошибок округления нет.
Сеть серверов. Серверы с общей базой различаются по storage.server-id и по умолчанию видят только свои заказы. storage.shared-orders: true делает заказы общими для всей сети, но включать это стоит только при общей экономике.
Модуль api открывает доступ к заказам и событиям. Подключите его как compileOnly и добавьте InOrders в depend или softdepend своего плагина.
Java:
import me.spolzer.inorders.api.InOrders;
InOrders orders = InOrders.get();
orders.orders(player.getUniqueId()).thenAccept(list ->
getLogger().info(player.getName() + " has " + list.size() + " orders"));- OrderCreateEvent приходит до списания оплаты, OrderDeliverEvent до изъятия предметов у продавца, OrderCancelEvent при отмене. Все три можно отменить.
- InOrders#openMenu(Player) открывает список заказов.
- Данные возвращаются через CompletableFuture. Для работы с Bukkit-объектами вернитесь в основной поток сервера.
- Order#priceCents() отдаёт цену в сотых: 250 для 2.50, 500 для 5 поинтов.
Нужен ли мод или ресурспак на клиенте?
Нет, всё работает на стандартных окнах Minecraft.
Почему каталог не помещается в маленькое окно?
Сервер не знает размер окна игрока, поэтому ширина каталога постоянная. Разверните игру на весь экран или уменьшите масштаб интерфейса.
Можно ли обойтись без игровых окон?
Да, menus.forms: chest переводит все формы на меню-сундуки.
Можно ли запретить заказывать определённые предметы?
Да, через список blocked-items в конфиге.
Что будет, если заказчик не в сети, когда заказ выполнили или отменили?
Предметы и деньги дождутся его в заказе, а при входе плагин напомнит о них.
Как добавить свой язык?
Создайте файл lang/<код>.yml по образцу en.yml или ru.yml.
Защищён ли плагин от падения сервера?
После каждой сдачи файл продавца сохраняется сразу, так что предметы не окажутся одновременно и у него, и в заказе. Операции, которые база уже записала, доводятся до конца даже при выключении сервера. Но плагин экономики и база данных остаются разными системами, поэтому при аварийном завершении посреди операции полной гарантии дать нельзя.
Нет, всё работает на стандартных окнах Minecraft.
Почему каталог не помещается в маленькое окно?
Сервер не знает размер окна игрока, поэтому ширина каталога постоянная. Разверните игру на весь экран или уменьшите масштаб интерфейса.
Можно ли обойтись без игровых окон?
Да, menus.forms: chest переводит все формы на меню-сундуки.
Можно ли запретить заказывать определённые предметы?
Да, через список blocked-items в конфиге.
Что будет, если заказчик не в сети, когда заказ выполнили или отменили?
Предметы и деньги дождутся его в заказе, а при входе плагин напомнит о них.
Как добавить свой язык?
Создайте файл lang/<код>.yml по образцу en.yml или ru.yml.
Защищён ли плагин от падения сервера?
После каждой сдачи файл продавца сохраняется сразу, так что предметы не окажутся одновременно и у него, и в заказе. Операции, которые база уже записала, доводятся до конца даже при выключении сервера. Но плагин экономики и база данных остаются разными системами, поэтому при аварийном завершении посреди операции полной гарантии дать нельзя.