public void changeToIslandInventory(PlayerInfo pi) {
    if (pi.isPlaying()) return;

    if (this.settings.getAllowContent()) {
      pi.setIsPlaying(true);
      return;
    }

    // save old inventory
    pi.setOldInventory(pi.getPlayer().getInventory().getContents());
    pi.setOldArmor(pi.getPlayer().getInventory().getArmorContents());
    pi.setOldHealth(pi.getPlayer().getHealth());
    pi.setOldFood(pi.getPlayer().getFoodLevel());
    pi.setOldLevel(pi.getPlayer().getLevel());
    pi.setOldExp(pi.getPlayer().getExp());

    // set island inventory
    pi.getPlayer().getInventory().setContents(pi.getIslandInventory());
    pi.getPlayer().getInventory().setArmorContents(pi.getIslandArmor());
    if (pi.getIslandHealth() <= 0) {
      pi.getPlayer().setHealth(pi.getPlayer().getMaxHealth());
    } else {
      pi.getPlayer().setHealth(pi.getIslandHealth());
    }

    if (pi.getIslandFood() <= 0) {
      pi.getPlayer().setFoodLevel(20);
    } else {
      pi.getPlayer().setHealth(pi.getIslandFood());
    }
    pi.getPlayer().setLevel(pi.getIslandLevel());
    pi.getPlayer().setExp(pi.getIslandExp());

    pi.setIsPlaying(true);
  }
  @SuppressWarnings("unchecked")
  public PlayerInfo loadPlayerInfo(String playerName) {
    YamlConfiguration yamlPlayerInfo = new YamlConfiguration();
    File filePlayerInfo = new File(this.directoryPlayers, playerName + ".yml");
    if (!filePlayerInfo.exists()) {
      return null;
    }

    try {
      yamlPlayerInfo.load(filePlayerInfo);
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }

    PlayerInfo pi = new PlayerInfo(playerName);

    // Find own Island
    int ownsIslandNr = -1;
    if (yamlPlayerInfo.contains(EnumPlayerConfig.ISLAND_NUMBER.getPath())) {
      ownsIslandNr = yamlPlayerInfo.getInt(EnumPlayerConfig.ISLAND_NUMBER.getPath());
    } else {
      yamlPlayerInfo.set(EnumPlayerConfig.ISLAND_NUMBER.getPath(), ownsIslandNr);
    }
    pi.setIslandInfo(settings.getIslandInfo(ownsIslandNr));

    // Check consistency
    if (pi.getHasIsland() && !pi.getIslandInfo().isIslandOwner(playerName)) {
      pi.setIslandInfo(null);
    }

    // Find Buildpermissions
    // buildPermissions = new HashMap<Integer, IslandInfo>();

    ArrayList<Integer> builtlist = new ArrayList<Integer>();
    if (yamlPlayerInfo.contains(EnumPlayerConfig.ISLAND_BUILTLIST.getPath())) {
      builtlist =
          (ArrayList<Integer>) yamlPlayerInfo.getList(EnumPlayerConfig.ISLAND_BUILTLIST.getPath());
    } else {
      yamlPlayerInfo.set(EnumPlayerConfig.ISLAND_BUILTLIST.getPath(), builtlist);
    }
    // Go through buildlist with Islandnr to get IslandInfos
    for (int islandnr : builtlist) {
      IslandInfo friend = settings.getIslandInfo(islandnr);
      if (friend != null && friend.containsFriend(playerName)) {
        pi.addBuildPermission(islandnr, friend);
      }
    }

    boolean isPlaying = false;
    if (yamlPlayerInfo.contains(EnumPlayerConfig.IS_PLAYING.getPath())) {
      isPlaying =
          Boolean.parseBoolean(
              yamlPlayerInfo.get(EnumPlayerConfig.IS_PLAYING.getPath()).toString());
    } else {
      yamlPlayerInfo.set(EnumPlayerConfig.IS_PLAYING.getPath(), false);
    }
    pi.setIsPlaying(isPlaying);

    boolean isDead = false;
    if (yamlPlayerInfo.contains(EnumPlayerConfig.IS_DEAD.getPath())) {
      isDead =
          Boolean.parseBoolean(yamlPlayerInfo.get(EnumPlayerConfig.IS_DEAD.getPath()).toString());
    } else {
      yamlPlayerInfo.set(EnumPlayerConfig.IS_DEAD.getPath(), false);
    }
    pi.setDead(isDead);

    int islandFood = 20;
    try {
      if (yamlPlayerInfo.contains(EnumPlayerConfig.ISLAND_FOOD.getPath())) {
        islandFood =
            Integer.parseInt(yamlPlayerInfo.get(EnumPlayerConfig.ISLAND_FOOD.getPath()).toString());
      } else {
        yamlPlayerInfo.set(EnumPlayerConfig.ISLAND_FOOD.getPath(), 20);
      }
    } catch (Exception e) {
    }
    pi.setIslandFood(islandFood);

    int islandHealth = 20;
    try {
      if (yamlPlayerInfo.contains(EnumPlayerConfig.ISLAND_HEALTH.getPath())) {
        islandHealth =
            Integer.parseInt(
                yamlPlayerInfo.get(EnumPlayerConfig.ISLAND_HEALTH.getPath()).toString());
      } else {
        yamlPlayerInfo.set(EnumPlayerConfig.ISLAND_HEALTH.getPath(), 20);
      }
    } catch (Exception e) {
    }
    pi.setIslandHealth(islandHealth);

    int islandExp = 0;
    try {
      if (yamlPlayerInfo.contains(EnumPlayerConfig.ISLAND_EXP.getPath())) {
        islandExp =
            Integer.parseInt(yamlPlayerInfo.get(EnumPlayerConfig.ISLAND_EXP.getPath()).toString());
      } else {
        yamlPlayerInfo.set(EnumPlayerConfig.ISLAND_EXP.getPath(), 0);
      }
    } catch (Exception e) {
    }
    pi.setIslandExp(islandExp);

    int islandLevel = 0;
    try {
      if (yamlPlayerInfo.contains(EnumPlayerConfig.ISLAND_LEVEL.getPath())) {
        islandLevel =
            Integer.parseInt(
                yamlPlayerInfo.get(EnumPlayerConfig.ISLAND_LEVEL.getPath()).toString());
      } else {
        yamlPlayerInfo.set(EnumPlayerConfig.ISLAND_LEVEL.getPath(), 0);
      }
    } catch (Exception e) {
    }
    pi.setIslandLevel(islandLevel);

    ItemStack[] islandInventory = new ItemStack[36];
    if (yamlPlayerInfo.contains(EnumPlayerConfig.ISLAND_INVENTORY.getPath())) {
      ArrayList<String> listIslandInventory =
          (ArrayList<String>) yamlPlayerInfo.get(EnumPlayerConfig.ISLAND_INVENTORY.getPath());
      islandInventory = ItemParser.getItemStackArrayFromList(listIslandInventory, 36);
    } else {
      yamlPlayerInfo.set(EnumPlayerConfig.ISLAND_INVENTORY.getPath(), new ArrayList<String>());
    }
    pi.setIslandInventory(islandInventory);

    ItemStack[] islandArmor = new ItemStack[4];
    if (yamlPlayerInfo.contains(EnumPlayerConfig.ISLAND_ARMOR.getPath())) {
      ArrayList<String> listIslandArmor =
          (ArrayList<String>) yamlPlayerInfo.get(EnumPlayerConfig.ISLAND_ARMOR.getPath());
      islandArmor = ItemParser.getItemStackArrayFromList(listIslandArmor, 4);
    } else {
      yamlPlayerInfo.set(EnumPlayerConfig.ISLAND_ARMOR.getPath(), new ArrayList<String>());
    }
    pi.setIslandArmor(islandArmor);

    Location oldLocation = null;
    if (yamlPlayerInfo.contains(EnumPlayerConfig.OLD_LOCATION.getPath())) {
      oldLocation =
          LocationParser.parseStringToLocation(
              yamlPlayerInfo.get(EnumPlayerConfig.OLD_LOCATION.getPath()).toString());
    } else {
      yamlPlayerInfo.set(EnumPlayerConfig.OLD_LOCATION.getPath(), "");
    }
    pi.setOldLocation(oldLocation);

    int oldFood = 20;
    try {
      if (yamlPlayerInfo.contains(EnumPlayerConfig.OLD_FOOD.getPath())) {
        oldFood =
            Integer.parseInt(yamlPlayerInfo.get(EnumPlayerConfig.OLD_FOOD.getPath()).toString());
      } else {
        yamlPlayerInfo.set(EnumPlayerConfig.OLD_FOOD.getPath(), 20);
      }
    } catch (Exception e) {
    }
    pi.setOldFood(oldFood);

    int oldHealth = 20;
    try {
      if (yamlPlayerInfo.contains(EnumPlayerConfig.OLD_HEALTH.getPath())) {
        oldHealth =
            Integer.parseInt(yamlPlayerInfo.get(EnumPlayerConfig.OLD_HEALTH.getPath()).toString());
      } else {
        yamlPlayerInfo.set(EnumPlayerConfig.OLD_HEALTH.getPath(), 20);
      }
    } catch (Exception e) {
    }
    pi.setOldHealth(oldHealth);

    int oldExp = 0;
    try {
      if (yamlPlayerInfo.contains(EnumPlayerConfig.OLD_EXP.getPath())) {
        oldExp =
            Integer.parseInt(yamlPlayerInfo.get(EnumPlayerConfig.OLD_EXP.getPath()).toString());
      } else {
        yamlPlayerInfo.set(EnumPlayerConfig.OLD_EXP.getPath(), 0);
      }
    } catch (Exception e) {
    }
    pi.setOldExp(oldExp);

    int oldLevel = 0;
    try {
      if (yamlPlayerInfo.contains(EnumPlayerConfig.OLD_LEVEL.getPath())) {
        oldLevel =
            Integer.parseInt(yamlPlayerInfo.get(EnumPlayerConfig.OLD_LEVEL.getPath()).toString());
      } else {
        yamlPlayerInfo.set(EnumPlayerConfig.OLD_LEVEL.getPath(), 0);
      }
    } catch (Exception e) {
    }
    pi.setOldLevel(oldLevel);

    ItemStack[] oldInventory = new ItemStack[36];
    if (yamlPlayerInfo.contains(EnumPlayerConfig.OLD_INVENTORY.getPath())) {
      ArrayList<String> listOldInventory =
          (ArrayList<String>) yamlPlayerInfo.get(EnumPlayerConfig.OLD_INVENTORY.getPath());
      oldInventory = ItemParser.getItemStackArrayFromList(listOldInventory, 36);
    } else {
      yamlPlayerInfo.set(EnumPlayerConfig.OLD_INVENTORY.getPath(), new ArrayList<String>());
    }
    pi.setOldInventory(oldInventory);

    ItemStack[] oldArmor = new ItemStack[4];
    if (yamlPlayerInfo.contains(EnumPlayerConfig.OLD_ARMOR.getPath())) {
      ArrayList<String> listOldArmor =
          (ArrayList<String>) yamlPlayerInfo.get(EnumPlayerConfig.OLD_ARMOR.getPath());
      oldArmor = ItemParser.getItemStackArrayFromList(listOldArmor, 4);
    } else {
      yamlPlayerInfo.set(EnumPlayerConfig.OLD_ARMOR.getPath(), new ArrayList<String>());
    }
    pi.setOldArmor(oldArmor);

    try {
      yamlPlayerInfo.save(filePlayerInfo);
    } catch (IOException e) {
      e.printStackTrace();
      return null;
    }
    return pi;
  }