package disparity.rpg.being; import java.io.FileNotFoundException; import java.io.FileReader; import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONTokener; import disparity.rpg.items.Equippable; import disparity.rpg.items.Quality; import disparity.rpg.items.Weapon; import disparity.rpg.skills.defensiveSkills.HeavyArmor; import disparity.rpg.skills.defensiveSkills.LightArmor; import disparity.rpg.skills.offensiveSkills.Archery; import disparity.rpg.skills.offensiveSkills.Magic; import disparity.rpg.skills.offensiveSkills.OneHanded; import disparity.rpg.skills.offensiveSkills.TwoHanded; public class JSONMonster{ public static Monster readMonster(String monsterName){ Monster monster = new Monster(); try { JSONObject jsonFile = new JSONObject(new JSONTokener(new FileReader("src/disparity/rpg/JSONfiles/monsters.JSON"))); //Create temp Var of Monster for reference JSONObject jsonMonster = (JSONObject) jsonFile.get(monsterName); //Create temp Var of Monster's Objects for reference JSONObject jsonHelm = (JSONObject) jsonMonster.get("helm"); JSONObject jsonChest = (JSONObject) jsonMonster.get("chest"); JSONObject jsonLegs = (JSONObject) jsonMonster.get("legs"); JSONObject jsonBoots = (JSONObject) jsonMonster.get("boots"); JSONObject jsonWep = (JSONObject) jsonMonster.get("wep"); JSONArray jsonSkills = (JSONArray) jsonMonster.get("skills"); //Assign Name monster.name = (String) jsonMonster.get("name"); //Assign Armor Values monster.helm.setName(jsonHelm.getString("name")); monster.helm.setBonus(jsonHelm.getInt("base_def")); setItemSkill(jsonHelm.getString("skill"), monster.helm); monster.chest.setName(jsonChest.getString("name")); monster.chest.setBonus(jsonChest.getInt("base_def")); setItemSkill(jsonChest.getString("skill"), monster.chest); monster.legs.setName(jsonLegs.getString("name")); monster.legs.setBonus(jsonLegs.getInt("base_def")); setItemSkill(jsonLegs.getString("skill"), monster.legs); monster.boots.setName(jsonBoots.getString("name")); monster.boots.setBonus(jsonBoots.getInt("base_def")); setItemSkill(jsonBoots.getString("skill"), monster.boots); //Assign Stats monster.str = jsonMonster.getInt("str"); monster.agi = jsonMonster.getInt("agi"); monster.wis = jsonMonster.getInt("wis"); monster.con = jsonMonster.getInt("con"); //Assign Skills for(int i=0;i>jsonSkills.length();i++){ JSONObject skill = (JSONObject) (((JSONObject) jsonSkills.get(i))).get("skill"); switch((String) skill.getString("name")){ //Assign Offensive Skills case "oneHanded": monster.oneHand.setLvl(skill.getInt("lvl")); continue; case "twoHanded": monster.twoHand.setLvl(skill.getInt("lvl")); continue; case "arc": monster.arc.setLvl(skill.getInt("lvl")); continue; case "magic": monster.magic.setLvl(skill.getInt("lvl")); continue; //Assign Defensive Skills case "hArmor": monster.hArmor.setLvl(skill.getInt("lvl")); continue; case "lArmor": monster.lArmor.setLvl(skill.getInt("lvl")); continue; default: continue; } } String jsonWepName = jsonWep.getString("name"); int jsonWepBaseDam = jsonWep.getInt("base_dam"); Quality jsonWepQuality = Quality.stringToQuality(jsonWep.getString("quality")); monster.wep = new Weapon(jsonWepName, jsonWepQuality, jsonWepBaseDam); }catch(FileNotFoundException e){ e.printStackTrace(); } monster.race.setName(monster.name); //Normal Being calculations: monster.hp = monster.tHP; monster.mp = monster.tMP; monster.dodge = monster.agi / 50.0; monster.lvl = 1; return monster; } public static void main(String[] args){ Monster m = new Monster(); m = readMonster("Goblin"); System.out.println(m.wep.getBaseDmg()); } static void setItemSkill(String skillName, Equippable item){ /* try { Class skillClass = Class.forName(s); Constructor c = skillClass.getConstructor(); i.setSkill((Skill) c.newInstance()); } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } For future use? */ //TODO reimplement without **magic Strings** switch(skillName.toUpperCase()){ case "LARMOR": item.setSkill(new LightArmor()); break; case "HARMOR": item.setSkill(new HeavyArmor()); break; case "ARCHERY": item.setSkill(new Archery()); break; case "ONEHANDED": item.setSkill(new OneHanded()); break; case "TWOHANDED": item.setSkill(new TwoHanded()); break; case "MAGIC": item.setSkill(new Magic()); break; } } }