PlayerThemes » Позволь игрокам настроить дизайн под себя [SQLite / MySQL / Redis]

PlayerThemes » Позволь игрокам настроить дизайн под себя [SQLite / MySQL / Redis] 2.0

Создайте и подтвердите аккаунт для скачивания

SuperCHIROK1

Разработчик+
Сообщения
290
Решения
15
Веб-сайт
github.com
SuperCHIROK1 добавил(а) новый ресурс:

You must be logged in to see this link. - Плагин позволит каждому игроку выбрать свою тему из конфигурации. Работает с PlaceholderAPI

🎨 PlayerThemes - Позволь игрокам выбрать свою тему. Работает с PlaceholderAPI. Плагин позволяет игрокам выбрать тему, которые есть в конфигурации. Идеально подходит для чата, таб-листа, холограмм и других плагинов, поддерживающих плейсхолдеры.

Требования:
Для работы плагина нужен PlaceholderAPI 2.11.6+ [COLOR=rgb(255, 255...[/quote]

You must be logged in to see this link.
 
SuperCHIROK1 обновил(а) ресурс You must be logged in to see this link. новой записью:

You must be logged in to see this link.

Обновленный список плейсхолдеров:
  • %pth_id% - Идентификатор темы.
  • %pth_name% - Название темы.
  • %pth_theme% или %pth_value% - Цвета темы.
  • %pth_desc% - Описание темы
  • %pth_параметр_id-темы% - Параметр определенной темы (вместо слова "параметр" вставить value, name и пр.)

You must be logged in to see this link.
 
Твоей "Кастомизации" нужна "Оптимизация" Г-Гавнокодище, переписывать нужно почти половину

Сегодня у меня хорошее настроение так что 1 херню даже перепишу по нормальному


Java:
    public String onRequest(OfflinePlayer player, @NotNull String params) {
        var service = pl.service; //копирую в стек заранее - меньше размер байткода
                                  //не понятно только зачем "pl" нужен - сразу указатель на сервис свой хранил бы
        
        //проверка с игнорированием регистра идет в помойку
        switch (params) {
            case "id":
                return service.getPlayerThemeId(player);
            case "name"
                return service.getPlayerThemeName(player);
            case "value", "theme":  //надеюсь не забыл синтаксис - писал в блокноте
                return service.getPlayerThemeValue(player);
            case "desc"
                return service.getPlayerThemeDescription(player);
        }
    
        if (params.indexOf('_', 4) < 6) {
            //Проверять символы с 1 по 4 не нужно, учитывая логику кода внутри
            //Если "_" на 4 или 5 позиции - значит то что нам нужно, иначе - условия ниже все равно не выполнятся
            //Если совпадений не будет (-1) то тем более
            
            if (params.startsWith("theme_") || params.startsWith("value_"))
                //можно обьединить в 1 условие только потому что одинаковая длина,
                //иначе лучше было бы расписать
                service.getThemeValue(params.substring(5));

            if (params.startsWith("desc_"))
                return service.getThemeDescription(params.substring(4));
            
            if (params.startsWith("name_"))
                return service.getThemeName(params.substring(4));
        }

        return null;
    }

Можно конечно упороться в край и сделать еще в 2-3+ раз быстрее, но это уже лишнее

(Капризно к версии явы)
(Причина почему капризно и как задетектить)

(А вот и главный гвоздь быстрой упоротости в невероятно быстром парсере json)
 
Последнее редактирование:
Твоей "Кастомизации" нужна "Оптимизация" Г-Гавнокодище, переписывать нужно почти половину

Сегодня у меня хорошее настроение так что 1 херню даже перепишу по нормальному


Java:
    public String onRequest(OfflinePlayer player, @NotNull String params) {
        var service = pl.service; //копирую в стек заранее - меньше размер байткода
                                  //не понятно только зачем "pl" нужен - сразу указатель на сервис свой хранил бы
      
        //проверка с игнорированием регистра идет в помойку
        switch (params) {
            case "id":
                return service.getPlayerThemeId(player);
            case "name"
                return service.getPlayerThemeName(player);
            case "value", "theme":  //надеюсь не забыл синтаксис - писал в блокноте
                return service.getPlayerThemeValue(player);
            case "desc"
                return service.getPlayerThemeDescription(player);
        }
  
        if (params.indexOf('_', 4) < 6) {
            //Проверять символы с 1 по 4 не нужно, учитывая логику кода внутри
            //Если "_" на 4 или 5 позиции - значит то что нам нужно, иначе - условия ниже все равно не выполнятся
            //Если совпадений не будет (-1) то тем более
          
            if (params.startsWith("theme_") || params.startsWith("value_"))
                //можно обьединить в 1 условие только потому что одинаковая длина,
                //иначе лучше было бы расписать
                service.getThemeValue(params.substring(5));

            if (params.startsWith("desc_"))
                return service.getThemeDescription(params.substring(4));
          
            if (params.startsWith("name_"))
                return service.getThemeName(params.substring(4));
        }

        return null;
    }

Можно конечно упороться в край и сделать еще в 2-3+ раз быстрее, но это уже лишнее

(Капризно к версии явы)
(Причина почему капризно и как задетектить)

(А вот и главный гвоздь быстрой упоротости в невероятно быстром парсере json)
Хмм.. спасибо за выделенное время. Я ранее задумывался о switch-case, но из-за регистра остановился. Только сейчас понял что игнорирование регистра к ничему. Насчёт indexOf не знал, также спасибо. Пойду еще раз пересмотрю методы класса String.
 
SuperCHIROK1 обновил(а) ресурс You must be logged in to see this link. новой записью:

You must be logged in to see this link.

Небольшое изменение работы плейсхолдеров, и добавление нового параметра values.

Как работает values?
Values -
это дополнительные значения, которые можно вывести с помощью %pth_values_ключ-значения%
YAML:
themes:
  red:
    name: 'Красный'
    value: '&c' # Главное значение (%pth_value%)
    values:
      # %pth_values_tab%
      tab: '&#ff0d00' # [ключ]: 'значение'
      # И можно добавлять свои..

Обновленный список...

You must be logged in to see this link.
 
offtop
Ьеь вижу обнову, но с индексами накосячил
Ну ладно, с кем не бывает


Пойду еще раз пересмотрю методы класса String.
Вообще рекомендую почитать официальные доки ораклов, начиная с коллекций
Покопаться в IDEA в коде самой явы
Почитать теорию как JVM работает на самом деле
Изучить как работаеть "Safe" c "Unsafe" чтобы писать еще более быстрый код
Поиграться с компилятором и байткодом на досуге ...

А еще лучше отправить в помойку яву и перейти на Гошку
Комбо компилятора с мощным рефлектором тащит
+ Можно творить с памятью вообще что угодно
 
SuperCHIROK1 обновил(а) ресурс You must be logged in to see this link. новой записью:

You must be logged in to see this link.

Желательно обновиться.
Инструкция по миграции есть на странице плагина.
Обновите конфигурации.

Список добавлений и изменений:
  • Поддержка баз данных: SQLite и MySQL с гибкой настройкой пула соединений (YAML был удален, доступна миграция)
  • Общая оптимизация работы плагина
  • Динамическая проверка прав на темы (для временных привилегий и донат-групп)
  • Упрощен синтаксис плейсхолдеров (%pth_values_bossbar% -> %pth_bossbar%)
  • Исправлена перезагрузка плейсхолдеров через /papi...

You must be logged in to see this link.
 
Назад
Сверху Снизу