Вопрос Работа с меню

Версия Minecraft
1.20.X

Artur001

Пользователь
Сообщения
26
Всем привет!

Я написал плагин на аукцион, но только недавно понял одну вещь.
Проблема в том, что при каждом взаимодействии я открываю игроку новое меню, а не обновляю старое. Например, меняя тип сортировки, или же обновляя страницу аукциона.
Хочу поинтересоваться, если оставить как есть, сильно ударит по оптимизации? Или всё же переписать?
 
Последнее редактирование:
Всем привет!

Я написал плагин на аукцион, но только недавно понял одну вещь.
Проблема в том, что при каждом взаимодействии я открываю игроку новое меню, а не обновляю старое. Например, меняя тип сортировки, или же обновляя страницу аукциона.
Хочу поинтересоваться, если оставить как есть, сильно ударит по оптимизации? Или всё же переписать?
Аукцион это высоконагруженная система, если хочешь просто набить руку, то используй любой вариант, иначе же, нужно экономить каждую копеечку.
 
Создавать каждый раз новое меню - абсолютно нормальный подход, если тебя устраивает факт сброса позиции курсора
Позиция курсора сбрасывается при предварительном закрытии инвентаря перед открытием нового, ну или иногда при смене типа инвентаря. Тут вопрос стоит в том, что открытие нового инвентаря подразумевает обработку данных в целом обьеме для установки конкретной информации конкретному элементу + сразу вырастает нагрузка на сеть. Такой подход для аукциона можно считать крайне не эффективным.

итого:
В каком месте нужно использовать создание нового инвентаря? При смене шаблона, например при переходе из страницы лотов на страницу "мои лоты"
в каком месте это крайне херовая затея? при скролле страниц лотов, при смене категорий
 
Позиция курсора сбрасывается при предварительном закрытии инвентаря перед открытием нового, ну или иногда при смене типа инвентаря. Тут вопрос стоит в том, что открытие нового инвентаря подразумевает обработку данных в целом обьеме для установки конкретной информации конкретному элементу + сразу вырастает нагрузка на сеть. Такой подход для аукциона можно считать крайне не эффективным.

итого:
В каком месте нужно использовать создание нового инвентаря? При смене шаблона, например при переходе из страницы лотов на страницу "мои лоты"
в каком месте это крайне херовая затея? при скролле страниц лотов, при смене категорий
Я несколько лет как создавал меню с помощью InvUI, в том числе и очень высоконагруженные, на серверах с онлайном несколько сотен игроков и выше. Туда входили и аукционы.

InvUI по своей натуре создаёт новый инвентарь баккит каждый раз, когда игрок открывает гуи (там есть разделение между гуи и окном, окно это и есть инвентарь):



И ни разу я даже не увидел строчек о создании инвентаря в репортах профайлера типа спарк. Нагрузку может создавать процесс заполнения самого меню (например, если в нём много кнопок, каждая кнопка рендерится заново, и у каждой сложные вычисления), но сам по себе Bukkit.createInventory абсолютно безвреден

Так что точно можно не париться по поводу создания нового инвентаря при взаимодействии (у меня они создаются при переходе в другое меню или обновлении страницы по какой-то причине, но не при переключении страниц - там остаётся исходный Window)

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

Скажем, если у тебя в меню по бокам есть стеклянные панели, они находятся в конфиге, и ты для каждого слота достаёшь секцию из конфига, создаёшь ItemStack, добавляешь цвета лору - вот это проблема. Тут лучше 1 раз создать ItemStack при запуске и просто ставить его везде

в каком месте это крайне херовая затея? (...) при смене категорий

Смена категорий это дорогая операция, если аукцион хоть сколько-нибудь большой. Предметы надо отфильтровать, например, из БД, и только потом показать. При такой схеме переусложнять свой код ради экономии пары наносекунд нет смысла, всё равно процесс небыстрый

Вот при переключении страниц есть смысл экономить - переключение дёргают быстро, да и предметы уже наверняка загружены в память, можно быстренько сменить страничку

--------

Но вообще, нет смысла особо копаться в таких низкоуровневых вопросах - это ничего не даст. Логичнее просто использовать нормальную библиотеку для гуи, где ты описываешь меню, а не копаешься с ванильными инвентарями. Я советую , остальные библиотеки либо требуют очень много бойлерплейта, либо недостаточно функциональны
 
Назад
Сверху Снизу