MassiveCraftCore update
This commit is contained in:
		@@ -1,6 +1,7 @@
 | 
				
			|||||||
package com.massivecraft.factions.zcore.util;
 | 
					package com.massivecraft.factions.zcore.util;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.*;
 | 
					import java.util.*;
 | 
				
			||||||
 | 
					import java.util.Map.Entry;
 | 
				
			||||||
import java.util.regex.Matcher;
 | 
					import java.util.regex.Matcher;
 | 
				
			||||||
import java.util.regex.Pattern;
 | 
					import java.util.regex.Pattern;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -123,6 +124,12 @@ public class TextUtil
 | 
				
			|||||||
		return string.substring(0, 1).toUpperCase()+string.substring(1);
 | 
							return string.substring(0, 1).toUpperCase()+string.substring(1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						public static String repeat(String s, int times)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						    if (times <= 0) return "";
 | 
				
			||||||
 | 
						    else return s + repeat(s, times-1);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	public static String implode(List<String> list, String glue)
 | 
						public static String implode(List<String> list, String glue)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	    StringBuilder ret = new StringBuilder();
 | 
						    StringBuilder ret = new StringBuilder();
 | 
				
			||||||
@@ -137,10 +144,22 @@ public class TextUtil
 | 
				
			|||||||
	    return ret.toString();
 | 
						    return ret.toString();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public static String repeat(String s, int times)
 | 
						public static String implodeCommaAnd(List<String> list, String comma, String and)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	    if (times <= 0) return "";
 | 
						    if (list.size() == 0) return "";
 | 
				
			||||||
	    else return s + repeat(s, times-1);
 | 
							if (list.size() == 1) return list.get(0);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							String lastItem = list.get(list.size()-1);
 | 
				
			||||||
 | 
							String nextToLastItem = list.get(list.size()-2);
 | 
				
			||||||
 | 
							String merge = nextToLastItem+and+lastItem;
 | 
				
			||||||
 | 
							list.set(list.size()-2, merge);
 | 
				
			||||||
 | 
							list.remove(list.size()-1);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return implode(list, comma);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						public static String implodeCommaAnd(List<String> list)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						    return implodeCommaAnd(list, ", ", " and ");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
@@ -224,78 +243,59 @@ public class TextUtil
 | 
				
			|||||||
	public static final long millisPerWeek   =    7 * millisPerDay;
 | 
						public static final long millisPerWeek   =    7 * millisPerDay;
 | 
				
			||||||
	public static final long millisPerMonth  =   31 * millisPerDay;
 | 
						public static final long millisPerMonth  =   31 * millisPerDay;
 | 
				
			||||||
	public static final long millisPerYear   =  365 * millisPerDay;
 | 
						public static final long millisPerYear   =  365 * millisPerDay;
 | 
				
			||||||
	public static String getTimeDeltaDescriptionRelNow(long millis)
 | 
						
 | 
				
			||||||
 | 
						public static Map<String, Long> unitMillis;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						static
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		double absmillis = (double) Math.abs(millis);
 | 
							unitMillis = new LinkedHashMap<String, Long>();
 | 
				
			||||||
		String agofromnow = "from now";
 | 
							unitMillis.put("years", millisPerYear);
 | 
				
			||||||
		String unit;
 | 
							unitMillis.put("months", millisPerMonth);
 | 
				
			||||||
		long num;
 | 
							unitMillis.put("weeks", millisPerWeek);
 | 
				
			||||||
		if (millis <= 0)
 | 
							unitMillis.put("days", millisPerDay);
 | 
				
			||||||
		{
 | 
							unitMillis.put("hours", millisPerHour);
 | 
				
			||||||
			agofromnow = "ago";
 | 
							unitMillis.put("minutes", millisPerMinute);
 | 
				
			||||||
 | 
							unitMillis.put("seconds", millisPerSecond);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
		// We use a factor 3 below for a reason... why do you think?
 | 
						public static String getTimeDeltaDescriptionRelNow(long millis)
 | 
				
			||||||
		// Answer: it is a way to make our round of error smaller.
 | 
					 | 
				
			||||||
		if (absmillis < 3 * millisPerSecond)
 | 
					 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
			unit = "milliseconds";
 | 
							String ret = "";
 | 
				
			||||||
			num = (long) (absmillis);
 | 
							
 | 
				
			||||||
 | 
							double millisLeft = (double) Math.abs(millis);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							List<String> unitCountParts = new ArrayList<String>();
 | 
				
			||||||
 | 
							for (Entry<String, Long> entry : unitMillis.entrySet())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (unitCountParts.size() == 3 ) break;
 | 
				
			||||||
 | 
								String unitName = entry.getKey();
 | 
				
			||||||
 | 
								long unitSize = entry.getValue();
 | 
				
			||||||
 | 
								long unitCount = (long) Math.floor(millisLeft / unitSize);
 | 
				
			||||||
 | 
								if (unitCount < 1) continue;
 | 
				
			||||||
 | 
								millisLeft -= unitSize*unitCount;
 | 
				
			||||||
 | 
								unitCountParts.add(unitCount+" "+unitName);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (absmillis < 3 * millisPerMinute)
 | 
							
 | 
				
			||||||
 | 
							if (unitCountParts.size() == 0) return "just now";
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							ret += implodeCommaAnd(unitCountParts);
 | 
				
			||||||
 | 
							ret += " ";
 | 
				
			||||||
 | 
							if (millis <= 0)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			unit = "seconds";
 | 
								ret += "ago";
 | 
				
			||||||
			num = (long) (absmillis / millisPerSecond);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		else if (absmillis < 3 * millisPerHour)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			unit = "minutes";
 | 
					 | 
				
			||||||
			num = (long) (absmillis / millisPerMinute);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		else if (absmillis <  3 * millisPerDay)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			unit = "hours";
 | 
					 | 
				
			||||||
			num = (long) (absmillis / millisPerHour);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		else if (absmillis < 3 * millisPerWeek)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			unit = "days";
 | 
					 | 
				
			||||||
			num = (long) (absmillis / millisPerDay);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		else if (absmillis < 3 * millisPerMonth)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			unit = "weeks";
 | 
					 | 
				
			||||||
			num = (long) (absmillis / millisPerWeek);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		else if (absmillis < 3 * millisPerYear)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			unit = "months";
 | 
					 | 
				
			||||||
			num = (long) (absmillis / millisPerMonth);
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			unit = "years";
 | 
								ret += "from now";
 | 
				
			||||||
			num = (long) (absmillis / millisPerYear);
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		return ""+num+" "+unit+" "+agofromnow;
 | 
							return ret;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// String comparison
 | 
						// String comparison
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	/*private static int commonStartLength(String a, String b)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		int len = a.length() < b.length() ? a.length() : b.length();
 | 
					 | 
				
			||||||
		int i;
 | 
					 | 
				
			||||||
		for (i = 0; i < len; i++)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if (a.charAt(i) != b.charAt(i)) break;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return i;
 | 
					 | 
				
			||||||
	}*/
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public static String getBestStartWithCI(Collection<String> candidates, String start)
 | 
						public static String getBestStartWithCI(Collection<String> candidates, String start)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		String ret = null;
 | 
							String ret = null;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user