- New player name generator applied

This commit is contained in:
moomarc
2014-01-16 10:17:38 +00:00
parent d8eb3a5c7a
commit caac7dc2ed
4 changed files with 303 additions and 47 deletions

1
.gitattributes vendored
View File

@@ -15669,6 +15669,7 @@ forge-gui/src/main/java/forge/util/HttpUtil.java svneol=native#text/plain
forge-gui/src/main/java/forge/util/IgnoringXStream.java -text
forge-gui/src/main/java/forge/util/LineReader.java -text
forge-gui/src/main/java/forge/util/MultiplexOutputStream.java svneol=native#text/plain
forge-gui/src/main/java/forge/util/NameGenerator.java -text
forge-gui/src/main/java/forge/util/OperatingSystem.java -text
forge-gui/src/main/java/forge/util/ReflectionUtil.java -text
forge-gui/src/main/java/forge/util/XmlUtil.java -text

View File

@@ -54,6 +54,7 @@ import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref;
import forge.util.Lang;
import forge.util.MyRandom;
import forge.util.NameGenerator;
/**
* Assembles Swing components of constructed submenu singleton.
@@ -101,6 +102,7 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
private final List<FPanel> activePlayerPanelList = new ArrayList<FPanel>(8);
private final List<FPanel> inactivePlayerPanelList = new ArrayList<FPanel>(6);
private final List<FTextField> playerNameBtnList = new ArrayList<FTextField>(8);
private final List<String> playerNames = new ArrayList<String>(8);
private final List<JRadioButton> playerTypeRadios = new ArrayList<JRadioButton>(8);
private final String[] avatarPrefs = Singletons.getModel().getPreferences().getPref(FPref.UI_AVATARS).split(",");
private final List<FLabel> avatarList = new ArrayList<FLabel>(8);
@@ -217,8 +219,9 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
name = "Human";
}
} else {
name = "Player " + (playerIndex + 1);
name = NameGenerator.getRandomName("Any", "Any", playerNames);
}
playerNames.add(name);
final FTextField playerNameField = new FTextField.Builder().ghostText(name).text(name).build();
playerNameField.setFocusable(true);
playerNameField.addActionListener(nameListener);

View File

@@ -1,5 +1,6 @@
package forge.net;
import java.util.ArrayList;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
@@ -14,6 +15,7 @@ import forge.gui.GuiDisplayUtil;
import forge.gui.toolbox.FSkin;
import forge.net.client.INetClient;
import forge.util.MyRandom;
import forge.util.NameGenerator;
/**
* TODO: Write javadoc for this type.
@@ -21,47 +23,6 @@ import forge.util.MyRandom;
*/
public class Lobby {
private final String[] opponentNames = new String[] {
"Abigail", "Ada", "Adeline", "Adriana", "Agatha", "Agnes", "Aileen", "Alba", "Alcyon",
"Alethea", "Alice", "Alicia", "Alison", "Amanda", "Amelia", "Amy", "Andrea", "Angelina",
"Anita", "Ann", "Annabel", "Anne", "Audrey", "Barbara", "Belinda", "Bernice", "Bertha",
"Bonnie", "Brenda", "Bridget", "Bunny", "Carmen", "Carol", "Catherine", "Cheryl",
"Christine", "Cinderalla", "Claire", "Clarice", "Claudia", "Constance", "Cora",
"Corinne", "Cnythia", "Daisy", "Daphne", "Dawn", "Deborah", "Diana", "Dolly", "Dora",
"Doreen", "Doris", "Dorothy", "Eileen", "Elaine", "Elizabeth", "Emily", "Emma", "Ethel",
"Evelyn", "Fiona", "Florence", "Frances", "Geraldine", "Gertrude", "Gladys", "Gloria",
"Grace", "Greta", "Harriet", "Hazel", "Helen", "Hilda", "Ida", "Ingrid", "Irene",
"Isabel", "Jacinta", "Jackie", "Jane", "Janet", "Janice", "Jennifer", "Jessie", "Joan",
"Jocelyn", "Josephine", "Joyce", "Judith", "Julia", "Juliana", "Karina", "Kathleen",
"Laura", "Lilian", "Lily", "Linda", "Lisa", "Lilita", "Lora", "Lorna", "Lucy", "Lydia",
"Mabel", "Madeline", "Maggie", "Maria", "Mariam", "Marilyn", "Mary", "Matilda", "Mavis",
"Melanie", "Melinda", "Melody", "Michelle", "Mildred", "Molly", "Mona", "Monica",
"Nancy", "Nora", "Norma", "Olga", "Pamela", "Patricia", "Paula", "Pauline", "Pearl",
"Peggy", "Penny", "Phoebe", "Phyllis", "Polly", "Priscilla", "Rachel", "Rebecca",
"Rita", "Rosa", "Rosalind", "Rose", "Rosemary", "Rowena", "Ruby", "Sally", "Samantha",
"Sarah", "Selina", "Sharon", "Sheila", "Shirley", "Sonya", "Stella", "Sue", "Susan",
"Sylvia", "Tina", "Tracy", "Ursula", "Valentine", "Valerie", "Vanessa", "Veronica",
"Victoria", "Violet", "Vivian", "Wendy", "Winnie", "Yvonne", "Aaron", "Abraham", "Adam",
"Adrain", "Alain", "Alan", "Alban", "Albert", "Alec", "Alexander", "Alfonso", "Alfred",
"Allan", "Allen", "Alonso", "Aloysius", "Alphonso", "Alvin", "Andrew", "Andy", "Amadeus",
"Amselm", "Anthony", "Arnold", "Augusta", "Austin", "Barnaby", "Benedict", "Benjamin",
"Bertie", "Bertram", "Bill", "Bob", "Boris", "Brady", "Brian", "Bruce", "Burt", "Byron",
"Calvin", "Carl", "Carter", "Casey", "Cecil", "Charles", "Christian", "Christopher",
"Clarence", "Clement", "Colin", "Conan", "Dalton", "Damian", "Daniel", "David", "Denis",
"Derek", "Desmond", "Dick", "Dominic", "Donald", "Douglas", "Duncan", "Edmund",
"Edward", "Ellen", "Elton", "Elvis", "Eric", "Eugene", "Felix", "Francis", "Frank",
"Frederick", "Gary", "Geoffrey", "George", "Gerald", "Gerry", "Gordon", "Hamish",
"Hardy", "Harold", "Harry", "Henry", "Herbert", "Ignatius", "Jack", "James", "Jeffrey",
"Jim", "Joe", "John", "Joseph", "Karl", "Keith", "Kenneth", "Kevin", "Larry", "Lawrence",
"Leonard", "Lionel", "Louis", "Lucas", "Malcolm", "Mark", "Martin", "Mathew", "Maurice",
"Max", "Melvin", "Michael", "Milton", "Morgan", "Morris", "Murphy", "Neville",
"Nicholas", "Noel", "Norman", "Oliver", "Oscar", "Patrick", "Paul", "Perkin", "Peter",
"Philip", "Ralph", "Randy", "Raymond", "Richard", "Ricky", "Robert", "Robin", "Rodney",
"Roger", "Roland", "Ronald", "Roy", "Sam", "Sebastian", "Simon", "Stanley", "Stephen",
"Stuart", "Terence", "Thomas", "Tim", "Tom", "Tony", "Victor", "Vincent", "Wallace",
"Walter", "Wilfred", "William", "Winston"
};
private final LobbyPlayer guiPlayer;
public Lobby(Supplier<LobbyPlayer> humanFactory){
guiPlayer = humanFactory.get();
@@ -92,12 +53,8 @@ public class Lobby {
/** Returns a random name from the supplied list. */
private String getRandomName() {
Random my = MyRandom.getRandom();
String playerName = GuiDisplayUtil.getPlayerName();
String aiName = opponentNames[my.nextInt(opponentNames.length)];
while (aiName.equalsIgnoreCase(playerName)) {
aiName = opponentNames[my.nextInt(opponentNames.length)];
}
String aiName = NameGenerator.getRandomName("Any", "Generic", playerName);
return aiName;
}

View File

@@ -0,0 +1,295 @@
/** Random name generator for Forge. */
package forge.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import org.apache.commons.lang3.ArrayUtils;
/**
* @author Marc
*
*/
public final class NameGenerator {
private static final String[] fantasyMales = new String[] {
"Abaet", "Abarden", "Aboloft", "Acamen", "Achard", "Ackmard", "Adeen", "Aerden", "Afflon", "Aghon", "Agnar",
"Ahalfar", "Ahburn", "Ahdun", "Aidan", "Airen", "Airis", "Albright", "Aldaren", "Alderman", "Aldren", "Alkirk",
"Allso", "Amerdan", "Amitel", "Anfar", "Anumi", "Anumil", "Asden", "Asdern", "Asen", "Aslan", "Atar",
"Atgur", "Atlin", "Auchfor", "Auden", "Ault", "Ayrie", "Aysen", "Bacohl", "Badeek", "Baduk", "Balati",
"Baradeer", "Barkydle", "Basden", "Bayde", "Beck", "Bedic", "Beeron", "Bein", "Beson", "Besur", "Besurlde",
"Bewul", "Biedgar", "Bildon", "Biston", "Bithon", "Boal", "Boaldelr", "Bolrock", "Brakdern", "Breanon", "Bredere",
"Bredin", "Bredock", "Breen", "Brighton", "Bristan", "Buchmeid", "Bue", "Busma", "Buthomar", "Bydern", "Caelholdt",
"Cainon", "Calden", "Camchak", "Camilde", "Cardon", "Casden", "Cayold", "Celbahr", "Celorn", "Celthric", "Cemark",
"Cerdern", "Cespar", "Cether", "Cevelt", "Chamon", "Chesmarn", "Chidak", "Cibrock", "Cipyar", "Ciroc", "Codern",
"Colthan", "Connell", "Cordale", "Cos", "Cosdeer", "Cuparun", "Cusmirk", "Cydare", "Cylmar", "Cythnar", "Cyton",
"Daburn", "Daermod", "Dak", "Dakamon", "Dakkone", "Dalburn", "Dalmarn", "Dapvhir", "Darkboon", "Darkkon", "Darko",
"Darkspur", "Darmor", "Darpick", "Dasbeck", "Dask", "Deathmar", "Defearon", "Derik", "Derrin", "Desil", "Dessfar",
"Dinfar", "Dismer", "Doceon", "Dochrohan", "Dokoran", "Dorn", "Dosoman", "Drakoe", "Drakone", "Drandon", "Drit",
"Dritz", "Drophar", "Dryden", "Dryn", "Duba", "Dukran", "Duran", "Durmark", "Dusaro", "Dyfar", "Dyten",
"Eard", "Eckard", "Efamar", "Efar", "Egmardern", "Eiridan", "Ekgamut", "Eli", "Elik", "Elson", "Elthin",
"Enbane", "Endor", "Enidin", "Enoon", "Enro", "Erikarn", "Erim", "Eritai", "Escariet", "Espardo", "Etar",
"Etburn", "Etdar", "Ethen", "Etmere", "Etran", "Eythil", "Faoturk", "Faowind", "Fearlock", "Fenrirr", "Fetmar",
"Feturn", "Ficadon", "Fickfylo", "Fildon", "Firedorn", "Firiro", "Floran", "Folmard", "Fraderk", "Fronar", "Fydar",
"Fyn", "Gafolern", "Gai", "Galain", "Galiron", "Gametris", "Gauthus", "Gemardt", "Gemedern", "Gemedes", "Gerirr",
"Geth", "Gib", "Gibolock", "Gibolt", "Gith", "Gom", "Gosford", "Gothar", "Gothikar", "Gresforn", "Grimie",
"Gryn", "Gundir", "Gustov", "Guthale", "Gybol", "Gybrush", "Gyin", "Halmar", "Harrenhal", "Hasten", "Hectar",
"Hecton", "Heramon", "Hermenze", "Hermuck", "Hezak", "Hildale", "Hildar", "Hileict", "Hydale", "Hyten", "Iarmod",
"Idon", "Ieli", "Ieserk", "Ikar", "Ilgenar", "Illilorn", "Illium", "Ingel", "Ipedorn", "Irefist", "Ironmark",
"Isen", "Isil", "Ithric", "Jackson", "Jalil", "Jamik", "Janus", "Jayco", "Jaython", "Jesco", "Jespar",
"Jethil", "Jex", "Jib", "Jibar", "Jin", "Juktar", "Julthor", "Jun", "Justal", "Kafar", "Kaldar",
"Kellan", "Keran", "Kesad", "Kesmon", "Kethren", "Kib", "Kibidon", "Kiden", "Kilbas", "Kilburn", "Kildarien",
"Kimdar", "Kinorn", "Kip", "Kirder", "Kodof", "Kolmorn", "Kyrad", "Lackus", "Lacspor", "Laderic", "Lafornon",
"Lahorn", "Laracal", "Ledale", "Leit", "Lephar", "Lephidiles", "Lerin", "Lesphares", "Letor", "Lidorn", "Lin",
"Liphanes", "Loban", "Lox", "Ludokrin", "Luphildern", "Lupin", "Lurd", "Macon", "Madarlon", "Mafar", "Marderdeen",
"Mardin", "Markard", "Markdoon", "Marklin", "Mashasen", "Mathar", "Medarin", "Medin", "Mellamo", "Meowol", "Merdon",
"Meridan", "Merkesh", "Mesah", "Mes'ard", "Mesophan", "Mesoton", "Mezo", "Michael", "Mick", "Mickal", "Migorn",
"Milo", "Miphates", "Mi'talrythin", "Mitar", "Modric", "Modum", "Mudon", "Mufar", "Mujarin", "Mylo", "Mythik",
"Mythil", "Nadeer", "Nalfar", "Namorn", "Naphates", "Neowyld", "Nidale", "Nikpal", "Nikrolin", "Niktohal", "Niro",
"Noford", "Nothar", "Nuthor", "Nuwolf", "Nydale", "Nythil", "O'tho", "Ocarin", "Occelot", "Occhi", "Odaren",
"Odeir", "Ohethlic", "Okar", "Omaniron", "Omarn", "Orin", "Ospar", "Othelen", "Oxbaren", "Padan", "Palid",
"Papur", "Peitar", "Pelphides", "Pender", "Pendus", "Perder", "Perol", "Phairdon", "Phemedes", "Phexides", "Phoenix",
"Picon", "Pictal", "Picumar", "Pildoor", "Pixdale", "Ponith", "Poran", "Poscidion", "Prothalon", "Puthor", "Pyder",
"Qeisan", "Qidan", "Quiad", "Quid", "Quiss", "Qupar", "Qysan", "Radag'mal", "Randar", "Raysdan", "Rayth",
"Reaper", "Resboron", "Reth", "Rethik", "Rhithik", "Rhithin", "Rhysling", "Riandur", "Rikar", "Rismak", "Riss",
"Ritic", "Rogeir", "Rogist", "Rogoth", "Rophan", "Rulrindale", "Rydan", "Ryfar", "Ryfar", "Ryodan", "Rysdan",
"Rythen", "Rythern", "Sabal", "Sadareen", "Safilix", "Samon", "Samot", "Sasic", "Scoth", "Scythe", "Secor",
"Sed", "Sedar", "Senick", "Senthyril", "Serin", "Sermak", "Seryth", "Sesmidat", "Seth", "Setlo", "Shade",
"Shadowbane", "Shane", "Shard", "Shardo", "Shillen", "Silco", "Sildo", "Sil'forrin", "Silpal", "Sithik", "Soderman",
"Sothale", "Staph", "Stenwulf", "Steven", "Suktor", "Suth", "Sutlin", "Syr", "Syth", "Sythril", "Talberon",
"Telpur", "Temil", "Temilfist", "Tempist", "Teslanar", "Tespar", "Tessino", "Tethran", "Thiltran", "Tholan", "Tibers",
"Tibolt", "Ticharol", "Tilner", "Tithan", "Tobale", "Tol'Solie", "Tolle", "Tolsar", "Toma", "Tothale", "Tousba",
"Towerlock", "Tuk", "Tuscanar", "Tusdar", "Tyden", "Uerthe", "Ugmar", "Uhrd", "Undin", "Updar", "Uther",
"Vaccon", "Vacone", "Valkeri", "Valynard", "Vectomon", "Veldahar", "Vespar", "Vethelot", "Victor", "Vider", "Vigoth",
"Vilan", "Vildar", "Vinald", "Vinkolt", "Virde", "Voltain", "Volux", "Voudim", "Vythethi", "Wak'dern", "Walkar",
"Wanar", "Wekmar", "Werymn", "Weshin", "William", "Willican", "Wilte", "Wiltmar", "Wishane", "Witfar", "Wrathran",
"Wraythe", "Wuthmon", "Wyder", "Wyeth", "Wyvorn", "Xander", "Xavier", "Xenil", "Xex", "Xithyl", "Xuio",
"Xynx", "Y'reth", "Yabaro", "Yepal", "Yesirn", "Yssik", "Yssith", "Zak", "Zakarn", "Zecane", "Zeke",
"Zerin", "Zessfar", "Zidar", "Zigmal", "Zile", "Zilocke", "Zio", "Zoru", "Zotar", "Zutar", "Zyten"
};
private static final String[] fantasyFemales = new String[] {
"Acele", "Acholate", "Ada", "Adiannon", "Adorra", "Ahanna", "Akara", "Akassa", "Akia", "Amaerilde", "Amara",
"Amarisa", "Amarizi", "Ana", "Andonna", "Ani", "Annalyn", "Archane", "Ariannona", "Arina", "Arryn", "Asada",
"Awnia", "Ayne", "Basete", "Bathelie", "Bethe", "Brana", "Brianan", "Bridonna", "Brynhilde", "Calene", "Calina",
"Celestine", "Celoa", "Cephenrene", "Chani", "Chivahle", "Chrystyne", "Corda", "Cyelena", "Dalavesta", "Desini", "Dylena",
"Ebatryne", "Ecematare", "Efari", "Enaldie", "Enoka", "Enoona", "Errinaya", "Fayne", "Frederika", "Frida", "Gene",
"Gessane", "Gronalyn", "Gvene", "Gwethana", "Halete", "Helenia", "Hildandi", "Hyza", "Idona", "Ikini", "Ilene",
"Illia", "Iona", "Jessika", "Jezzine", "Justalyne", "Kassina", "Kilayox", "Kilia", "Kilyne", "Kressara", "Laela",
"Laenaya", "Lelani", "Lenala", "Linovahle", "Linyah", "Lloyanda", "Lolinda", "Lyna", "Lynessa", "Mehande", "Melisande",
"Midiga", "Mirayam", "Mylene", "Nachaloa", "Naria", "Narisa", "Nelenna", "Niraya", "Nymira", "Ochala", "Olivia",
"Onathe", "Ondola", "Orwyne", "Parthinia", "Pascheine", "Pela", "Peri'el", "Pharysene", "Philadona", "Prisane", "Prysala",
"Pythe", "Q'ara", "Q'pala", "Quasee", "Rhyanon", "Rivatha", "Ryiah", "Sanala", "Sathe", "Senira", "Sennetta",
"Sepherene", "Serane", "Sevestra", "Sidara", "Sidathe", "Sina", "Sunete", "Synestra", "Sythini", "Szene", "Tabika",
"Tabithi", "Tajule", "Tamare", "Teresse", "Tolida", "Tonica", "Treka", "Tressa", "Trinsa", "Tryane", "Tybressa",
"Tycane", "Tysinni", "Undaria", "Uneste", "Urda", "Usara", "Useli", "Ussesa", "Venessa", "Veseere", "Voladea",
"Vysarane", "Vythica", "Wanera", "Welisarne", "Wellisa", "Wesolyne", "Wyeta", "Yilvoxe", "Ysane", "Yve", "Yviene",
"Yvonnette", "Yysara", "Zana", "Zathe", "Zecele", "Zenobia", "Zephale", "Zephere", "Zerma", "Zestia", "Zilka",
"Zoura", "Zrye", "Zyneste", "Zynoa"
};
private static final String[] genericMales = new String[] {
"Jacob", "Michael", "Joshua", "Matthew", "Daniel", "Christopher", "Andrew", "Ethan", "Joseph", "William",
"Anthony", "David", "Alexander", "Nicholas", "Ryan", "Tyler", "James", "John", "Jonathan", "Noah",
"Brandon", "Christian", "Dylan", "Samuel", "Benjamin", "Nathan", "Zachary", "Logan", "Justin", "Gabriel",
"Jose", "Austin", "Kevin", "Elijah", "Caleb", "Robert", "Thomas", "Jordan", "Cameron", "Jack",
"Hunter", "Jackson", "Angel", "Isaiah", "Evan", "Isaac", "Mason", "Luke", "Jason", "Jayden",
"Gavin", "Aaron", "Connor", "Aiden", "Aidan", "Kyle", "Juan", "Charles", "Luis", "Adam",
"Lucas", "Brian", "Eric", "Adrian", "Nathaniel", "Sean", "Alex", "Carlos", "Ian", "Bryan",
"Owen", "Jesus", "Landon", "Julian", "Chase", "Cole", "Diego", "Jeremiah", "Steven", "Sebastian",
"Xavier", "Timothy", "Carter", "Wyatt", "Brayden", "Blake", "Hayden", "Devin", "Cody", "Richard",
"Seth", "Dominic", "Jaden", "Antonio", "Miguel", "Liam", "Patrick", "Carson", "Jesse", "Tristan",
"Alejandro", "Henry", "Victor", "Trevor", "Bryce", "Jake", "Riley", "Colin", "Jared", "Jeremy",
"Mark", "Caden", "Garrett", "Parker", "Marcus", "Vincent", "Kaleb", "Kaden", "Brady", "Colton",
"Kenneth", "Joel", "Oscar", "Josiah", "Jorge", "Cooper", "Ashton", "Tanner", "Eduardo", "Paul",
"Edward", "Ivan", "Preston", "Maxwell", "Alan", "Levi", "Stephen", "Grant", "Nicolas", "Omar",
"Dakota", "Alexis", "George", "Collin", "Eli", "Spencer", "Gage", "Max", "Cristian", "Ricardo",
"Derek", "Micah", "Brody", "Francisco", "Nolan", "Ayden", "Dalton", "Shane", "Peter", "Damian",
"Jeffrey", "Brendan", "Travis", "Fernando", "Peyton", "Conner", "Andres", "Javier", "Giovanni", "Shawn",
"Braden", "Jonah", "Bradley", "Cesar", "Emmanuel", "Manuel", "Edgar", "Mario", "Erik", "Edwin",
"Johnathan", "Devon", "Erick", "Wesley", "Oliver", "Trenton", "Hector", "Malachi", "Jalen", "Raymond",
"Gregory", "Abraham", "Elias", "Leonardo", "Sergio", "Donovan", "Colby", "Marco", "Bryson", "Martin",
"Zoura", "Zrye", "Zyneste", "Zynoa", "Aaron", "Abraham", "Adam",
"Adrain", "Alain", "Alan", "Alban", "Albert", "Alec", "Alexander", "Alfonso", "Alfred",
"Allan", "Allen", "Alonso", "Aloysius", "Alphonso", "Alvin", "Andrew", "Andy", "Amadeus",
"Amselm", "Anthony", "Arnold", "Augusta", "Austin", "Barnaby", "Benedict", "Benjamin",
"Bertie", "Bertram", "Bill", "Bob", "Boris", "Brady", "Brian", "Bruce", "Burt", "Byron",
"Calvin", "Carl", "Carter", "Casey", "Cecil", "Charles", "Christian", "Christopher",
"Clarence", "Clement", "Colin", "Conan", "Dalton", "Damian", "Daniel", "David", "Denis",
"Derek", "Desmond", "Dick", "Dominic", "Donald", "Douglas", "Duncan", "Edmund",
"Edward", "Ellen", "Elton", "Elvis", "Eric", "Eugene", "Felix", "Francis", "Frank",
"Frederick", "Gary", "Geoffrey", "George", "Gerald", "Gerry", "Gordon", "Hamish",
"Hardy", "Harold", "Harry", "Henry", "Herbert", "Ignatius", "Jack", "James", "Jeffrey",
"Jim", "Joe", "John", "Joseph", "Karl", "Keith", "Kenneth", "Kevin", "Larry", "Lawrence",
"Leonard", "Lionel", "Louis", "Lucas", "Malcolm", "Mark", "Martin", "Mathew", "Maurice",
"Max", "Melvin", "Michael", "Milton", "Morgan", "Morris", "Murphy", "Neville",
"Nicholas", "Noel", "Norman", "Oliver", "Oscar", "Patrick", "Paul", "Perkin", "Peter",
"Philip", "Ralph", "Randy", "Raymond", "Richard", "Ricky", "Robert", "Robin", "Rodney",
"Roger", "Roland", "Ronald", "Roy", "Sam", "Sebastian", "Simon", "Stanley", "Stephen",
"Stuart", "Terence", "Thomas", "Tim", "Tom", "Tony", "Victor", "Vincent", "Wallace",
"Walter", "Wilfred", "William", "Winston"
};
private static final String[] genericFemales = new String[] {
"Emily", "Madison", "Emma", "Olivia", "Hannah", "Abigail", "Isabella", "Samantha", "Elizabeth", "Ashley",
"Alexis", "Sarah", "Sophia", "Alyssa", "Grace", "Ava", "Taylor", "Brianna", "Lauren", "Chloe",
"Natalie", "Kayla", "Jessica", "Anna", "Victoria", "Mia", "Hailey", "Sydney", "Jasmine", "Julia",
"Morgan", "Destiny", "Rachel", "Ella", "Kaitlyn", "Megan", "Katherine", "Savannah", "Jennifer", "Alexandra",
"Allison", "Haley", "Maria", "Kaylee", "Lily", "Makayla", "Brooke", "Mackenzie", "Nicole", "Addison",
"Stephanie", "Lillian", "Andrea", "Zoe", "Faith", "Kimberly", "Madeline", "Alexa", "Katelyn", "Gabriella",
"Gabrielle", "Trinity", "Amanda", "Kylie", "Mary", "Paige", "Riley", "Leah", "Jenna", "Sara",
"Rebecca", "Michelle", "Sofia", "Vanessa", "Jordan", "Angelina", "Caroline", "Avery", "Audrey", "Evelyn",
"Maya", "Claire", "Autumn", "Jocelyn", "Ariana", "Nevaeh", "Arianna", "Jada", "Bailey", "Brooklyn",
"Aaliyah", "Amber", "Isabel", "Mariah", "Danielle", "Melanie", "Sierra", "Erin", "Molly", "Amelia",
"Isabelle", "Madelyn", "Melissa", "Jacqueline", "Marissa", "Shelby", "Angela", "Leslie", "Katie", "Jade",
"Catherine", "Diana", "Aubrey", "Mya", "Amy", "Briana", "Sophie", "Gabriela", "Breanna", "Gianna",
"Kennedy", "Gracie", "Peyton", "Adriana", "Christina", "Courtney", "Daniela", "Lydia", "Kathryn", "Valeria",
"Layla", "Alexandria", "Natalia", "Angel", "Laura", "Charlotte", "Margaret", "Cheyenne", "Mikayla", "Miranda",
"Naomi", "Kelsey", "Payton", "Ana", "Alicia", "Jillian", "Daisy", "Mckenzie", "Ashlyn", "Sabrina",
"Caitlin", "Summer", "Ruby", "Rylee", "Valerie", "Skylar", "Lindsey", "Kelly", "Genesis", "Zoey",
"Eva", "Sadie", "Alexia", "Cassidy", "Kylee", "Kendall", "Jordyn", "Kate", "Jayla", "Karen",
"Tiffany", "Cassandra", "Juliana", "Reagan", "Caitlyn", "Giselle", "Serenity", "Alondra", "Lucy", "Bianca",
"Kiara", "Crystal", "Erica", "Angelica", "Hope", "Chelsea", "Alana", "Liliana", "Brittany", "Camila",
"Makenzie", "Lilly", "Veronica", "Abby", "Jazmin", "Adrianna", "Delaney", "Karina", "Ellie", "Jasmin",
"Abigail", "Ada", "Adeline", "Adriana", "Agatha", "Agnes", "Aileen", "Alba", "Alcyon",
"Alethea", "Alice", "Alicia", "Alison", "Amanda", "Amelia", "Amy", "Andrea", "Angelina",
"Anita", "Ann", "Annabel", "Anne", "Audrey", "Barbara", "Belinda", "Bernice", "Bertha",
"Bonnie", "Brenda", "Bridget", "Bunny", "Carmen", "Carol", "Catherine", "Cheryl",
"Christine", "Cinderalla", "Claire", "Clarice", "Claudia", "Constance", "Cora",
"Corinne", "Cnythia", "Daisy", "Daphne", "Dawn", "Deborah", "Diana", "Dolly", "Dora",
"Doreen", "Doris", "Dorothy", "Eileen", "Elaine", "Elizabeth", "Emily", "Emma", "Ethel",
"Evelyn", "Fiona", "Florence", "Frances", "Geraldine", "Gertrude", "Gladys", "Gloria",
"Grace", "Greta", "Harriet", "Hazel", "Helen", "Hilda", "Ida", "Ingrid", "Irene",
"Isabel", "Jacinta", "Jackie", "Jane", "Janet", "Janice", "Jennifer", "Jessie", "Joan",
"Jocelyn", "Josephine", "Joyce", "Judith", "Julia", "Juliana", "Karina", "Kathleen",
"Laura", "Lilian", "Lily", "Linda", "Lisa", "Lilita", "Lora", "Lorna", "Lucy", "Lydia",
"Mabel", "Madeline", "Maggie", "Maria", "Mariam", "Marilyn", "Mary", "Matilda", "Mavis",
"Melanie", "Melinda", "Melody", "Michelle", "Mildred", "Molly", "Mona", "Monica",
"Nancy", "Nora", "Norma", "Olga", "Pamela", "Patricia", "Paula", "Pauline", "Pearl",
"Peggy", "Penny", "Phoebe", "Phyllis", "Polly", "Priscilla", "Rachel", "Rebecca",
"Rita", "Rosa", "Rosalind", "Rose", "Rosemary", "Rowena", "Ruby", "Sally", "Samantha",
"Sarah", "Selina", "Sharon", "Sheila", "Shirley", "Sonya", "Stella", "Sue", "Susan",
"Sylvia", "Tina", "Tracy", "Ursula", "Valentine", "Valerie", "Vanessa", "Veronica",
"Victoria", "Violet", "Vivian", "Wendy", "Winnie", "Yvonne"
};
private static final String[] monikers = new String[] {
// funny and insulting (great for more brutish characters)
"Numbfoot", "Knockerface", "Wipedolt", "Doofcorn", "Headwipe", "Twerpknock", "Muckfumble",
"Knucklegoof", "Bumpbumbeef", "Bumbleknuckle", "Headpuff", "Facewimp", "Sneezeankle", "Twerpthimble",
"Doofgoof", "Snarkbumble", "Wadwipe", "Puffsnark", "Airdoof", "Headcorn", "Footmunch",
"Goofgrumble", "Twitmeat", "Beefankle", "Clodbumble", "Loafhead", "Munchwipe", "Meatgoof",
"Pinanklepuff", "Cheeseball", "Headknuckle", "Beefmeat", "Meatsnark", "Doofball", "Pufflump",
"Footgoof", "Diptwerp", "Knockskull", "Lumpface", "Twerplump", "Bonebump", "Beeffoot",
"Skullpin", "Twitlunk", "Snarkboneknuckle", "Ramblemouth", "Twitskull", "Bonedork",
"Facelump", "Foottwit", "Wadankle", "Knockermunch", "Numbsnark", "Nitnumb", "Twitwad",
"Loafknock", "Lumpsneeze", "Bumgrumble", "Boneface", "Dorkbum", "Beefclotclot", "Fingermunch",
"Knucklepuff", "Flatface", "Wimpair", "Wimpball", "Snarkpuff",
// descriptive of deeds or appearance
"the Brave", "Bloodletter", "One-Eyed", "the Black", "Scarshadow", "Shadowwalker", "Fleetfoot",
"the Short", "Pureheart", "Shadowheart", "Voidbringer", "Warbringer", "the White", "Spellslinger",
"Spellweaver", "the Hidden", "the Stout", "the Wary", "Storm Caller", "Dawnseeker", "the Aloof",
"Bloodfist", "Spellbreaker", "Warcaller", "the Untouchable", "the Vain", "Surehit", "Fireheart",
"Goblinbane", "Boarjaw", "Swordhawk", "Screamforge", "Sunsforge", "Oakenhelm", "Ironrunner",
"Coreshaker", "Forgewulf", "Sheepspear", "Elvenworm", "Lipswalker", "Sealight", "the Rotten"
};
private static List<String> usedMonikers = new ArrayList<String>();
private static List<String> usedNames;
private static String[] sourceList;
/** Generates a single name that doesn't match the specified name.
*
* @param gender String specifying the desired gender. Recognises "Male", "Female" and "Any".
* @param type String specifying the desired type. Recognises "Fantasy", "Generic" and "Any".
* @param excludeNames A list of names already being used.
* @return Returns the generated name string.
*/
public static String getRandomName(final String gender, final String type, final List<String> excludeNames) {
usedNames = excludeNames;
String name = "";
Random seed = MyRandom.getRandom();
boolean useMoniker = false;
switch (type + gender) {
case "GenericMale": { sourceList = genericMales; useMoniker = seed.nextFloat() <= 0.03f; break;}
case "GenericFemale": { sourceList = genericFemales; useMoniker = seed.nextFloat() <= 0.02f; break;}
case "FantasyMale": { sourceList = fantasyMales; useMoniker = seed.nextFloat() <= 0.10f; break;}
case "FantasyFemale": { sourceList = fantasyFemales; useMoniker = seed.nextFloat() <= 0.08f; break;}
case "AnyMale":
sourceList = getCombinedLists(genericMales, fantasyMales);
useMoniker = seed.nextFloat() <= 0.06f;
break;
case "AnyFemale":
sourceList = getCombinedLists(genericFemales, fantasyFemales);
useMoniker = seed.nextFloat() <= 0.025f;
break;
case "GenericAny":
sourceList = getCombinedLists(genericMales, genericFemales);
useMoniker = seed.nextFloat() <= 0.015f;
break;
case "FantasyAny":
sourceList = getCombinedLists(fantasyMales, fantasyFemales);
useMoniker = seed.nextFloat() <= 0.06f;
break;
default:
List<String> all = new ArrayList<String>(
genericMales.length + fantasyMales.length + genericFemales.length + fantasyFemales.length);
Collections.addAll(all, genericMales);
Collections.addAll(all, fantasyMales);
Collections.addAll(all, genericFemales);
Collections.addAll(all, fantasyFemales);
sourceList = all.toArray(new String[all.size()]);
useMoniker = seed.nextFloat() <= 0.04f;
break;
}
do {
name = sourceList[seed.nextInt(sourceList.length)];
} while (excludeNames.contains(name));
usedNames.add(name); // add base name to used names list
if (useMoniker) {
String moniker = "";
do {
moniker = monikers[seed.nextInt(monikers.length)];
} while (usedMonikers.contains(moniker));
usedMonikers.add(moniker);
name += " " + moniker;
}
return name;
}
/** Generates a specified number of random names. */
public List<String> getRandomNames(int generateAmount, final List<String> excludeNames) {
usedNames = excludeNames;
final List<String> names = new ArrayList<String>(generateAmount);
for (int i = 0; i < generateAmount; i++) {
getRandomName("Any", "Any", usedNames);
}
return names;
}
/** Generates a single name that doesn't match any names in the supplied list. */
public static String getRandomName(final String gender, final String type, final String notNamed) {
List<String> exclude = new ArrayList<String>(1);
exclude.add(notNamed);
return getRandomName(gender, type, exclude);
}
private final static String[] getCombinedLists(String[] listOne, String[] listTwo) {
String[] joined = ArrayUtils.addAll(listOne,listTwo);
return joined;
}
}