package entity; import java.util.LinkedHashMap; import java.util.Map; import core.Main; public class MonsterEntity extends DNDEntity { String type; String hitDie; int initiative; String Speed; String armorClass; String grapple; String attack; String fullAttack; String reach; String[] specialAttacks; String[] specialQualities; int[] saves; int[] abilities; String[] skills; String[] feats; String environment; String organization; int challengeRating; String treasure; String alignment; String advancement; int levelAdjustment; public MonsterEntity(LinkedHashMap<String, String> input){ this.TYPE = DNDEntity.type.MONSTER; 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 "HITDICE": this.hitDie = value; break; case "INITIATIVE": this.initiative = Integer.parseInt(value); break; case "SPEED": this.Speed = value; break; case "TYPE": this.type = value; break; case "ARMORCLASS": this.armorClass = value; break; case "DESCRIPTION": this.description = value; break; case "GRAPPLE": this.grapple = value; break; case "CHALLENGERATING": try{ this.challengeRating = Integer.parseInt(value); } catch(NumberFormatException e){ this.challengeRating = 0; } break; case "ATTACK": this.attack = value; break; case "FULLATTACK": this.fullAttack = value; break; case "REACH": this.reach = value; break; case "SPECIALATTACKS": this.specialAttacks = value.split(", "); break; case "SPECIALQUALITIES": this.specialQualities = value.split(", "); break; case "SAVES": String[] temp = value.split(", "); this.saves = new int[temp.length]; for(int i = 0; i < temp.length; i++){ temp[i] = temp[i].replaceAll("[\\D|^-]", ""); try{ this.saves[i] = Integer.parseInt(temp[i]); } catch(NumberFormatException e){ } } break; case "ABILITIES": String[] temp1 = value.split(", "); this.abilities = new int[temp1.length]; for(int i = 0; i < temp1.length; i++){ temp1[i] = temp1[i].replaceAll("[\\D]", ""); try{ this.abilities[i] = Integer.parseInt(temp1[i]); } catch(NumberFormatException e){ } } break; case "SKILLS": this.skills = value.split(", "); break; case "FEATS": this.feats = value.split(", "); break; case "ENVIRONMENT": this.environment = value; break; case "ORGANIZATION": this.organization = value; break; case "TREASURE": this.treasure = value; break; case "ALIGNMENT": this.alignment = value; break; case "ADVANCEMENT": this.advancement = value; break; case "LEVELDAJUSTMENT": if(value.contentEquals("-")) this.levelAdjustment = 0; else this.levelAdjustment = Integer.parseInt(value); 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, 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.alignment != null && this.alignment.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.environment != null && this.environment.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.organization != null && this.organization.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.skills != null){ for(int i = 0; i < this.skills.length; i++){ if(this.skills[i].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.feats != null){ for(int i = 0; i < this.feats.length; i++){ if(this.feats[i].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; } } } } @Override public String saveCustomContent() { String output = ""; return output; } }