В дополнение к инфе от @Bs0Dd поясню, что если ты кодишь под биос, то работаешь на самом низком уровне, доступном в моде. Следовательно, фича component.имяКомпонента.метод(...) из OpenOS доступна не будет, т.к. она добавляется на более позднем этапе во время инициализации самой ОС:
https://github.com/MightyPirates/OpenComputers/blob/af2db43c53b9690fceabfb813987572bf2258db5/src/main/resources/assets/opencomputers/loot/openos/boot/04_component.lua#L10-L32
Поэтому для обращения к компоненту из-под биоса есть 2 варианта:
-- Чтобы обратиться к компоненту, нам нужно знать его уникальный адрес
-- Список адресов всех доступных компонентов с указанным типом можно получить через метод component.list("имя")
-- В одном компьтере может быть установлено несколько компонентов одного типа, поэтому метод list
-- возвращает функцию-итератор, при каждом вызове которой возвращается адрес следующего компонента
local gpuIterator = component.list("gpu")
local gpu1Address = gpuIterator()
local gpu2Address = gpuIterator()
-- Конструкцию выше можно скомпоновать в цикл
for address in component.list("gpu") do
-- Делаем что угодно с каждой имеющейся GPU
end
-- В случае EEPROM все несколько проще. Поскольку в 1-ом компьютере может быть только 1 EEPROM, то нам
-- следует вызвать функцию-итератор хотя бы 1 раз, чтобы получить адрес 1-го (и единственного) EEPROM
local eepromAddress = component.list("eeprom")()
-- Раз адрес компонента EEPROM нам известен, теперь мы можем обратиться к нему и вызвать
-- какой-нибудь метод. Сделать это можно двумя путями. Первый более линейный, его следует
-- использовать для каких-то разовых операций "в лоб":
local data = component.invoke(eepromAddress, "getData")
component.invoke(eepromAddress, "setData", "sample text")
-- Второй более универсальный, и позволяет создать так называемый прокси компонента, то есть
-- таблицу в памяти, содержащую все доступные методы компонента. Разумеется, он расходует больше ОЗУ,
-- однако работать с ним в разы удобнее:
local eepromProxy = component.proxy(eepromAddress)
local data = eepromProxy.getData()
eepromProxy.setData("sample text")
Кроме того, "чистые" компьютеры без ОС имеют глобальные переменные component, computer и unicode, которые всегда доступны в биосе, и в случае OpenOS "вырезаются", становясь частью глобальной библиотеки package:
https://github.com/MightyPirates/OpenComputers/blob/af2db43c53b9690fceabfb813987572bf2258db5/src/main/resources/assets/opencomputers/loot/openos/lib/core/boot.lua#L94-L112
По этой причине в биосе ты должен обращаться к глобальной библиотеке component, а в OpenOS для этого уже требуется конструкция require("component"). Почему авторы так поступили? Да хрен знает, их ОС - их правила. Но путаницу это вносит знатную