private static final boolean checkAndChangeClass(L2PcInstance player, int val) {
    final ClassId currentClassId = player.getClassId();
    if (getMinLevel(currentClassId.level()) > player.getLevel() && !Config.ALLOW_ENTIRE_TREE)
      return false;

    if (!validateClassId(currentClassId, val)) return false;

    int newJobLevel = currentClassId.level() + 1;

    // Weight/Inventory check
    if (!Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).isEmpty()
        && !player.isInventoryUnder80(false)) {
      player.sendPacket(
          SystemMessage.getSystemMessage(SystemMessageId.INVENTORY_LESS_THAN_80_PERCENT));
      return false;
    }

    // check if player have all required items for class transfer
    for (int _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keys()) {
      int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).get(_itemId);
      if (player.getInventory().getInventoryItemCount(_itemId, -1) < _count) {
        player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS);
        return false;
      }
    }

    // get all required items for class transfer
    for (int _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keys()) {
      int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).get(_itemId);
      if (!player.destroyItemByItemId("ClassMaster", _itemId, _count, player, true)) return false;
    }

    // reward player with items
    for (int _itemId : Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).keys()) {
      int _count = Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).get(_itemId);
      player.addItem("ClassMaster", _itemId, _count, player, true);
    }

    player.setClassId(val);

    if (player.isSubClassActive())
      player.getSubClasses().get(player.getClassIndex()).setClassId(player.getActiveClass());
    else player.setBaseClass(player.getActiveClass());

    Quest q = QuestManager.getInstance().getQuest("SkillTransfer");
    if (q != null) q.startQuestTimer("givePormanders", 1, null, player);

    player.broadcastUserInfo();

    if (Config.CLASS_MASTER_SETTINGS.isAllowed(player.getClassId().level() + 1)
        && Config.ALTERNATE_CLASS_MASTER
        && ((player.getClassId().level() == 1 && player.getLevel() >= 40)
            || (player.getClassId().level() == 2 && player.getLevel() >= 76)))
      showQuestionMark(player);

    return true;
  }