Вопрос Как реализовать время luckperms

BaySirak

Заблокирован
Сообщения
110
Плагин
Luckperms
Ядро сервера
  1. Purpur
Версия сервера
  1. 1.20
Как реализовать такое, стандартные плейсхолдеры не помогают( выводят полностью время, включая секунды), а надо как на скриншоте
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Решение
Готово.

Код:
    @Override
    public String onRequest(OfflinePlayer player, @NotNull String spigotmcru) {
        User user = LuckPermsProvider.get().getUserManager().getUser(Objects.requireNonNull(player.getName()));
        for (Node node : user.getNodes()) {
            if (node.getKey().startsWith("group.") && Objects.nonNull(node.getExpiryDuration())) {
                return node.getExpiryDuration().toDays() + "д.";
            }
            else if (node.getKey().startsWith("group.") && !Objects.nonNull(node.getExpiryDuration())) {
                return "∞";
            }
        }
        return null;
    }
Спасибо, попробую разобраться
Добрый день.
Плейсхолдеры как раз таки помогают :)
Вам может помочь данный expansion:
Объединено

Добрый день.
Плейсхолдеры как раз таки помогают :)
Вам может помочь данный expansion:
почитал об этом плагине, но так и не понял, как я с помощью него смогу изменить вывод
времени доната
Объединено

Вам необходимо зарегистрироваться для просмотра изображений-вложений
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Последнее редактирование:
Спасибо, попробую разобраться

Объединено


почитал об этом плагине, но так и не понял, как я с помощью него смогу изменить вывод
времени доната
Объединено

Вам необходимо зарегистрироваться для просмотра изображений-вложений
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Вам необходимо зарегистрироваться для просмотра изображений-вложений

Доброе утро.
Прошу прощения за бесполезный совет :(.
Если этот плагин не помогает, хотя, видимо он и не поможет, т.к. принимает только числа, то выходом является лишь написание expansion'a.
Я могу Вам с этим помочь. В ближайшее время пришлю сюда готовое решение, как только напишу его.
Объединено

Написал expansion.
Загрузите его по пути /plugins/PlaceholderAPI/expansions
После чего пропишите команду /papi register Expansion-expirytime.jar или перезагрузите сервер.
Используйте как %expirytime_<группа>%
Плейсхолдер возвращает количество дней до истечения привилегии.
Рад был помочь! :)

Java:
@Override
    public String onRequest(OfflinePlayer player, @NotNull String group) {
        Set<Group> groups = LuckPermsProvider.get().getGroupManager().getLoadedGroups();
        for (Group grp : groups) {
            if (grp.getName().equals(group)) {
                User user = LuckPermsProvider.get().getUserManager().getUser(Objects.requireNonNull(player.getName()));
                assert user != null;
                for (Node node : user.getNodes()) {
                    if (node.getKey().equals("group." + group) && Objects.nonNull(node.getExpiryDuration())) {
                        return Long.toString(node.getExpiryDuration().toDays());
                    }
                }
                return "Группа не найдена!";
            }
        }
        return null;
 

Вложения

  • Expansion-expirytime.jar
    4.1 KB · Просмотры: 135
Последнее редактирование:
Сегодня, попробую, обязательно отвечу?
Объединено

Попробовал, всё работает, но мне же нужно это для всех привилегий вывести) А если вставлять плейсхолдер для всех привилегий, то в табе соответственно будет написано, группа не найдена

Доброе утро.
Прошу прощения за бесполезный совет :(.
Если этот плагин не помогает, хотя, видимо он и не поможет, т.к. принимает только числа, то выходом является лишь написание expansion'a.
Я могу Вам с этим помочь. В ближайшее время пришлю сюда готовое решение, как только напишу его.
Объединено

Написал expansion.
Загрузите его по пути /plugins/PlaceholderAPI/expansions
После чего пропишите команду /papi register Expansion-expirytime.jar или перезагрузите сервер.
Используйте как %expirytime_<группа>%
Плейсхолдер возвращает количество дней до истечения привилегии.
Рад был помочь! :)

