0

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.

MartinStone
  • 144
  • 1
  • 1
  • 13
  • As a hint: `this.p` isn't assigned to anything (i.e. is null) before you make your way into `initSkills`. – Makoto May 19 '15 at 04:35
  • Still get NPE even after assigning. That was just a little mistake. The problem is with retrieving data from the config file – MartinStone May 19 '15 at 16:05

0 Answers0