package entity; import java.util.LinkedHashMap; import java.util.Map; import core.Main; public class ClassEntity extends DNDEntity { String alignmentRestriction; String[] bonusLanguages; String hitDie; String[] baseAttackBonusString; int[] baseAttackBonus; int[] fortSave; int[] reflexSave; int[] willSave; String[][] special; int[][] spellsPerDay; int[][] spellsKnown; String[] classSkills; String skillPointsFirstLevel; String skillPointsPerLevel; String[] bonusFeats; String classAbilities; String druidCompanion; String paladinMount; String familiar; String exclass; boolean caster; // TODO Needs a lot of additional additions based on other object types, // only baseline is here for functionality public ClassEntity(LinkedHashMap<String, String> input) { this.TYPE = DNDEntity.type.CLASS; passedData = input; for (Map.Entry<String, String> entry : input.entrySet()) { String field = entry.getKey(); String value = entry.getValue(); switch (field) { case "NAME": this.name = value; break; case "ALIGNMENTRESTRICTIONS": this.alignmentRestriction = value; break; case "BONUSLANGUAGE": this.bonusLanguages = value.split(", "); break; case "HITDIE": this.hitDie = value.substring(0, value.length() - 1); break; case "BASEATTACKBONUS": this.baseAttackBonusString = value.split(", "); baseAttackBonus = new int[baseAttackBonusString.length]; for (int i = 0; i < baseAttackBonusString.length; i++) { int index = baseAttackBonusString[i].indexOf('/'); if (index == -1) baseAttackBonus[i] = Integer.parseInt(baseAttackBonusString[i]); else baseAttackBonus[i] = Integer.parseInt(baseAttackBonusString[i].substring(0, index)); } break; case "FORTSAVE": String[] fortSaveList = value.split(", "); this.fortSave = new int[fortSaveList.length]; for (int i = 0; i < fortSaveList.length; i++) { this.fortSave[i] = Integer.parseInt(fortSaveList[i]); } break; case "REFLEXSAVE": String[] reflexSaveList = value.split(", "); this.reflexSave = new int[reflexSaveList.length]; for (int i = 0; i < reflexSaveList.length; i++) { this.reflexSave[i] = Integer.parseInt(reflexSaveList[i]); } break; case "WILLSAVE": String[] willSaveList = value.split(", "); this.willSave = new int[willSaveList.length]; for (int i = 0; i < willSaveList.length; i++) { this.willSave[i] = Integer.parseInt(willSaveList[i]); } break; case "SPECIAL": String[] perLevel = value.split(" \\| "); this.special = new String[perLevel.length][20]; for(int i = 0; i < perLevel.length; i++){ perLevel[i].replace("|", ""); perLevel[i] = perLevel[i].trim(); if(perLevel[i].equalsIgnoreCase("|")) perLevel[i] = ""; this.special[i] = perLevel[i].split(", "); } break; case "SPELLSPERDAY": //System.out.println("Spells per day: " + this.name); boolean arrayInitialized = false; String[] charLevel = value.split("\n"); for (int i = 0; i < charLevel.length; i++){ charLevel[i] = charLevel[i].trim(); String[] spellLevelSplit = charLevel[i].split(", "); if(!arrayInitialized){ this.spellsPerDay = new int[charLevel.length][spellLevelSplit.length]; arrayInitialized = true; } for(int j = 0; j < spellLevelSplit.length; j++){ if(spellLevelSplit[j].equalsIgnoreCase("-")){ spellLevelSplit[j] = "-1"; } this.spellsPerDay[i][j] = Integer.parseInt(spellLevelSplit[j]); } } break; case "SPELLSKNOWN": //System.out.println("Spells per day: " + this.name); boolean arrayInitialized1 = false; String[] charLevel1 = value.split("\n"); for (int i = 0; i < charLevel1.length; i++){ charLevel1[i] = charLevel1[i].trim(); String[] spellLevelSplit = charLevel1[i].split(", "); if(!arrayInitialized1){ this.spellsKnown = new int[charLevel1.length][spellLevelSplit.length]; arrayInitialized1 = true; } for(int j = 0; j < spellLevelSplit.length; j++){ if(spellLevelSplit[j].equalsIgnoreCase("-")){ spellLevelSplit[j] = "-1"; } this.spellsKnown[i][j] = Integer.parseInt(spellLevelSplit[j]); } } break; case "SKILLPOINTSFIRST": this.skillPointsFirstLevel = value; break; case "SKILLPOINTS": this.skillPointsPerLevel = value; break; case "BONUSFEATS": // TODO replace with proper feat enitity objects this.bonusFeats = value.split(" \\| "); break; case "CLASSABILITIES": this.classAbilities = value; break; case "CLASSSKILLS": this.classSkills = value.split("\n"); break; case "PALADINMOUNT": this.paladinMount = value; break; case "DRUIDCOMPANION": this.druidCompanion = value; break; case "WIZARDFAMILIAR": this.familiar = value; break; case "EXCLASS": this.exclass = value; break; default: break; } caster = (spellsPerDay != null || spellsKnown != null); } } @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, 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.classAbilities != null && this.classAbilities.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.classSkills != null){ for(int i = 0; i < this.classSkills.length; i++){ if(this.classSkills[i].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.special != null // && this.special.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 String getAlignmentRestriction() { return alignmentRestriction; } public void setAlignmentRestriction(String alignmentRestriction) { this.alignmentRestriction = alignmentRestriction; } public String[] getBonusLanguages() { return bonusLanguages; } public void setBonusLanguages(String[] bonusLanguages) { this.bonusLanguages = bonusLanguages; } public String getHitDie() { return hitDie; } public void setHitDie(String hitDie) { this.hitDie = hitDie; } public String[] getBaseAttackBonusString() { return baseAttackBonusString; } public void setBaseAttackBonusString(String[] baseAttackBonus) { this.baseAttackBonusString = baseAttackBonus; } public int[] getBaseAttackBonus() { return baseAttackBonus; } public void setBaseAttackBonus(int[] b) { baseAttackBonus = b; } public int[] getFortSave() { return fortSave; } public void setFortSave(int[] fortSave) { this.fortSave = fortSave; } public int[] getReflexSave() { return reflexSave; } public void setReflexSave(int[] reflexSave) { this.reflexSave = reflexSave; } public int[] getWillSave() { return willSave; } public void setWillSave(int[] willSave) { this.willSave = willSave; } public String[][] getSpecial() { return special; } public void setSpecial(String[][] special) { this.special = special; } public int[][] getSpellsPerDay() { return spellsPerDay; } public void setSpellsPerDay(int[][] spellsPerDay) { this.spellsPerDay = spellsPerDay; } public int[][] getSpellsKnown() { return spellsKnown; } public void setSpellsKnown(int[][] spellsKnown) { this.spellsKnown = spellsKnown; } public String[] getClassSkills() { return classSkills; } public void setClassSkills(String[] classSkills) { this.classSkills = classSkills; } public String getSkillPointsFirstLevel() { return skillPointsFirstLevel; } public void setSkillPointsFirstLevel(String skillPointsFirstLevel) { this.skillPointsFirstLevel = skillPointsFirstLevel; } public String getSkillPointsPerLevel() { return skillPointsPerLevel; } public void setSkillPointsPerLevel(String skillPointsPerLevel) { this.skillPointsPerLevel = skillPointsPerLevel; } public String[] getBonusFeats() { return bonusFeats; } public void setBonusFeats(String[] bonusFeats) { this.bonusFeats = bonusFeats; } public String getClassAbilities() { return classAbilities; } public void setClassAbilities(String classAbilities) { this.classAbilities = classAbilities; } public String getDruidCompanion() { return druidCompanion; } public void setDruidCompanion(String druidCompanion) { this.druidCompanion = druidCompanion; } public String getPaladinMount() { return paladinMount; } public void setPaladinMount(String paladinMount) { this.paladinMount = paladinMount; } public String getFamiliar() { return familiar; } public void setFamiliar(String familiar) { this.familiar = familiar; } public String getExclass() { return exclass; } public void setExclass(String exclass) { this.exclass = exclass; } public boolean isCaster() { return caster; } public void setCaster(boolean caster) { this.caster = caster; } @Override public String saveCustomContent() { String output = ""; return output; } }