Java:
@Override
    public String onRequest(OfflinePlayer player, @NotNull String group) {
        Set<Group> groups = LuckPermsProvider.get().getGroupManager().getLoadedGroups();
        for (Group grp : groups) {
            if (grp.getName().equals(group)) {
                User user = LuckPermsProvider.get().getUserManager().getUser(Objects.requireNonNull(player.getName()));
                assert user != null;
                for (Node node : user.getNodes()) {
                    if (node.getKey().equals("group." + group) && Objects.nonNull(node.getExpiryDuration())) {
                        return Long.toString(node.getExpiryDuration().toDays());
                    }
                }
                return "Группа не найдена!";
            }
        }
        return null;
 
Последнее редактирование:
Сегодня, попробую, обязательно отвечу?
Объединено

Попробовал, всё работает, но мне же нужно это для всех привилегий вывести) А если вставлять плейсхолдер для всех привилегий, то в табе соответственно будет написано, группа не найдена

Какой плагин используете для скорборда?
 

Используйте для каждой группы отдельный scoreboard. Как например
YAML:
scoreboards:
    lord:
      display-condition: "permission:tab.scoreboard.lord"
      title: "{#D86EEE}&lСервер &f— &7&lМеню игрока"
      lines:
        - ""
        - "{#D86EEE}₪ &7&l%player%"
        - "{#D86EEE}₪ &7&lБаланс: {#D86EEE}%cmi_user_balance% &bалм."
        - ""
        - "{#D86EEE}₪ &7&lРанг: %luckperms_prefix%"
        - "{#D86EEE}₪ &7&lИстекает через: {#D86EEE}%expirytime_lord%"
        - ""
        - "{#D86EEE}₪ &7&lВремя: {#D86EEE}%server_time_dd.MM | HH:mm% {#D86EEE}%animation:krutilka%"
        - ""
        - "{#D86EEE}₪ &7&lСкрыть это окно: {#D86EEE}&l/sb"
    player:
      display-condition: "permission:tab.scoreboard.player"
      title: "{#D86EEE}&lСервер &f— &7&lМеню игрока"
      lines:
        - ""
        - "{#D86EEE}₪ &7&l%player%"
        - "{#D86EEE}₪ &7&lБаланс: %баланс% &bалм."
        - ""
        - "{#D86EEE}₪ &7&lВремя: {#D86EEE}%server_time_dd.MM | HH:mm% {#D86EEE}%animation:krutilka%"
        - ""
        - "&7&lСкрыть это окно: {#D86EEE}&l/sb"

Либо могу сделать плейсхолдер универсальным, чтобы само получало наследумую временную группу.
 
Используйте для каждой группы отдельный scoreboard. Как например
YAML:
scoreboards:
    lord:
      display-condition: "permission:tab.scoreboard.lord"
      title: "{#D86EEE}&lСервер &f— &7&lМеню игрока"
      lines:
        - ""
        - "{#D86EEE}₪ &7&l%player%"
        - "{#D86EEE}₪ &7&lБаланс: {#D86EEE}%cmi_user_balance% &bалм."
        - ""
        - "{#D86EEE}₪ &7&lРанг: %luckperms_prefix%"
        - "{#D86EEE}₪ &7&lИстекает через: {#D86EEE}%expirytime_lord%"
        - ""
        - "{#D86EEE}₪ &7&lВремя: {#D86EEE}%server_time_dd.MM | HH:mm% {#D86EEE}%animation:krutilka%"
        - ""
        - "{#D86EEE}₪ &7&lСкрыть это окно: {#D86EEE}&l/sb"
    player:
      display-condition: "permission:tab.scoreboard.player"
      title: "{#D86EEE}&lСервер &f— &7&lМеню игрока"
      lines:
        - ""
        - "{#D86EEE}₪ &7&l%player%"
        - "{#D86EEE}₪ &7&lБаланс: %баланс% &bалм."
        - ""
        - "{#D86EEE}₪ &7&lВремя: {#D86EEE}%server_time_dd.MM | HH:mm% {#D86EEE}%animation:krutilka%"
        - ""
        - "&7&lСкрыть это окно: {#D86EEE}&l/sb"

