I am getting a NPE when trying to retrieve files from config. I get it in initSkills aswell as in initAttribute, tried using the direct addres as a String and remains the same. Don't know what's causing it. I am using Bukkit 1.7.9. This is my tPlayer.java:
package io.github.toxicbyte.trpg;
import java.util.HashMap;
import me.confuser.barapi.BarAPI;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.EntityEffect;
import org.bukkit.Sound;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
public class tPlayer
{
private Player p;
private HashMap<Skill, Integer> skills;
private HashMap<Attribute, Integer> att;
private Race race;
private Level lvl;
private TRPG plugin;
private int health;
private int maxHealth;
private double mana;
private double maxMana;
private double maxStamina;
private double stamina;
private int ap;
private int sp;
private float walkSpeed;
public tPlayer(Player p)
{
this.p=p;
this.plugin = TRPG.getInstance();
skills = new HashMap();
att = new HashMap();
initSkills();
initRace();
initExp();
initAttributes();
initHealth();
initStamina();
initMana();
p.setWalkSpeed(this.walkSpeed);
}
private void initAttributes()
{
for(Attribute a : Attribute.getAll())
{
this.att.put(a, this.plugin.getConfig().getInt("Players." + this.p.getUniqueId() + ".attributes." +a.getName()));
}
this.ap = this.plugin.getConfig().getInt("Players." + this.p.getUniqueId() + ".ap");
}
private void initSkills()
{
for(Skill s : Skill.getAll())
{
this.skills.put(s, Integer.valueOf(this.plugin.getConfig().getInt("Players." + this.p.getUniqueId() + ".skills." + s.getName())));
}
this.sp = this.plugin.getConfig().getInt("Players." + this.p.getUniqueId() + ".sp");
}
private void initRace()
{
this.race = Race.getByName(this.plugin.getConfig().getString("Player." + this.p.getUniqueId() + ".race"));
}
private void initExp()
{
this.lvl = new Level(this.plugin.getConfig().getInt("Players." + this.p.getUniqueId() + ".xp"));
}
private void initHealth()
{
this.health = this.plugin.getConfig().getInt("Players." + this.p.getUniqueId() + ".health");
this.maxHealth = (this.plugin.getConfig().getInt("Players." + this.p.getUniqueId() + ".attributes.endurance") * 20);
}
private void initStamina()
{
this.stamina = this.plugin.getConfig().getDouble("Players." + this.p.getUniqueId() + ".stamina");
this.maxStamina = (this.plugin.getConfig().getInt("Players." + this.p.getUniqueId() + ".attributes.agility") * 20);
this.walkSpeed = ((float)this.plugin.getConfig().getDouble("Players." + this.p.getUniqueId() + ".walkSpeed"));
}
private void initMana()
{
this.mana = this.plugin.getConfig().getDouble("Players." + this.p.getUniqueId() + ".mana");
this.maxMana = (this.plugin.getConfig().getInt("attributes.wisdom") * 20);
}
public int getAttributePoints()
{
return this.ap;
}
public int getSkillPoints()
{
return this.sp;
}
public Player getPlayer()
{
return this.p;
}
public Race getRace()
{
return this.race;
}
public Level getLevel()
{
return this.lvl;
}
public int getSkill(Skill s)
{
return ((Integer)this.skills.get(s)).intValue();
}
public int getAttribute(Attribute a)
{
return ((Integer)this.att.get(a)).intValue();
}
public int getMaxHealth()
{
return this.maxHealth;
}
public int getHealth()
{
return this.health;
}
public double getStamina()
{
return this.stamina;
}
public double getMaxStamina()
{
return this.maxStamina;
}
public double getMana()
{
return this.mana;
}
public double getMaxMana()
{
return this.maxMana;
}
public double getWalkSpeed()
{
return this.walkSpeed;
}
public void setWalkSpeed(float speed)
{
this.walkSpeed = speed;
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".walkSpeed", Float.valueOf(speed));
this.plugin.saveConfig();
this.p.setWalkSpeed(speed);
}
public void setRace(Race r)
{
this.race = r;
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".", r.getName());
this.plugin.saveConfig();
}
public void setLevel(Level lv)
{
if (this.lvl.getLevel() < lv.getLevel())
{
this.p.playSound(this.p.getLocation(), Sound.LEVEL_UP, 5.0F, 3.0F);
this.p.playEffect(EntityEffect.FIREWORK_EXPLODE);
this.p.sendMessage(ChatColor.GREEN + "You leveled up!");
setHealth(this.maxHealth);
setMana(this.maxMana);
setStamina(this.maxStamina);
}
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".xp", Integer.valueOf(lv.getExp()));
this.plugin.saveConfig();
}
public void setSkill(Skill s, int lvl)
{
this.skills.put(s, Integer.valueOf(lvl));
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".skills." + s.getName(), Integer.valueOf(lvl));
this.plugin.saveConfig();
}
public void setAttribute(Attribute s, int lvl)
{
this.att.put(s, Integer.valueOf(lvl));
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".atttributes." + s.getName(), Integer.valueOf(lvl));
this.plugin.saveConfig();
}
public void setHealth(int h)
{
if (h >= getMaxHealth())
{
this.health = getMaxHealth();
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".health", Integer.valueOf(this.health));
this.plugin.saveConfig();
updateHealth();
}
else
{
this.health = h;
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".health", Integer.valueOf(this.health));
this.plugin.saveConfig();
updateHealth();
}
}
public void setMana(double mana)
{
if (mana >= this.maxMana)
{
this.mana = this.maxMana;
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".mana", Double.valueOf(this.mana));
this.plugin.saveConfig();
updateMana();
}
else
{
this.mana = mana;
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".mana", Double.valueOf(this.mana));
this.plugin.saveConfig();
updateMana();
}
}
public void setStamina(double stamina)
{
if (stamina >= getMaxStamina())
{
this.stamina = this.maxStamina;
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".stamina", Double.valueOf(stamina));
this.plugin.saveConfig();
updateStamina();
}
else
{
this.stamina = stamina;
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".stamina", Double.valueOf(stamina));
this.plugin.saveConfig();
updateStamina();
}
}
public void setAttributePoints(int amount)
{
this.ap = amount;
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".ap", Integer.valueOf(amount));
this.plugin.saveConfig();
}
public void setSkillPoints(int amount)
{
this.sp = amount;
this.plugin.getConfig().set("Players." + this.p.getUniqueId() + ".sp", Integer.valueOf(amount));
this.plugin.saveConfig();
}
public void damage(int dmg)
{
if (getHealth() - dmg <= 0) {
kill();
} else {
setHealth(getHealth() - dmg);
}
}
public void damage(int dmg, Entity e)
{
if (getHealth() - dmg <= 0) {
kill(e);
} else {
setHealth(getHealth() - dmg);
}
}
public void kill()
{
this.p.setHealth(0.0D);
this.p.sendMessage(ChatColor.RED + "You were killed by " + ChatColor.BLACK + "CONSOLE");
this.p.teleport(this.p.getWorld().getSpawnLocation());
}
public void kill(Entity e)
{
if (e.getType() == EntityType.PLAYER)
{
this.p.setHealth(0.0D);
this.p.sendMessage(ChatColor.RED + "You were killed by " + ((Player)e).getName());
this.p.teleport(this.p.getWorld().getSpawnLocation());
}
else
{
this.p.setHealth(0.0D);
this.p.sendMessage(ChatColor.RED + "You were killed by " + e.getType().getName());
this.p.teleport(this.p.getWorld().getSpawnLocation());
}
}
public void regenMana()
{
if ((this.p.isOnline()) && (!this.p.isDead())) {
Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable()
{
@Override
public void run()
{
double mps = tPlayer.this.plugin.getConfig().getDouble("Values.mana_per_second");
mps += tPlayer.this.getMaxMana() / 100.0D * 2.0D * ((Integer)tPlayer.this.att.get(Attribute.WILLPOWER)).intValue();
if (tPlayer.this.mana != tPlayer.this.maxMana)
{
if (tPlayer.this.mana + mps >= tPlayer.this.maxMana)
{
tPlayer.this.setMana(tPlayer.this.maxMana);
tPlayer.this.regenMana();
}
else
{
tPlayer.this.setMana(tPlayer.this.mana + mps);
tPlayer.this.regenMana();
}
}
else {
tPlayer.this.regenMana();
}
}
}, 20L);
}
}
public void regenStamina()
{
if (this.p.isOnline()) {
Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable()
{
@Override
public void run()
{
double sps = tPlayer.this.plugin.getConfig().getDouble("Values.stamina_per_second");
if (tPlayer.this.stamina != tPlayer.this.maxStamina)
{
if (tPlayer.this.race == Race.DARK_ELF) {
sps += sps * 100.0D / 15.0D;
}
if (sps + tPlayer.this.stamina >= tPlayer.this.maxStamina)
{
tPlayer.this.setStamina(tPlayer.this.maxStamina);
tPlayer.this.regenStamina();
}
else
{
tPlayer.this.setStamina(tPlayer.this.stamina + sps);
tPlayer.this.regenStamina();
}
}
else
{
tPlayer.this.regenStamina();
}
}
}, 20L);
}
}
public void drainStamina(String type)
{
if (this.plugin.draining.contains(this.p.getUniqueId()))
{
if (type.equalsIgnoreCase("sprint")) {
Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable()
{
@Override
public void run()
{
if (tPlayer.this.p.isSprinting())
{
tPlayer.this.plugin.drained.add(tPlayer.this.p.getUniqueId());
tPlayer.this.stamina = (tPlayer.this.stamina - tPlayer.this.plugin.getConfig().getDouble("Values.staminadrain.sprint"));
if (tPlayer.this.stamina <= 0.0D) {
tPlayer.this.setStamina(0.0D);
} else {
tPlayer.this.setStamina(tPlayer.this.stamina);
}
tPlayer.this.drainStamina("sprint");
}
else
{
tPlayer.this.plugin.draining.remove(tPlayer.this.p.getUniqueId());
}
}
}, 20L);
}
}
else if (type.equalsIgnoreCase("jump"))
{
if (this.race != null) {
if (this.race == Race.WOOD_ELF)
{
this.stamina -= 3.0D;
if (this.stamina <= 0.0D) {
setStamina(0.0D);
} else {
setStamina(this.stamina);
}
}
else
{
this.stamina -= 5.0D;
if (this.stamina <= 0.0D) {
setStamina(0.0D);
} else {
setStamina(this.stamina);
}
}
}
}
else if (type.equalsIgnoreCase("swim")) {
Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable()
{
@Override
public void run()
{
if (tPlayer.this.plugin.inwater.contains(tPlayer.this.p.getUniqueId()))
{
if (tPlayer.this.race == Race.REPTILIAN)
{
tPlayer.this.stamina = (tPlayer.this.stamina - 0.05D);
if (tPlayer.this.stamina <= 0.0D)
{
tPlayer.this.setStamina(0.0D);
tPlayer.this.drainStamina("swim");
}
else
{
tPlayer.this.setStamina(tPlayer.this.stamina);
tPlayer.this.drainStamina("swim");
}
}
else
{
tPlayer.this.stamina = (tPlayer.this.stamina - 0.1D);
if (tPlayer.this.stamina <= 0.0D)
{
tPlayer.this.setStamina(0.0D);
tPlayer.this.drainStamina("swim");
}
else
{
tPlayer.this.setStamina(tPlayer.this.stamina);
tPlayer.this.drainStamina("swim");
}
}
}
else {
tPlayer.this.plugin.draining.remove(tPlayer.this.p.getUniqueId());
}
}
}, 1L);
}
}
public void updateHealth()
{
float nhealth = this.health * 100 / this.maxHealth;
BarAPI.setMessage(this.p, "Health: " + this.health, nhealth);
}
public void updateStamina()
{
double nstamina = this.stamina * 20.0D / this.maxStamina;
this.p.setFoodLevel((int)nstamina);
}
public void updateMana()
{
double nmana = this.mana / 100.0D / this.maxMana;
float k = (float)(this.maxMana * (nmana / 100.0D) * 2.0D * 10.0D);
k /= 100.0F;
if (k > 1.0F) {
this.p.setHealth(k);
} else {
this.p.setHealth(1.0D);
}
}
}
Conf is : http://pastebin.com/YDQbKAmz
Message is :
Caused by: java.lang.NullPointerException
at io.github.toxicbyte.trpg.tPlayer.initSkills(tPlayer.java:58) ~[?:?]
at io.github.toxicbyte.trpg.tPlayer.<init>(tPlayer.java:34) ~[?:?]
at io.github.toxicbyte.trpg.CMD_cr.onCommand(CMD_cr.java:25) ~[?:?]
EDIT: Created a variable
FileConfiguration = this.plugin.getConfig();
And the NPE stays at that line. Problem is I don't know why it's causing it.