diff --git a/build.gradle b/build.gradle index f66d736..e93bbe4 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ java { } group = 'me.playbosswar.com' -version = '8.5.3' +version = '8.5.4' description = 'CommandTimer' repositories { @@ -61,7 +61,7 @@ publishing { maven(MavenPublication) { groupId = 'me.playbosswar.com' artifactId = 'commandtimer' - version = '8.5.3' + version = '8.5.4' from components.java } diff --git a/docs/docs/placeholders.md b/docs/docs/placeholders.md index a12d3e1..d8cf023 100644 --- a/docs/docs/placeholders.md +++ b/docs/docs/placeholders.md @@ -14,7 +14,7 @@ to replace `task` with your actual task name. - `%commandtimer_task_nextExecution%`: Get the next execution time in seconds - `%commandtimer_task_nextExecutionFormat%`: Same as previous placeholder, but formatted in `HH:mm:ss` - `%commandtimer_task_timeFormat%`: Same as previous placeholder, but you can replace `timeFormat` with a format of your - choice. A list of possible combinations is available [here](https://day.js.org/docs/en/display/format). If you want to + choice. You can use `DD`, `HH`, `mm` and `ss` as time selectors in your placeholder. If you want to escape certain characters you can use `'` around the character you want to escape. For a time format `12h34m03s` you will need the placeholder `%commandtimer_task_HH'h'mm'm'ss's'%`. Depending on your configuration file, you will need to change your outer `'` quotes with `"` to keep a valid configuration. diff --git a/java8-build.gradle b/java8-build.gradle index a6e8aed..9454b5a 100644 --- a/java8-build.gradle +++ b/java8-build.gradle @@ -9,7 +9,7 @@ java { } group = 'me.playbosswar.com' -version = '8.5.3' +version = '8.5.4' description = 'CommandTimer' repositories { @@ -69,7 +69,7 @@ publishing { maven(MavenPublication) { groupId = 'me.playbosswar.com' artifactId = 'commandtimer' - version = '8.5.3' + version = '8.5.4' from components.java } diff --git a/src/main/java/me/playbosswar/com/hooks/PAPIPlaceholders.java b/src/main/java/me/playbosswar/com/hooks/PAPIPlaceholders.java index f68edbd..cf6abd8 100644 --- a/src/main/java/me/playbosswar/com/hooks/PAPIPlaceholders.java +++ b/src/main/java/me/playbosswar/com/hooks/PAPIPlaceholders.java @@ -2,8 +2,6 @@ import me.clip.placeholderapi.expansion.PlaceholderExpansion; import me.playbosswar.com.CommandTimerPlugin; -import me.playbosswar.com.tasks.TaskTime; -import me.playbosswar.com.utils.TaskUtils; import me.playbosswar.com.utils.Tools; import me.playbosswar.com.tasks.Task; import me.playbosswar.com.utils.Messages; @@ -14,10 +12,6 @@ import org.joda.time.Duration; import org.joda.time.Interval; -import java.time.DayOfWeek; -import java.time.LocalDate; -import java.time.ZoneOffset; -import java.time.temporal.TemporalAdjusters; import java.util.*; public class PAPIPlaceholders extends PlaceholderExpansion { diff --git a/src/main/java/me/playbosswar/com/utils/Tools.java b/src/main/java/me/playbosswar/com/utils/Tools.java index be4088a..2c73f92 100644 --- a/src/main/java/me/playbosswar/com/utils/Tools.java +++ b/src/main/java/me/playbosswar/com/utils/Tools.java @@ -1,8 +1,11 @@ package me.playbosswar.com.utils; import org.bukkit.World; +import org.joda.time.Duration; +import org.joda.time.Period; +import org.joda.time.format.PeriodFormatter; +import org.joda.time.format.PeriodFormatterBuilder; -import java.text.SimpleDateFormat; import java.time.*; import java.time.format.DateTimeFormatter; import java.util.*; @@ -66,11 +69,31 @@ public static String calculateWorldTime(World w) { return realHours + ":" + mm; } - public static String getTimeString(int seconds, String format) { - LocalDateTime local = LocalDateTime.ofInstant(Instant.ofEpochSecond(seconds), ZoneId.of("GMT")); + private static String getTimeStringLegacy(int seconds, String format) { + LocalDateTime local = LocalDateTime.ofInstant(Instant.ofEpochSecond(seconds), ZoneId.of("GMT")); return local.format(DateTimeFormatter.ofPattern(format)); } + public static String getTimeString(int seconds, String format) { + // If we don't have days, we don't need to handle it ourselves + if(!format.contains("DD")) { + return getTimeStringLegacy(seconds, format); + } + + Duration duration = Duration.standardSeconds(seconds); + + int days = (int) duration.getStandardDays(); + int hours = (int) duration.getStandardHours(); + int minutes = (int) (duration.getStandardMinutes() % 60); + int remainingSeconds = (int) (duration.getStandardSeconds() % 60); + + return format + .replace("DD", String.format("%02d", days)) + .replace("HH", String.format("%02d", hours)) + .replace("mm", String.format("%02d", minutes)) + .replace("ss", String.format("%02d", remainingSeconds)); + } + private static String getTenthNumeric(long val) { if(val < 9) { return "0" + val; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ec0a281..698f2e1 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ main: me.playbosswar.com.CommandTimerPlugin name: "CommandTimer" -version: "8.5.3" +version: "8.5.4" description: "Schedule commands like you want" author: PlayBossWar api-version: 1.13 diff --git a/src/test/java/utils/TaskTimeUtilsTest.java b/src/test/java/utils/TaskTimeUtilsTest.java index d487e79..068aa2c 100644 --- a/src/test/java/utils/TaskTimeUtilsTest.java +++ b/src/test/java/utils/TaskTimeUtilsTest.java @@ -3,6 +3,7 @@ import me.playbosswar.com.tasks.Task; import me.playbosswar.com.tasks.TaskTime; +import java.time.DayOfWeek; import java.time.LocalTime; import me.playbosswar.com.utils.TaskTimeUtils; @@ -19,8 +20,8 @@ public void givenTaskTimes_shouldHandleMultipleWeeks_returnSoonestDate() { final Task task = new Task("test"); List taskTimes = new ArrayList<>(); - List days = new ArrayList<>(); - days.add("MONDAY"); + List days = new ArrayList<>(); + days.add(DayOfWeek.MONDAY); task.setDays(days); taskTimes.add(new TaskTime(task, LocalTime.of(14, 0, 0, 0), false)); diff --git a/src/test/java/utils/ToolsTest.java b/src/test/java/utils/ToolsTest.java new file mode 100644 index 0000000..c39640d --- /dev/null +++ b/src/test/java/utils/ToolsTest.java @@ -0,0 +1,49 @@ +package utils; + +import me.playbosswar.com.utils.Tools; +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +public class ToolsTest { + @Test + public void shouldReturnCorrectPlayer1() { + String result = Tools.getTimeString(59, "HH:mm:ss"); + assertEquals("00:00:59", result); + } + + @Test + public void shouldReturnCorrectPlayer2() { + String result = Tools.getTimeString(60, "HH:mm:ss"); + assertEquals("00:01:00", result); + } + + @Test + public void shouldReturnCorrectPlayer3() { + String result = Tools.getTimeString(80, "mm:ss"); + assertEquals("01:20", result); + } + + @Test + public void shouldReturnCorrectPlayer4() { + String result = Tools.getTimeString(20, "DD:HH:mm:ss"); + assertEquals("00:00:00:20", result); + } + + @Test + public void shouldReturnCorrectPlayer5() { + String result = Tools.getTimeString(9, "HH:mm:ss"); + assertEquals("00:00:09", result); + } + + @Test + public void shouldReturnCorrectPlayer6() { + String result = Tools.getTimeString(69, "HH:mm:ss"); + assertEquals("00:01:09", result); + } + + @Test + public void shouldReturnCorrectPlayer7() { + String result = Tools.getTimeString(3669, "HH:mm:ss"); + assertEquals("01:01:09", result); + } +}