208 lines
7.0 KiB
Java
208 lines
7.0 KiB
Java
package com.craftaro.ultimatekits.utils;
|
|
|
|
import com.craftaro.core.compatibility.CompatibleMaterial;
|
|
import com.craftaro.core.gui.Gui;
|
|
import com.craftaro.core.gui.GuiUtils;
|
|
import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial;
|
|
import com.craftaro.ultimatekits.settings.Settings;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.World;
|
|
import org.bukkit.block.Block;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
|
import java.text.DecimalFormat;
|
|
import java.util.Arrays;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Random;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
/**
|
|
* Created by songoda on 2/24/2017.
|
|
*/
|
|
public class Methods {
|
|
|
|
private static final Random rand = new Random();
|
|
|
|
public static boolean canGiveKit(Player player) {
|
|
if (player.hasPermission("ultimatekits.cangive")) return true;
|
|
|
|
if (player.hasPermission("essentials.kit.others")) return true;
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Serializes the location of the block specified.
|
|
*
|
|
* @param block The block whose location is to be saved.
|
|
* @return The serialized data.
|
|
*/
|
|
public static String serializeLocation(Block block) {
|
|
if (block == null)
|
|
return "";
|
|
return serializeLocation(block.getLocation());
|
|
}
|
|
|
|
/**
|
|
* Serializes the location specified.
|
|
*
|
|
* @param location The location that is to be saved.
|
|
* @return The serialized data.
|
|
*/
|
|
public static String serializeLocation(Location location) {
|
|
if (location == null || location.getWorld() == null)
|
|
return null;
|
|
String w = location.getWorld().getName();
|
|
double x = location.getX();
|
|
double y = location.getY();
|
|
double z = location.getZ();
|
|
String str = w + ":" + x + ":" + y + ":" + z;
|
|
str = str.replace(".0", "").replace("/", "");
|
|
return str;
|
|
}
|
|
|
|
private static Map<String, Location> serializeCache = new HashMap<>();
|
|
|
|
/**
|
|
* Deserializes a location from the string.
|
|
*
|
|
* @param str The string to parse.
|
|
* @return The location that was serialized in the string.
|
|
*/
|
|
public static Location unserializeLocation(String str) {
|
|
if (str == null || str.equals(""))
|
|
return null;
|
|
if (serializeCache.containsKey(str)) {
|
|
return serializeCache.get(str).clone();
|
|
}
|
|
String cacheKey = str;
|
|
str = str.replace("y:", ":").replace("z:", ":").replace("w:", "").replace("x:", ":").replace("/", ".");
|
|
List<String> args = Arrays.asList(str.split("\\s*:\\s*"));
|
|
|
|
World world = Bukkit.getWorld(args.get(0));
|
|
double x = Double.parseDouble(args.get(1));
|
|
double y = Double.parseDouble(args.get(2));
|
|
double z = Double.parseDouble(args.get(3));
|
|
Location location = new Location(world, x, y, z, 0, 0);
|
|
serializeCache.put(cacheKey, location.clone());
|
|
return location;
|
|
}
|
|
|
|
public static String makeReadable(Long time) {
|
|
if (time == null)
|
|
return "1s";
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
long days = TimeUnit.MILLISECONDS.toDays(time);
|
|
long hours = TimeUnit.MILLISECONDS.toHours(time) - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(time));
|
|
long minutes = TimeUnit.MILLISECONDS.toMinutes(time) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(time));
|
|
long seconds = TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(time));
|
|
|
|
if (days != 0L)
|
|
sb.append(" ").append(days).append("d");
|
|
if (hours != 0L)
|
|
sb.append(" ").append(hours).append("h");
|
|
if (minutes != 0L)
|
|
sb.append(" ").append(minutes).append("m");
|
|
if (seconds != 0L)
|
|
sb.append(" ").append(seconds).append("s");
|
|
if (sb.length() == 0)
|
|
sb.append("1s");
|
|
return sb.toString().trim();
|
|
}
|
|
|
|
public static long parseTime(String input) {
|
|
long result = 0;
|
|
StringBuilder number = new StringBuilder();
|
|
for (int i = 0; i < input.length(); i++) {
|
|
char c = input.charAt(i);
|
|
if (Character.isDigit(c)) {
|
|
number.append(c);
|
|
} else if (Character.isLetter(c) && (number.length() > 0)) {
|
|
result += convert(Integer.parseInt(number.toString()), c);
|
|
number = new StringBuilder();
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
private static long convert(long value, char unit) {
|
|
switch (unit) {
|
|
case 'd':
|
|
return value * 1000 * 60 * 60 * 24;
|
|
case 'h':
|
|
return value * 1000 * 60 * 60;
|
|
case 'm':
|
|
return value * 1000 * 60;
|
|
case 's':
|
|
return value * 1000;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* Formats the specified double into the Economy format specified in the Arconix config.
|
|
*
|
|
* @param amt The double to format.
|
|
* @return The economy formatted double.
|
|
*/
|
|
public static String formatEconomy(double amt) {
|
|
DecimalFormat formatter = new DecimalFormat("#,###.00");
|
|
return formatter.format(amt);
|
|
}
|
|
|
|
public static boolean isInt(String number) {
|
|
if (number == null || number.equals(""))
|
|
return false;
|
|
try {
|
|
Integer.parseInt(number);
|
|
} catch (NumberFormatException e) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Determines if the provided string is a valid number (int, double, float, or otherwise).
|
|
*
|
|
* @param s The string to check.
|
|
* @return <code>true</code> if the string is numeric, otherwise <code>false</code>
|
|
*/
|
|
public static boolean isNumeric(String s) {
|
|
if (s == null || s.equals(""))
|
|
return false;
|
|
return s.matches("[-+]?\\d*\\.?\\d+");
|
|
}
|
|
|
|
public static void fillGlass(Gui gui) {
|
|
|
|
// fill center with glass
|
|
if (Settings.RAINBOW.getBoolean()) {
|
|
for (int row = 0; row < gui.getRows(); ++row) {
|
|
for (int col = row == 1 ? 2 : 3; col < (row == 1 ? 7 : 6); ++col) {
|
|
gui.setItem(row, col, GuiUtils.getBorderItem(CompatibleMaterial.getGlassPaneForColor(rand.nextInt(16))));
|
|
}
|
|
}
|
|
} else {
|
|
gui.setDefaultItem(GuiUtils.getBorderItem(Settings.GLASS_TYPE_1.getMaterial(XMaterial.GRAY_STAINED_GLASS_PANE)));
|
|
}
|
|
|
|
// decorate the edges
|
|
ItemStack glass2 = GuiUtils.getBorderItem(Settings.GLASS_TYPE_2.getMaterial(XMaterial.BLUE_STAINED_GLASS_PANE));
|
|
ItemStack glass3 = GuiUtils.getBorderItem(Settings.GLASS_TYPE_3.getMaterial(XMaterial.LIGHT_BLUE_STAINED_GLASS_PANE));
|
|
|
|
// edges will be type 3
|
|
gui.mirrorFill(0, 2, true, true, glass3);
|
|
gui.mirrorFill( 1, 1, false, true, glass3);
|
|
|
|
// decorate corners with type 2
|
|
gui.mirrorFill( 0, 0, true, true, glass2);
|
|
gui.mirrorFill( 1, 0, true, true, glass2);
|
|
gui.mirrorFill(0, 1, true, true, glass2);
|
|
}
|
|
}
|