AstraAuction - Плагин рынка (аукциона) для Lumi

:dizzy: AstraAuction β

Плагин рынка (аукциона) для Lumi.

Прочти меня :warning:

Данный плагин написан для практики. Возможен гкод и т.д, т.к Java я начал учить относително недавно (всего лишь год с чем-то). А, ну и потому что мне было скучно.

Описание :open_book:

AstraAuction — рынок для перепродажи предметов между игроками на Lumi. Плагин сохраняет NBT предметов, хранит данные в базе данных и предоставляет удобный GUI с поиском, сортировкой и управлением лотами.

Возможности :glowing_star:

  • Сохранение NBT — предмет продаётся в точности таким, каким он был у продавца.
  • Асинхронная БД — запросы выполняются в фоне без блокировки основного треда.
  • Комиссия — процент удержания настраивается в конфиге.
  • Склад возврата (claims) — непроданные лоты и выплаты офлайн-продавцам сохраняются до истечения срока хранения.
  • GUI-рынок — покупка, подтверждение, навигация по страницам.
  • Сортировка и поиск — сортировка по цене, поиск по названию предмета.
  • Управление своими лотами — просмотр и отмена активных лотов через GUI.
  • Гибкая БД — SQLite / MySQL / PostgreSQL.
  • Локализацияrus (русский), eng (English), ukr (українська), jpn (日本語), из коробки, а также возможность добавлять собственные языки.

Скриншоты :framed_picture:

Основная страница рынка Страница «Мои лоты»
Страница склада возврата Страница подтверждения покупки

Команды :wheelchair_symbol:

Команда Описание Пермишен
/ah Открыть рынок astraauction.use
/ah open [page: int] Открыть рынок на указанной странице astraauction.use
/ah sell <price: int> Выставить предмет в руке astraauction.use
/ah view <nickname: str> [page: int] Лоты конкретного игрока astraauction.use
/ah search <query: str> [page: int] Поиск по названию лота astraauction.use
/ah force_buy <id: int> Принудительно купить лот (процесс проходит как обычная покупка) astraauction.force
/ah force_expire <id: int> Принудительно завершить лот astraauction.force

Алиасы команды: /auction, /auc.

Пермишены :locked_with_key:

  • astraauction.use — доступ к основным командам (доступен всем по умолчанию).
  • astraauction.force — доступ к принудительным командам (по умолчанию доступен только операторам).

Конфигурация :gear:

Основные настройки находятся в config.yml:

Параметр Описание По умолчанию
database.type Тип БД: sqlite / mysql sqlite
language.value Режим языка: eng / rus / ukr / jpn / autodetect / server autodetect
language.default Язык по умолчанию eng
auction.duration-seconds Время жизни лота (сек.) 172800 (48h)
auction.tax-percent Комиссия (%) 10.0
auction.round-prices Округлять цены до целых false
auction.max-slots Макс. активных лотов (0 — без лимита) 6
auction.claim-expire-seconds Срок хранения склада (сек.) 604800 (7d)
auction.gui.page-size Размер страницы (до 45) 45
auction.gui.open-delay-ticks Задержка открытия GUI (тики) 10
auction.gui.sort-default Сортировка по умолчанию price_asc

Зависимости :electric_plug:

  • EconomyAPI — требуется для покупок и выплат.
  • FakeInventories — требуется для GUI.
  • JOOQConnector — работа с базой данных через ORM JOOQ.
  • Polyglot (уже вшит) — движок локализаций с динамической загрузкой языков.

Скачать :downwards_button:


Форум не дает возможности обновлять темы, которым больше 2-3х дней, так что если что-то и произойдет, то только на GitHub

3 лайка

■■■■■■ лагучее :heart:

Тонна рекомендаций, которые прям очень сильно желательно учесть.

  1. Поменяй FakeInventories на наш.
  2. Замени sql2o-nukkit на JOOQConnector, соответственно перепиши запросы на использование орм JOOQ.
  3. Переделай комманды на использование системы субкомманд и аргументов, примеры в коде ядра в cn.nukkit.command.defaults.
  4. Переименуй package связанный с бд. Сделай его repository
  5. В ItemSerializer пропиши в putItemHelper значение true для forcenamespaceId, для лучшей совместимости
  6. Что вообще за чертовщина в методе fromBase64? Это пи3дец какой-то
  7. Переделай поиск языков, сейчас у тебя хардкод, без пересборки плагина при добавлении новых языков он их не подгрузит. А лучше и вовсе заюзай GitHub - DensyDev/Polyglot: Polyglot is an advanced and multifunctional library for localizing strings

В PMMP был nbtserialize, которого не оказалось в Lumi (либо я не нашел). Соответственно пошел на такой костыль.


Щя будет

в чем вообще проблема просто декодировать byte[] из Base64, восстановить из него compoundtag и по нему получать предмет через NBTIO?

В этом

о каком хардкоде идет речь когда чувак банально советы у гпт спрашивает, в коде видно же

3 лайка


сылффаер

никаких проблем когда изучаешь что-то и ищешь через гпт какую либо инфу - нет.

Это лишь проблема когда человек от слова совсем не знает что творит.

Я сейчас весь фронт своих сайтов отдаю под написание gpt/gemini и не вижу проблем. Я это делаю для внутри пользования компании, это A. Второе это просто сокращение человека часов и ускорение работы. Кроме того, мне всегда не нравился фронт, а писать чисто скрипты к сожалению на irl работе не выходит)

да я понимаю это, но весь его хардкод - это кривая паста из гпт

но постарался хоть, уже молодец, но для первых плагинов брать такое сложное плохое решение

а судьи кто?

эпштейн

2 лайка

Не паста кст :nerd_face::index_pointing_up:

i use arch btw

i use cachyos (govno ebanoe) btw

makan tolstiy btw

mat’ gabena tolshe btw

извинись габен лучший

так я не про габена писал