Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Большая задержка при изменении предметов в меню

normalped

Участник
Пользователь
Баллы
36
Приветствую! Я слушаю пакет из ProtocolLib под названием Window Items, чтобы отследить момент когда игрок открывает меню. Я прохожусь по каждому предмету, устанавливаю форматирование из MiniMessage с небольшими добавлениями для его имени и описания. Метод который устанавливает форматирование занимает +-0.1 секунду (зависит от размера текста), по этому весь этот процесс с заменной предметов в пакете занимает от 3 до 5 секунд, что очень фигово как по мне. Возможно ли ускорить все это дело? Буду благодарен за ваши предложения.
 
Приветствую! Я слушаю пакет из ProtocolLib под названием Window Items, чтобы отследить момент когда игрок открывает меню. Я прохожусь по каждому предмету, устанавливаю форматирование из MiniMessage с небольшими добавлениями для его имени и описания. Метод который устанавливает форматирование занимает +-0.1 секунду (зависит от размера текста), по этому весь этот процесс с заменной предметов в пакете занимает от 3 до 5 секунд, что очень фигово как по мне. Возможно ли ускорить все это дело? Буду благодарен за ваши предложения.
так ты хоть код покажи
 
так ты хоть код покажи
Вот основная часть. Но чем это поможет, если проблема в другом?
Код:
var mm = MiniMessage.builder()
        .tags(TagResolver.builder()
                .resolver(StandardTags.defaults())
                .build()
        ).build();
Component component = mm.deserialize(text);
String json = GsonComponentSerializer.gson().serialize(component);
 
Приветствую! Я слушаю пакет из ProtocolLib под названием Window Items, чтобы отследить момент когда игрок открывает меню
Я так понимаю, меню из какого-то постороннего плагина? Тогда почему не InventoryOpenEvent?
Работа через апи практически всегда производительней работы через ProtocolLib.

Я прохожусь по каждому предмету, устанавливаю форматирование из MiniMessage с небольшими добавлениями для его имени и описания.
Исходя из каких параметров предмета устанавливается кастомное название и описание? Возможно есть вариант кэшировать компоненты/json, чтобы не (де)сериализовать их каждый раз?

Код:
var mm = MiniMessage.builder()
        .tags(TagResolver.builder()
                .resolver(StandardTags.defaults())
                .build()
        ).build();
Component component = mm.deserialize(text);
String json = GsonComponentSerializer.gson().serialize(component);
Для чего ты каждый раз создаёшь новый инстанс MiniMessage? Его можно закэшировать, а в твоём, случае, скорее всего, стоит и вовсе использовать уже готовый MiniMessage.miniMessage(), поскольку кастомных тегов у тебя нет.

Также покажи:
1) Как ты из предмета в пакете получаешь text
2) Как модифицируешь получившийся json
3) Как затем устанавливаешь json обратно предмету в пакете
 
Последнее редактирование:
Уже решил таким способом:
Код:
List<ItemStack> newItems = items.parallelStream()
        .map(item -> packet.setItemData(e.getPlayer(), item))
        .collect(Collectors.toList());
Но не знаю, может это будет нагружать сервер.
 
Я так понимаю, меню из какого-то постороннего плагина? Тогда почему не InventoryOpenEvent?
Работа через апи практически всегда производительней работы через ProtocolLib.


Исходя из каких параметров предмета устанавливается кастомное название и описание? Возможно есть вариант кэшировать компоненты/json, чтобы не (де)сериализовать их каждый раз?


Для чего ты каждый раз создаёшь новый инстанс MiniMessage? Его можно закэшировать, а в твоём, случае, скорее всего, стоит и вовсе использовать уже готовый MiniMessage.miniMessage(), поскольку кастомных тегов у тебя нет.

Также покажи:
1) Как ты из предмета в пакете получаешь text
2) Как модифицируешь получившийся json
3) Как затем устанавливаешь json обратно предмету в пакете
Я хочу чтобы форматирование было в каждом инвентаре/меню сервера и не слетало после взаимодействия с предметов в нем. Пробовал через апи это сделать, но там были какие то проблемы, по этому решил все делать через protocollib. И у меня так же есть свои теги, я походу немного не тот код отправил.
 

Поделиться этой страницей

Назад
Верх