/* * This file is part of MyPet * * Copyright © 2011-2016 Keyle * MyPet is licensed under the GNU Lesser General Public License. * * MyPet is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MyPet is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.Keyle.MyPet.skill.skilltreeloader; import de.Keyle.MyPet.MyPetApi; import de.Keyle.MyPet.api.entity.MyPetType; import de.Keyle.MyPet.api.skill.SkillInfo; import de.Keyle.MyPet.api.skill.SkillsInfo; import de.Keyle.MyPet.api.skill.skilltree.SkillTree; import de.Keyle.MyPet.api.skill.skilltree.SkillTreeLevel; import de.Keyle.MyPet.api.skill.skilltree.SkillTreeMobType; import de.Keyle.MyPet.api.skill.skilltreeloader.SkillTreeLoader; import de.Keyle.MyPet.api.util.configuration.ConfigurationNBT; import de.keyle.knbt.*; import java.io.File; import java.util.ArrayList; import java.util.List; public class SkillTreeLoaderNBT extends SkillTreeLoader { public static SkillTreeLoaderNBT getSkilltreeLoader() { return new SkillTreeLoaderNBT(); } private SkillTreeLoaderNBT() { } public void loadSkillTrees(String configPath, List<String> mobtypes) { ConfigurationNBT skilltreeConfig; File skillFile; for (String mobType : mobtypes) { skillFile = new File(configPath + File.separator + mobType.toLowerCase() + ".st"); SkillTreeMobType skillTreeMobType; if (mobType.equalsIgnoreCase("default")) { skillTreeMobType = SkillTreeMobType.DEFAULT; } else { skillTreeMobType = SkillTreeMobType.getMobTypeByName(mobType); } if (!skillFile.exists()) { continue; } skilltreeConfig = new ConfigurationNBT(skillFile); if (skilltreeConfig.load()) { try { loadSkillTree(skilltreeConfig, skillTreeMobType); } catch (Exception e) { MyPetApi.getLogger().warning("Error while loading skilltrees from: " + mobType.toLowerCase() + ".st"); e.printStackTrace(); } } skillTreeMobType.cleanupPlaces(); } } protected void loadSkillTree(ConfigurationNBT nbtConfiguration, SkillTreeMobType skillTreeMobType) { TagList skilltreeList = nbtConfiguration.getNBTCompound().getAs("Skilltrees", TagList.class); for (int i_skilltree = 0; i_skilltree < skilltreeList.size(); i_skilltree++) { TagCompound skilltreeCompound = skilltreeList.getTagAs(i_skilltree, TagCompound.class); SkillTree skillTree = new SkillTree(skilltreeCompound.getAs("Name", TagString.class).getStringData()); int place = skilltreeCompound.getAs("Place", TagInt.class).getIntData(); if (skilltreeCompound.getCompoundData().containsKey("Inherits")) { skillTree.setInheritance(skilltreeCompound.getAs("Inherits", TagString.class).getStringData()); } if (skilltreeCompound.getCompoundData().containsKey("Permission")) { skillTree.setPermission(skilltreeCompound.getAs("Permission", TagString.class).getStringData()); } if (skilltreeCompound.getCompoundData().containsKey("Display")) { skillTree.setDisplayName(skilltreeCompound.getAs("Display", TagString.class).getStringData()); } if (skilltreeCompound.getCompoundData().containsKey("MaxLevel")) { skillTree.setMaxLevel(skilltreeCompound.getAs("MaxLevel", TagInt.class).getIntData()); } if (skilltreeCompound.getCompoundData().containsKey("RequiredLevel")) { skillTree.setRequiredLevel(skilltreeCompound.getAs("RequiredLevel", TagInt.class).getIntData()); } if (skilltreeCompound.getCompoundData().containsKey("IconItem")) { skillTree.setIconItem(skilltreeCompound.getAs("IconItem", TagCompound.class)); } if (skilltreeCompound.getCompoundData().containsKey("Description")) { TagList descriptionTagList = skilltreeCompound.getAs("Description", TagList.class); for (int i = 0; i < descriptionTagList.size(); i++) { skillTree.addDescriptionLine(descriptionTagList.getTagAs(i, TagString.class).getStringData()); } } if (skilltreeCompound.getCompoundData().containsKey("Level")) { TagList levelList = skilltreeCompound.getAs("Level", TagList.class); for (int i_level = 0; i_level < levelList.size(); i_level++) { TagCompound levelCompound = levelList.getTag(i_level); int thisLevel; if (levelCompound.containsKeyAs("Level", TagInt.class)) { thisLevel = levelCompound.getAs("Level", TagInt.class).getIntData(); } else { thisLevel = levelCompound.getAs("Level", TagShort.class).getShortData(); } SkillTreeLevel newLevel = skillTree.addLevel(thisLevel); if (levelCompound.getCompoundData().containsKey("Message")) { String message = levelCompound.getAs("Message", TagString.class).getStringData(); newLevel.setLevelupMessage(message); } TagList skillList = levelCompound.get("Skills"); for (int i_skill = 0; i_skill < skillList.size(); i_skill++) { TagCompound skillCompound = skillList.getTag(i_skill); String skillName = skillCompound.getAs("Name", TagString.class).getStringData(); if (SkillsInfo.getSkillInfoClass(skillName) != null) { TagCompound skillPropertyCompound = skillCompound.get("Properties"); SkillInfo skill = SkillsInfo.getNewSkillInfoInstance(skillName); if (skill != null) { skill.setProperties(skillPropertyCompound); skill.setDefaultProperties(); skillTree.addSkillToLevel(thisLevel, skill); } } } } } skillTreeMobType.addSkillTree(skillTree, place); } } public List<String> saveSkillTrees(String configPath, String[] mobtypes) { ConfigurationNBT nbtConfig; File skillFile; List<String> savedPetTypes = new ArrayList<>(); for (String petType : mobtypes) { skillFile = new File(configPath + File.separator + petType.toLowerCase() + ".st"); nbtConfig = new ConfigurationNBT(skillFile); if (saveSkillTree(nbtConfig, petType)) { savedPetTypes.add(petType); } } return savedPetTypes; } protected boolean saveSkillTree(ConfigurationNBT nbtConfiguration, String petTypeName) { boolean saveMobType = false; SkillTreeMobType mobType; if (petTypeName.equalsIgnoreCase("default")) { mobType = SkillTreeMobType.DEFAULT; } else if (SkillTreeMobType.hasMobType(MyPetType.byName(petTypeName, false))) { mobType = SkillTreeMobType.getMobTypeByName(petTypeName); } else { return false; } if (mobType.getSkillTreeNames().size() != 0) { mobType.cleanupPlaces(); List<TagCompound> skilltreeList = new ArrayList<>(); for (SkillTree skillTree : mobType.getSkillTrees()) { TagCompound skilltreeCompound = new TagCompound(); skilltreeCompound.getCompoundData().put("Name", new TagString(skillTree.getName())); skilltreeCompound.getCompoundData().put("Place", new TagInt(mobType.getSkillTreePlace(skillTree))); if (skillTree.hasInheritance()) { skilltreeCompound.getCompoundData().put("Inherits", new TagString(skillTree.getInheritance())); } if (skillTree.hasCustomPermissions()) { skilltreeCompound.getCompoundData().put("Permission", new TagString(skillTree.getPermission())); } if (skillTree.hasDisplayName()) { skilltreeCompound.getCompoundData().put("Display", new TagString(skillTree.getDisplayName())); } if (skillTree.getMaxLevel() > 0) { skilltreeCompound.getCompoundData().put("MaxLevel", new TagInt(skillTree.getMaxLevel())); } if (skillTree.getRequiredLevel() > 1) { skilltreeCompound.getCompoundData().put("RequiredLevel", new TagInt(skillTree.getRequiredLevel())); } if (skillTree.getDescription().size() > 0) { List<TagString> descriptionTagList = new ArrayList<>(); for (String line : skillTree.getDescription()) { descriptionTagList.add(new TagString(line)); } skilltreeCompound.getCompoundData().put("Description", new TagList(descriptionTagList)); } skilltreeCompound.getCompoundData().put("IconItem", skillTree.getIconItem()); List<TagCompound> levelList = new ArrayList<>(); for (SkillTreeLevel level : skillTree.getLevelList()) { TagCompound levelCompound = new TagCompound(); levelCompound.getCompoundData().put("Level", new TagInt(level.getLevel())); if (level.hasLevelupMessage()) { levelCompound.getCompoundData().put("Message", new TagString(level.getLevelupMessage())); } List<TagCompound> skillList = new ArrayList<>(); for (SkillInfo skill : skillTree.getLevel(level.getLevel()).getSkills()) { if (!skill.isAddedByInheritance()) { TagCompound skillCompound = new TagCompound(); skillCompound.getCompoundData().put("Name", new TagString(skill.getName())); skillCompound.getCompoundData().put("Properties", skill.getProperties()); skillList.add(skillCompound); } } levelCompound.getCompoundData().put("Skills", new TagList(skillList)); levelList.add(levelCompound); } skilltreeCompound.getCompoundData().put("Level", new TagList(levelList)); skilltreeList.add(skilltreeCompound); } nbtConfiguration.getNBTCompound().getCompoundData().put("Skilltrees", new TagList(skilltreeList)); if (mobType.getSkillTreeNames().size() > 0) { nbtConfiguration.save(); saveMobType = true; } } return saveMobType; } }