package com.massivecraft.factions.util; import com.massivecraft.factions.Conf; import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.P; import org.bukkit.ChatColor; import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; public class MiscUtil { public static EntityType creatureTypeFromEntity(Entity entity) { if (!(entity instanceof Creature)) { return null; } String name = entity.getClass().getSimpleName(); name = name.substring(5); // Remove "Craft" return EntityType.fromName(name); } // Inclusive range public static long[] range(long start, long end) { long[] values = new long[(int) Math.abs(end - start) + 1]; if (end < start) { long oldstart = start; start = end; end = oldstart; } for (long i = start; i <= end; i++) { values[(int) (i - start)] = i; } return values; } /// TODO create tag whitelist!! public static HashSet substanceChars = new HashSet(Arrays.asList(new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"})); public static String getComparisonString(String str) { String ret = ""; str = ChatColor.stripColor(str); str = str.toLowerCase(); for (char c : str.toCharArray()) { if (substanceChars.contains(String.valueOf(c))) { ret += c; } } return ret.toLowerCase(); } public static ArrayList validateTag(String str) { ArrayList errors = new ArrayList(); if (getComparisonString(str).length() < Conf.factionTagLengthMin) { errors.add(P.p.txt.parse("The faction tag can't be shorter than %s chars.", Conf.factionTagLengthMin)); } if (str.length() > Conf.factionTagLengthMax) { errors.add(P.p.txt.parse("The faction tag can't be longer than %s chars.", Conf.factionTagLengthMax)); } for (char c : str.toCharArray()) { if (!substanceChars.contains(String.valueOf(c))) { errors.add(P.p.txt.parse("Faction tag must be alphanumeric. \"%s\" is not allowed.", c)); } } return errors; } public static Iterable rankOrder(Iterable players) { List admins = new ArrayList(); List moderators = new ArrayList(); List normal = new ArrayList(); for (FPlayer player : players) { switch (player.getRole()) { case ADMIN: admins.add(player); break; case MODERATOR: moderators.add(player); break; case NORMAL: normal.add(player); break; } } List ret = new ArrayList(); ret.addAll(admins); ret.addAll(moderators); ret.addAll(normal); return ret; } }