Adds some new API calls: Time functions
This commit is contained in:
parent
261cc7673f
commit
2603e7510b
6 changed files with 282 additions and 23 deletions
|
@ -1,20 +0,0 @@
|
||||||
package dev.zontreck.ariaslib.terminal;
|
|
||||||
|
|
||||||
import java.io.Console;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public class ConsolePrompt extends Task {
|
|
||||||
public static final Console console = System.console();
|
|
||||||
|
|
||||||
public ConsolePrompt() {
|
|
||||||
super("ConsolePrompt", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
// Print a prompt
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,6 +1,5 @@
|
||||||
package dev.zontreck.ariaslib.terminal;
|
package dev.zontreck.ariaslib.terminal;
|
||||||
|
|
||||||
import dev.zontreck.ariaslib.util.DelayedExecutorService;
|
|
||||||
import dev.zontreck.ariaslib.util.EnvironmentUtils;
|
import dev.zontreck.ariaslib.util.EnvironmentUtils;
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
@ -20,7 +19,7 @@ public class Terminal {
|
||||||
if ( EnvironmentUtils.isRunningInsideDocker ( ) )
|
if ( EnvironmentUtils.isRunningInsideDocker ( ) )
|
||||||
return 0;
|
return 0;
|
||||||
running.set ( true );
|
running.set ( true );
|
||||||
DelayedExecutorService.getInstance ( ).schedule ( new ConsolePrompt ( ) , 1 );
|
//DelayedExecutorService.getInstance ( ).schedule ( new ConsolePrompt ( ) , 1 );
|
||||||
|
|
||||||
|
|
||||||
return ID.getAndIncrement ( );
|
return ID.getAndIncrement ( );
|
||||||
|
|
|
@ -6,6 +6,12 @@ import java.util.List;
|
||||||
|
|
||||||
public class Lists
|
public class Lists
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Programatically constructs a list
|
||||||
|
* @param values The list of values
|
||||||
|
* @return The new list
|
||||||
|
* @param <T> An arbitrary type parameter
|
||||||
|
*/
|
||||||
public static <T> List<T> of(T... values)
|
public static <T> List<T> of(T... values)
|
||||||
{
|
{
|
||||||
List<T> arr = new ArrayList<>();
|
List<T> arr = new ArrayList<>();
|
||||||
|
@ -17,6 +23,71 @@ public class Lists
|
||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Splits a string into a list
|
||||||
|
* @param input The string to split
|
||||||
|
* @param delimiters The list of delimiters
|
||||||
|
* @return A non-strided list
|
||||||
|
*/
|
||||||
|
public static List<String> split(String input, String... delimiters) {
|
||||||
|
List<String> result = new ArrayList<>();
|
||||||
|
StringBuilder regex = new StringBuilder("(");
|
||||||
|
|
||||||
|
// Constructing the regular expression pattern with provided delimiters
|
||||||
|
for (String delimiter : delimiters) {
|
||||||
|
regex.append(delimiter).append("|");
|
||||||
|
}
|
||||||
|
regex.deleteCharAt(regex.length() - 1); // Remove the extra '|' character
|
||||||
|
regex.append(")");
|
||||||
|
|
||||||
|
String[] tokens = input.split(regex.toString());
|
||||||
|
|
||||||
|
// Add non-empty tokens to the result list
|
||||||
|
for (String token : tokens) {
|
||||||
|
if (!token.isEmpty()) {
|
||||||
|
result.add(token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Split a string, and keep the delimiters
|
||||||
|
* @param input The string to be parsed and split
|
||||||
|
* @param delimiters A list of delimiters
|
||||||
|
* @return A strided list containing the parsed options, and the delimiters
|
||||||
|
*/
|
||||||
|
public static List<String> splitWithDelim(String input, String... delimiters) {
|
||||||
|
List<String> result = new ArrayList<>();
|
||||||
|
StringBuilder regex = new StringBuilder("(");
|
||||||
|
|
||||||
|
// Constructing the regular expression pattern with provided delimiters
|
||||||
|
for (String delimiter : delimiters) {
|
||||||
|
regex.append(delimiter).append("|");
|
||||||
|
}
|
||||||
|
regex.deleteCharAt(regex.length() - 1); // Remove the extra '|' character
|
||||||
|
regex.append(")");
|
||||||
|
|
||||||
|
// Splitting the input string using the regex pattern
|
||||||
|
String[] tokens = input.split(regex.toString());
|
||||||
|
|
||||||
|
// Adding tokens and delimiters to the result list in a strided manner
|
||||||
|
for (int i = 0; i < tokens.length; i++) {
|
||||||
|
if (!tokens[i].isEmpty()) {
|
||||||
|
result.add(tokens[i]);
|
||||||
|
}
|
||||||
|
// Adding delimiter if it exists and it's not the last token
|
||||||
|
if (i < tokens.length - 1) {
|
||||||
|
result.add(input.substring(input.indexOf(tokens[i]) + tokens[i].length(), input.indexOf(tokens[i + 1])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private Lists(){
|
private Lists(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@ package dev.zontreck.ariaslib.util;
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public class Progress
|
public class Progress
|
||||||
{
|
{
|
||||||
private int maximum;
|
private int maximum;
|
||||||
|
|
134
src/main/java/dev/zontreck/ariaslib/util/TimeNotation.java
Normal file
134
src/main/java/dev/zontreck/ariaslib/util/TimeNotation.java
Normal file
|
@ -0,0 +1,134 @@
|
||||||
|
package dev.zontreck.ariaslib.util;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains useful structures and functions for dealing with, and manipulation of, time.
|
||||||
|
*/
|
||||||
|
public class TimeNotation
|
||||||
|
{
|
||||||
|
public int Years;
|
||||||
|
public int Months;
|
||||||
|
public int Weeks;
|
||||||
|
public int Days;
|
||||||
|
public int Hours;
|
||||||
|
public int Minutes;
|
||||||
|
public int Seconds;
|
||||||
|
|
||||||
|
public TimeNotation(int years, int months, int weeks, int days, int hours, int minutes, int seconds)
|
||||||
|
{
|
||||||
|
Years=years;
|
||||||
|
Months=months;
|
||||||
|
Weeks=weeks;
|
||||||
|
Days=days;
|
||||||
|
Hours=hours;
|
||||||
|
Minutes=minutes;
|
||||||
|
Seconds = seconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TimeNotation(){}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return
|
||||||
|
Pluralize(Years, "year") + ", " +
|
||||||
|
Pluralize(Months, "month") + ", " +
|
||||||
|
Pluralize(Weeks, "week") + ", " +
|
||||||
|
Pluralize(Days, "day") + ", " +
|
||||||
|
Pluralize(Hours, "hour") + ", " +
|
||||||
|
Pluralize(Minutes, "minute") + ", " +
|
||||||
|
Pluralize(Seconds, "second");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a plural version for a number
|
||||||
|
* @param num The number to prefix
|
||||||
|
* @param str The singular form of the string
|
||||||
|
* @return Combined string, num + str in plural form if necessary
|
||||||
|
*/
|
||||||
|
private String Pluralize(int num, String str)
|
||||||
|
{
|
||||||
|
return num + " " + (num > 1 ? str+"s" : str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encodes time notation!
|
||||||
|
* @return A program readable string that can be decoded back to a time notation
|
||||||
|
*/
|
||||||
|
public String toNotation()
|
||||||
|
{
|
||||||
|
return Years + "Y" + Months + "M" + Weeks + "W" + Days + "d" + Hours + "h" + Minutes + "m" + Seconds + "s";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses a time notation string
|
||||||
|
* @param notation Serialized time notation
|
||||||
|
* @return The deserialized time notation object
|
||||||
|
*/
|
||||||
|
public static TimeNotation fromNotation(String notation)
|
||||||
|
{
|
||||||
|
TimeNotation notationX = new TimeNotation();
|
||||||
|
String[] delims = new String[]{"Y", "M", "W", "d", "h", "m", "s"};
|
||||||
|
List<String> opts = Lists.split(notation, delims);
|
||||||
|
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
for(String dlim : delims)
|
||||||
|
{
|
||||||
|
if(notation.contains(dlim))
|
||||||
|
{
|
||||||
|
switch (dlim)
|
||||||
|
{
|
||||||
|
case "Y":
|
||||||
|
{
|
||||||
|
notationX.Years = Integer.parseInt(opts.get(index));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "M":
|
||||||
|
{
|
||||||
|
notationX.Months = Integer.parseInt(opts.get(index));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "W":
|
||||||
|
{
|
||||||
|
notationX.Weeks = Integer.parseInt(opts.get(index));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "d":
|
||||||
|
{
|
||||||
|
notationX.Days = Integer.parseInt(opts.get(index));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "h":
|
||||||
|
{
|
||||||
|
notationX.Hours = Integer.parseInt(opts.get(index));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "m":
|
||||||
|
{
|
||||||
|
notationX.Minutes = Integer.parseInt(opts.get(index));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "s":
|
||||||
|
{
|
||||||
|
notationX.Seconds = Integer.parseInt(opts.get(index));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return notationX;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
76
src/main/java/dev/zontreck/ariaslib/util/TimeUtil.java
Normal file
76
src/main/java/dev/zontreck/ariaslib/util/TimeUtil.java
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
package dev.zontreck.ariaslib.util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is a helper with some minecraft specific functions
|
||||||
|
*/
|
||||||
|
public class TimeUtil
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Converts seconds to ticks. (seconds*ticks)
|
||||||
|
* @param seconds Number of seconds
|
||||||
|
* @param ticks Number of ticks in a single second
|
||||||
|
* @return Number of ticks
|
||||||
|
*/
|
||||||
|
public static int secondsToTicks(int seconds, int ticks)
|
||||||
|
{
|
||||||
|
return seconds*ticks;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts the number of ticks to seconds
|
||||||
|
* @param ticks The number of ticks to convert
|
||||||
|
* @param ticksInASecond The number of ticks in a single second
|
||||||
|
* @return Number of seconds
|
||||||
|
*/
|
||||||
|
public static int ticksToSeconds(int ticks, int ticksInASecond)
|
||||||
|
{
|
||||||
|
return ticks / ticksInASecond;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encodes a LibAC Time Notation
|
||||||
|
* @param seconds Number of seconds to convert
|
||||||
|
* @return Time Notation
|
||||||
|
*/
|
||||||
|
public static TimeNotation secondsToTimeNotation(int seconds)
|
||||||
|
{
|
||||||
|
int years = seconds / YEAR;
|
||||||
|
if(years > 0) seconds -= YEAR * years;
|
||||||
|
|
||||||
|
int month = seconds / MONTH;
|
||||||
|
if(month > 0) seconds -= MONTH * month;
|
||||||
|
|
||||||
|
int week = seconds / WEEK;
|
||||||
|
if(week > 0) seconds -= WEEK * week;
|
||||||
|
|
||||||
|
int day = seconds / DAY;
|
||||||
|
if(day > 0) seconds -= DAY * day;
|
||||||
|
|
||||||
|
int hour = seconds / HOUR;
|
||||||
|
if(hour > 0) seconds -= HOUR * hour;
|
||||||
|
|
||||||
|
int minute = seconds / MINUTE;
|
||||||
|
if(minute > 0) seconds -= MINUTE * minute;
|
||||||
|
|
||||||
|
return new TimeNotation(years, month, week, day, hour, minute, seconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static final int SECOND;
|
||||||
|
public static final int MINUTE;
|
||||||
|
public static final int HOUR;
|
||||||
|
public static final int DAY;
|
||||||
|
public static final int WEEK;
|
||||||
|
public static final int MONTH;
|
||||||
|
public static final int YEAR;
|
||||||
|
|
||||||
|
static {
|
||||||
|
SECOND = 1;
|
||||||
|
MINUTE = SECOND * 60;
|
||||||
|
HOUR = MINUTE * 60;
|
||||||
|
DAY = HOUR*24;
|
||||||
|
WEEK = DAY*7;
|
||||||
|
MONTH = WEEK*4;
|
||||||
|
YEAR = DAY*365;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue