package entity; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; import org.apache.commons.lang3.text.WordUtils; import core.Main; public class RaceEntity extends DNDEntity{ private final static int STRENGTH = 0; private final static int DEXTERITY = 1; private final static int CONSTITUTION = 2; private final static int INTELLIGENCE = 3; private final static int WISDOM = 4; private final static int CHARISMA = 5; private final static int SIZE_FINE = 0; private final static int SIZE_DIMINUTIVE = 1; private final static int SIZE_TINY = 2; private final static int SIZE_SMALL = 3; private final static int SIZE_MEDIUM = 4; private final static int SIZE_LARGE = 5; private final static int SIZE_HUGE = 6; private final static int SIZE_GARGANTUAN = 7; private final static int SIZE_COLOSSAL = 8; private int[] abilityAdj = new int[6]; private String favoredClass; private String personality; private String physicalDescription; private String relations; private String alignment; private String[] lands; private String religion; private String[] specialAbilities; private String[] autoLanguages; private String[] bonusLanguages; private String[] racialBonuses; // i.e. skill check adj's, extra feats private String[] names; private int size; private int speed; // in feet public RaceEntity(LinkedHashMap<String, String> input){ this.TYPE = DNDEntity.type.RACE; passedData = input; ArrayList<String> racialBonuses = new ArrayList<String>(); for (Map.Entry<String, String> entry : input.entrySet()){ String field = entry.getKey(); String value = entry.getValue(); switch(field){ case "NAME": String tempN = new String(value.split("\\[")[0].trim()); tempN = WordUtils.capitalize(tempN.toLowerCase()); tempN = WordUtils.capitalize(tempN, '(', '['); this.name = tempN; break; case "DESCRIPTION": this.description = value; break; case "ABILITYADJ": String[] temp = value.split(", "); for(int i = 0; i < temp.length; i++){ this.abilityAdj[i] = Integer.parseInt(temp[i]); } break; case "FAVCLASS": this.favoredClass = value; break; case "SIZE": String size = value.split(":")[0]; if(size.equalsIgnoreCase("FINE")) this.size = SIZE_FINE; else if(size.equalsIgnoreCase("DIMUNITIVE")) this.size = SIZE_DIMINUTIVE; else if(size.equalsIgnoreCase("TINY")) this.size = SIZE_TINY; else if(size.equalsIgnoreCase("SMALL")) this.size = SIZE_SMALL; else if(size.equalsIgnoreCase("MEDIUM")) this.size = SIZE_MEDIUM; else if(size.equalsIgnoreCase("LARGE")) this.size = SIZE_LARGE; else if(size.equalsIgnoreCase("HUGE")) this.size = SIZE_HUGE; else if(size.equalsIgnoreCase("GARGANTUAN")) this.size = SIZE_GARGANTUAN; else if(size.equalsIgnoreCase("COLOSSAL")) this.size = SIZE_COLOSSAL; break; case "SPECIALABILITIES": this.specialAbilities = value.split(", "); break; case "SPEED": this.speed = Integer.parseInt(value.replaceAll("[\\D]", "")); break; case "TRAITS": String[] temp1 = value.split("\n"); for(int i = 0; i < temp1.length; i++){ racialBonuses.add(temp1[i].trim()); } this.racialBonuses = racialBonuses.toArray(temp1); break; case "SKILLCHECKADJ": String[] temp2 = value.split("\n"); for(int i = 0; i < temp2.length; i++){ racialBonuses.add(temp2[i].trim()); } this.racialBonuses = racialBonuses.toArray(temp2); break; case "AUTOMATICLANGUAGES": this.autoLanguages = value.split(", "); for(int i = 0; i < this.autoLanguages.length; i++){ if(!this.autoLanguages[i].equalsIgnoreCase("common")) Main.gameState.languages.put(autoLanguages[i],autoLanguages[i]); } break; case "BONUSLANGUAGES": this.bonusLanguages = value.split(", "); if(!this.bonusLanguages[0].startsWith("Any (other than")) for(int i = 0; i < this.bonusLanguages.length; i++) Main.gameState.languages.put(bonusLanguages[i],bonusLanguages[i]); break; default: break; } } } @Override public void search(String searchString, Thread runningThread) throws InterruptedException { if(this.name != null && this.name.toLowerCase().contains(searchString)){ Main.gameState.searchResultsLock.acquire(); //System.out.println("Lock aquired, adding " + this.name + " to results list."); Main.gameState.searchResults.put(this.name + "(" + WordUtils.capitalize(this.TYPE.toString().toLowerCase()) + ")", this); Main.gameState.searchResultsLock.release(); //System.out.println("Lock released."); return; } if(this.description != null && this.description.toLowerCase().contains(searchString)){ Main.gameState.searchResultsLock.acquire(); //System.out.println("Lock aquired, adding " + this.name + " to results list."); Main.gameState.searchResults.put(this.name, this); Main.gameState.searchResultsLock.release(); //System.out.println("Lock released."); return; } if(this.favoredClass != null && this.favoredClass.toLowerCase().contains(searchString)){ Main.gameState.searchResultsLock.acquire(); //System.out.println("Lock aquired, adding " + this.name + " to results list."); Main.gameState.searchResults.put(this.name, this); Main.gameState.searchResultsLock.release(); //System.out.println("Lock released."); return; } } public int[] getAbilityAdj() { return abilityAdj; } public void setAbilityAdj(int[] abilityAdj) { this.abilityAdj = abilityAdj; } public String getFavoredClass() { return favoredClass; } public void setFavoredClass(String favoredClass) { this.favoredClass = favoredClass; } public String getPersonality() { return personality; } public void setPersonality(String personality) { this.personality = personality; } public String getPhysicalDescription() { return physicalDescription; } public void setPhysicalDescription(String physicalDescription) { this.physicalDescription = physicalDescription; } public String getRelations() { return relations; } public void setRelations(String relations) { this.relations = relations; } public String getAlignment() { return alignment; } public void setAlignment(String alignment) { this.alignment = alignment; } public String[] getLands() { return lands; } public void setLands(String[] lands) { this.lands = lands; } public String getReligion() { return religion; } public void setReligion(String religion) { this.religion = religion; } public String[] getSpecialAbilities() { return specialAbilities; } public void setSpecialAbilities(String[] specialAbilities) { this.specialAbilities = specialAbilities; } public String[] getAutoLanguages() { return autoLanguages; } public void setAutoLanguages(String[] autoLanguages) { this.autoLanguages = autoLanguages; } public String[] getBonusLanguages() { return bonusLanguages; } public void setBonusLanguages(String[] bonusLanguages) { this.bonusLanguages = bonusLanguages; } public String[] getRacialBonuses() { return racialBonuses; } public void setRacialBonuses(String[] racialBonuses) { this.racialBonuses = racialBonuses; } public String[] getNames() { return names; } public void setNames(String[] names) { this.names = names; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getSpeed() { return speed; } public void setSpeed(int speed) { this.speed = speed; } @Override public String saveCustomContent() { String output = ""; return output; } }