2011-07-18 22:06:02 +02:00
|
|
|
package com.massivecraft.factions.util;
|
2011-04-08 21:01:46 +02:00
|
|
|
|
2014-11-06 01:36:47 +01:00
|
|
|
import com.massivecraft.factions.Conf;
|
2014-12-07 04:44:00 +01:00
|
|
|
import com.massivecraft.factions.FPlayer;
|
2019-08-02 23:01:33 +02:00
|
|
|
import com.massivecraft.factions.P;
|
2018-03-02 07:15:44 +01:00
|
|
|
import com.massivecraft.factions.struct.Role;
|
2015-01-20 19:27:26 +01:00
|
|
|
import com.massivecraft.factions.zcore.util.TL;
|
2011-10-22 17:03:49 +02:00
|
|
|
import org.bukkit.ChatColor;
|
2011-10-08 22:03:44 +02:00
|
|
|
import org.bukkit.entity.Creature;
|
|
|
|
import org.bukkit.entity.Entity;
|
2014-04-04 20:55:21 +02:00
|
|
|
import org.bukkit.entity.EntityType;
|
|
|
|
|
2014-10-19 07:37:25 +02:00
|
|
|
import java.util.ArrayList;
|
2014-04-04 20:55:21 +02:00
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.HashSet;
|
2014-12-07 04:44:00 +01:00
|
|
|
import java.util.List;
|
2018-03-02 07:15:44 +01:00
|
|
|
import java.util.logging.Level;
|
2014-04-04 20:55:21 +02:00
|
|
|
|
|
|
|
public class MiscUtil {
|
2014-08-05 17:17:27 +02:00
|
|
|
|
2019-08-24 19:18:50 +02:00
|
|
|
/// TODO create tag whitelist!!
|
|
|
|
public static HashSet<String> substanceChars =
|
|
|
|
new HashSet<>(Arrays.asList("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("")));
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static String getComparisonString(String str) {
|
|
|
|
StringBuilder ret = new StringBuilder();
|
|
|
|
|
|
|
|
str = ChatColor.stripColor(str);
|
|
|
|
str = str.toLowerCase();
|
|
|
|
|
|
|
|
for (char c : str.toCharArray()) {
|
|
|
|
if (substanceChars.contains(String.valueOf(c))) {
|
|
|
|
ret.append(c);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ret.toString().toLowerCase();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static ArrayList<String> validateTag(String str) {
|
|
|
|
ArrayList<String> errors = new ArrayList<>();
|
|
|
|
|
|
|
|
if (getComparisonString(str).length() < Conf.factionTagLengthMin) {
|
|
|
|
errors.add(P.p.txt.parse(TL.GENERIC_FACTIONTAG_TOOSHORT.toString(), Conf.factionTagLengthMin));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (str.length() > Conf.factionTagLengthMax) {
|
|
|
|
errors.add(P.p.txt.parse(TL.GENERIC_FACTIONTAG_TOOLONG.toString(), Conf.factionTagLengthMax));
|
|
|
|
}
|
|
|
|
|
|
|
|
for (char c : str.toCharArray()) {
|
|
|
|
if (!substanceChars.contains(String.valueOf(c))) {
|
|
|
|
errors.add(P.p.txt.parse(TL.GENERIC_FACTIONTAG_ALPHANUMERIC.toString(), c));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return errors;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Iterable<FPlayer> rankOrder(Iterable<FPlayer> players) {
|
|
|
|
List<FPlayer> admins = new ArrayList<>();
|
|
|
|
List<FPlayer> coleaders = new ArrayList<>();
|
|
|
|
List<FPlayer> moderators = new ArrayList<>();
|
|
|
|
List<FPlayer> normal = new ArrayList<>();
|
|
|
|
List<FPlayer> recruit = new ArrayList<>();
|
|
|
|
|
|
|
|
for (FPlayer player : players) {
|
|
|
|
|
|
|
|
// Fix for some data being broken when we added the recruit rank.
|
|
|
|
if (player.getRole() == null) {
|
|
|
|
player.setRole(Role.NORMAL);
|
|
|
|
P.p.log(Level.WARNING, String.format("Player %s had null role. Setting them to normal. This isn't good D:", player.getName()));
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (player.getRole()) {
|
|
|
|
case LEADER:
|
|
|
|
admins.add(player);
|
|
|
|
break;
|
|
|
|
case COLEADER:
|
|
|
|
admins.add(player);
|
|
|
|
break;
|
|
|
|
case MODERATOR:
|
|
|
|
moderators.add(player);
|
|
|
|
break;
|
|
|
|
case NORMAL:
|
|
|
|
normal.add(player);
|
|
|
|
break;
|
|
|
|
case RECRUIT:
|
|
|
|
recruit.add(player);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
List<FPlayer> ret = new ArrayList<>();
|
|
|
|
ret.addAll(admins);
|
|
|
|
ret.addAll(coleaders);
|
|
|
|
ret.addAll(moderators);
|
|
|
|
ret.addAll(normal);
|
|
|
|
ret.addAll(recruit);
|
|
|
|
return ret;
|
|
|
|
}
|
2011-04-08 21:01:46 +02:00
|
|
|
}
|
|
|
|
|