1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Обработка данных из аргумента команды

Тема в разделе "Разработка плагинов для новичков", создана пользователем Migel, 18 май 2023.

  1. Автор темы
    Migel

    Migel Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Migel077
    Как можно реализовать не что подобное:
    Допустим у нас есть команда tempban мы указваем ник, а дальше должны указать время 5d 16h 26m как распозновать введëнное время и + ещë в конце чтобы можно было указать время?
    Возможное решение это проверять на наличие в каждом аргументе букв-указателей на тип времени (y, d, mo, m, s) а если нет указателя в аргументе, всë остальное нулями, + дальше аргументы добавлять в "причину" бана
     
  2. Sitmobedaf

    Sitmobedaf Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    SiT
    https://pastebin.com/raw/FJiJ9vmT
    Это отдельный класс

    А там, где надо реализовать то этот код:
    String banTimestamp = "2d";
    String duration = DateUtils.formatDateDiff(banTimestamp);
     
  3. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Делал такой метод - считает миллисекунды из строки. Можно расширить для годов и прочего, выйдет как-то так
    PHP:
    private static final Pattern TIME_PRECISE Pattern.compile("(\\d+)(m[os]?|[ywhdst])?");

    public static final 
    long MS_PER_SECOND 1000L;
    public static final 
    long MS_PER_TICK MS_PER_SECOND 20;
    public static final 
    long MS_PER_MINUTE MS_PER_SECOND 60L;
    public static final 
    long MS_PER_HOUR MS_PER_MINUTE 60L;
    public static final 
    long MS_PER_DAY MS_PER_HOUR 24L;
    public static final 
    long MS_PER_WEEK MS_PER_DAY 7L;
    public static final 
    long MS_PER_MONTH MS_PER_DAY 30L;
    public static final 
    long MS_PER_YEAR MS_PER_DAY 365L;

    public static 
    long parseTimePrecise(String timeStr) {
        
    Matcher matcher TIME_PRECISE.matcher(timeStr);
        
    long time 0;
        while (
    matcher.find()) {
            
    String unit matcher.group(2);
            if (
    unit == nullunit "s";
            
    time += Long.parseLong(matcher.group(1)) * switch (unit) {
                case 
    "y" -> MS_PER_YEAR;
                case 
    "mo" -> MS_PER_MONTH;
                case 
    "w" -> MS_PER_WEEK;
                case 
    "d" -> MS_PER_DAY;
                case 
    "h" -> MS_PER_HOUR;
                case 
    "m" -> MS_PER_MINUTE;
                default -> 
    MS_PER_SECOND;
                case 
    "ms" -> 1L;
                case 
    "t" -> MS_PER_TICK;
            };
        }
        return 
    time;
    }
    Константы MS_PER_X сделаны чисто для удобства.
     

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