package com.bioxx.tfc2.core; import java.util.HashMap; import java.util.Map; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.common.network.ByteBufUtils; import com.bioxx.tfc2.Core; import com.bioxx.tfc2.api.SkillsManager; import com.bioxx.tfc2.api.SkillsManager.Skill; public class PlayerSkillData { private Map<Skill, Float> skillsMap; private EntityPlayer player; public PlayerSkillData(EntityPlayer p) { player = p; skillsMap = new HashMap<Skill, Float>(); for(Skill s : SkillsManager.instance.getSkillsArray()) { setSkill(s.skillName, 0); } } public void increaseSkill(String skillName) { increaseSkill(skillName, 1.0f); } public void increaseSkill(String skillName, float externalMultiplier) { Skill sk = SkillsManager.instance.getSkill(skillName); float incAmount = (sk.skillMultiplier*sk.skillFlat)*externalMultiplier; float curAmount = getSkill(skillName); setSkill(skillName, curAmount+incAmount); } public void setSkill(String skillName, float amount) { Skill sk = SkillsManager.instance.getSkill(skillName); if(sk != null) skillsMap.put(sk, amount); } public float getSkill(String skillName) { Skill sk = SkillsManager.instance.getSkill(skillName); if(sk != null) return skillsMap.get(sk); else return 0f; } public SkillRank getSkillRank(String skillName) { float raw = getSkill(skillName); if(raw < 1000) { return SkillRank.Novice; } else if(raw < 5000) { return SkillRank.Adept; } else if(raw < 10000) { return SkillRank.Expert; } else { return SkillRank.Master; } } public float getPercToNextRank(String skillName) { float raw = getSkill(skillName); if(raw < 1000) { return raw/1000f; } else if(raw < 5000) { return (raw-1000f)/1000f; } else if(raw < 10000) { return (raw-5000f)/5000f; } else { return 1.0f; } } public void readNBT(NBTTagCompound nbt) { if (nbt.hasKey("skillCompound")) { NBTTagCompound skillCompound = nbt.getCompoundTag("skillCompound"); for(String skill : skillCompound.getKeySet()) { setSkill(skill, skillCompound.getInteger(skill)); } } } /** * Writes food stats to an NBT object. */ public void writeNBT(NBTTagCompound nbt) { NBTTagCompound skillCompound = new NBTTagCompound(); Object[] keys = skillsMap.keySet().toArray(); for(Object o : keys) { Skill k = (Skill)o; float f = skillsMap.get(k); skillCompound.setFloat(k.skillName, f); } nbt.setTag("skillCompound", skillCompound); } public void toOutBuffer(ByteBuf buffer) { Object[] keys = skillsMap.keySet().toArray(); buffer.writeInt(keys.length); for(Object o : keys) { Skill k = (Skill)o; float f = skillsMap.get(k); ByteBufUtils.writeUTF8String(buffer, k.skillName); buffer.writeFloat(f); } } public static enum SkillRank { Novice("gui.skill.novice"), Adept("gui.skill.adept"), Expert("gui.skill.expert"), Master("gui.skill.master"); String name; private SkillRank(String local) { name = local; } public String getUnlocalizedName() { return name; } public String getLocalizedName() { return Core.translate(name); } } }