diff --git a/src/main/java/com/graywolf336/jail/Util.java b/src/main/java/com/graywolf336/jail/Util.java index c29ec98..cab4b02 100644 --- a/src/main/java/com/graywolf336/jail/Util.java +++ b/src/main/java/com/graywolf336/jail/Util.java @@ -1,7 +1,11 @@ package com.graywolf336.jail; import java.util.LinkedList; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -9,6 +13,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.util.Vector; public class Util { + private final static Pattern DURATION_PATTERN = Pattern.compile("^(\\d+)\\s*(sec(?:ond?)?s?|(min(?:ute)?s?|h(?:ours?)?|d(?:ays?)?$", Pattern.CASE_INSENSITIVE); /** Checks if the first {@link Vector} is inside the other two. */ public static boolean isInsideAB(Vector point, Vector first, Vector second) { @@ -59,4 +64,31 @@ public class Util { return wand; } + + public static Long getTime(String time) throws Exception { + Long t = 10L; + Matcher match = DURATION_PATTERN.matcher(time); + + if (match.matches()) { + String units = match.group(2); + if ("seconds".equals(units) || "second".equals(units) || "s".equals(units)) + t = TimeUnit.MILLISECONDS.convert(Long.valueOf(match.group(1)), TimeUnit.SECONDS); + if ("minutes".equals(units) || "minute".equals(units) || "mins".equals(units) || "min".equals(units)) + t = TimeUnit.MILLISECONDS.convert(Long.valueOf(match.group(1)), TimeUnit.MINUTES); + else if ("hours".equals(units) || "hour".equals(units) || "h".equals(units)) + t = TimeUnit.MILLISECONDS.convert(Long.valueOf(match.group(1)), TimeUnit.HOURS); + else if ("days".equals(units) || "day".equals(units) || "d".equals(units)) + t = TimeUnit.MILLISECONDS.convert(Long.valueOf(match.group(1)), TimeUnit.DAYS); + + Bukkit.getLogger().info(units); + }else { + throw new Exception("Invalid format."); + } + + return t; + } + + /* + + */ } diff --git a/src/main/java/com/graywolf336/jail/command/commands/JailCommand.java b/src/main/java/com/graywolf336/jail/command/commands/JailCommand.java index 8381028..bd744ec 100644 --- a/src/main/java/com/graywolf336/jail/command/commands/JailCommand.java +++ b/src/main/java/com/graywolf336/jail/command/commands/JailCommand.java @@ -9,12 +9,14 @@ import org.bukkit.entity.Player; import com.beust.jcommander.JCommander; import com.beust.jcommander.ParameterException; import com.graywolf336.jail.JailManager; +import com.graywolf336.jail.Util; import com.graywolf336.jail.beans.Jail; import com.graywolf336.jail.beans.Prisoner; import com.graywolf336.jail.command.Command; import com.graywolf336.jail.command.CommandInfo; import com.graywolf336.jail.command.parameters.JailParameters; import com.graywolf336.jail.enums.LangString; +import com.graywolf336.jail.enums.Settings; import com.graywolf336.jail.events.PrisonerJailedEvent; @CommandInfo( @@ -61,10 +63,14 @@ public class JailCommand implements Command { Long time = 10L; try { - time = Long.parseLong(params.time()); - }catch(NumberFormatException e) { - sender.sendMessage(ChatColor.RED + "Number format is incorrect."); - return true; + time = Util.getTime(params.time()); + }catch(Exception e) { + try { + time = Util.getTime(jm.getPlugin().getConfig().getString(Settings.JAILDEFAULTTIME.getPath())); + }catch(Exception e2) { + sender.sendMessage(ChatColor.RED + "Number format is incorrect."); + return true; + } } Jail j = jm.getJail(params.jail()); diff --git a/src/main/java/com/graywolf336/jail/enums/Settings.java b/src/main/java/com/graywolf336/jail/enums/Settings.java new file mode 100644 index 0000000..2834a12 --- /dev/null +++ b/src/main/java/com/graywolf336/jail/enums/Settings.java @@ -0,0 +1,21 @@ +package com.graywolf336.jail.enums; + +public enum Settings { + DEBUG("system.debug"), + UPDATENOTIFICATIONS("system.updateNotifications"), + JAILDEFAULTTIME("jailing.jail.defaultTime"); + + private String path; + + private Settings(String path) { + this.path = path; + } + + /** + * Gets the path this setting is in config. + * @return The path where this setting resides in the config. + */ + public String getPath() { + return this.path; + } +}