Либо могу сделать плейсхолдер универсальным, чтобы само получало наследумую временную группу.
Если можете, но при получении доната навсегда, должен показаться знак бесконечности, также заметил что выдавая донат на 3 дня, он выводит на 2 дня(как из лакпермса)
 
Если можете, но при получении доната навсегда, должен показаться знак бесконечности, также заметил что выдавая донат на 3 дня, он выводит на 2 дня(как из лакпермса)

Хорошо, ожидайте.
Да, всё верно, плагин получает только дни, для того чтобы показывало по факту нужно будет добавлять десятичные доли, т.е. будет писаться 2.9 дней и 0.5 дней соответственно.
 
Хорошо, ожидайте.
Да, всё верно, плагин получает только дни, для того чтобы показывало по факту нужно будет добавлять десятичные доли, т.е. будет писаться 2.9 дней и 0.5 дней соответственно.
Такое не надо))
 
Такое не надо))

Тогда придётся встраивать обработчик округлений. Легче принять такое костыльное решение, чтобы показывало только дни.
Объединено

Пробуйте.

Java:
@Override
    public String onRequest(OfflinePlayer player, @NotNull String spigotmcru) {
        User user = LuckPermsProvider.get().getUserManager().getUser(Objects.requireNonNull(player.getName()));
        for (Node node : user.getNodes()) {
            if (node.getKey().startsWith("group.") && Objects.nonNull(node.getExpiryDuration())) {
                return Long.toString(node.getExpiryDuration().toDays());
            }
            else if (node.getKey().startsWith("group.") && !Objects.nonNull(node.getExpiryDuration())) {
                return "∞";
            }
        }
        return null;
    }
 

Вложения

  • Expansion-expirytime.jar
    3.7 KB · Просмотры: 70
Последнее редактирование:
Тогда придётся встраивать обработчик округлений. Легче принять такое костыльное решение, чтобы показывало только дни.
Объединено

Пробуйте.

Java:
@Override
    public String onRequest(OfflinePlayer player, @NotNull String spigotmcru) {
        User user = LuckPermsProvider.get().getUserManager().getUser(Objects.requireNonNull(player.getName()));
        for (Node node : user.getNodes()) {
            if (node.getKey().startsWith("group.") && Objects.nonNull(node.getExpiryDuration())) {
                return Long.toString(node.getExpiryDuration().toDays());
            }
            else if (node.getKey().startsWith("group.") && !Objects.nonNull(node.getExpiryDuration())) {
                return "∞";
            }
        }
        return null;
    }
а плейсхолдер какой:?
Объединено

Плейсхолдер нашел, да работает, спасибо, таб сделаю под привилегии)
 
а плейсхолдер какой:?
Объединено

Плейсхолдер нашел, да работает, спасибо, таб сделаю под привилегии)

С текущим решением можно одной группой сделать отображение срока, просто написав %expirytime%
 
С текущим решением можно одной группой сделать отображение срока, просто написав %expirytime%
спасибо. попробую
Объединено

С текущим решением можно одной группой сделать отображение срока, просто написав %expirytime%
Могли бы вы подправить, что при выводе дня писалось еще и "д."
Объединено

просто если добавить это самому, то вот такой конфуз)
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Понял. Ну бесконечность дней не такая уж и плохая штука, особенно во время отпуска. Сейчас подправлю.
или во время летних каникул у студентов, ибо всего два месяца)
 
Готово.

Код:
    @Override
    public String onRequest(OfflinePlayer player, @NotNull String spigotmcru) {
        User user = LuckPermsProvider.get().getUserManager().getUser(Objects.requireNonNull(player.getName()));
        for (Node node : user.getNodes()) {
            if (node.getKey().startsWith("group.") && Objects.nonNull(node.getExpiryDuration())) {
                return node.getExpiryDuration().toDays() + "д.";
            }
            else if (node.getKey().startsWith("group.") && !Objects.nonNull(node.getExpiryDuration())) {
                return "∞";
            }
        }
        return null;
    }
 

Вложения

  • Expansion-expirytime.jar
    3.7 KB · Просмотры: 205
Назад
Сверху Снизу