Newer
Older
ChallengesJoinEntities / src / main / java / de / fanta / challengesjoinentities / utils / DurationCommandUtil.java
@fanta fanta on 13 May 2024 1 KB ListStatsCommand
package de.fanta.challengesjoinentities.utils;

import de.fanta.challengesjoinentities.ChatUtil;
import de.iani.cubesideutils.StringUtil;
import de.iani.cubesideutils.commands.ArgsParser;
import org.bukkit.command.CommandSender;

import java.util.Collections;
import java.util.Set;
import java.util.TreeSet;

public class DurationCommandUtil {

    private DurationCommandUtil() {
        // prevent instances
    }

    public static final Set<String> PERM_STRINGS;

    static {
        Set<String> permStrings = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
        permStrings.add("-1");
        permStrings.add("perm");
        permStrings.add("permanent");
        permStrings.add("inf");
        permStrings.add("infinite");
        permStrings.add("infinity");
        permStrings.add("forever");
        PERM_STRINGS = Collections.unmodifiableSet(permStrings);
    }

    public static long parseDuration(CommandSender sender, ArgsParser args, boolean allowPermanent) {
        if (!args.hasNext()) {
            ChatUtil.sendWarningMessage(sender, "Bitte gib die Dauer im Format \"7d12h15m30s\" (eine Einheit genügt)", allowPermanent ? " oder als \"perm\"" : "", " an.");
            return 0;
        }

        String durationString = args.getNext();
        if (PERM_STRINGS.contains(durationString)) {
            return -1;
        }

        long duration;
        try {
            duration = StringUtil.parseTimespan(durationString);
            if (duration <= 0) {
                throw new NumberFormatException();
            }
        } catch (IllegalArgumentException e) {
            ChatUtil.sendWarningMessage(sender, "Bitte gib die Dauer im Format \"7d12h15m30s\" (eine Einheit genügt)", allowPermanent ? " oder als \"perm\"" : "", " an.");
            return 0;
        }

        return duration;
    }

}