Component/signals/zh: Difference between revisions
Jump to navigation
Jump to search
imported>OCDoc Import Imported from legacy OpenComputers documentation at ocdoc.cil.li |
Clean up Markdown artifacts from DokuWiki migration |
||
| Line 5: | Line 5: | ||
信号可以被[[API/computer/zh|computer.pullSignal()]]或其更方便的封装[[API/event/zh|event.pull()]]消耗掉。 | 信号可以被[[API/computer/zh|computer.pullSignal()]]或其更方便的封装[[API/event/zh|event.pull()]]消耗掉。 | ||
下面列出了所有由组件和内置库触发的信号。它们由以下格式列出: | 下面列出了所有由组件和内置库触发的信号。它们由以下格式列出:<code>信号名(参数名: 参数类型, ...)</code>,你可以用<code>local name, arg, ... = event.pull()</code>这样的写法拉取它们。 例如,要拉取一条调制解调器收到的消息: <syntaxhighlight lang="lua"> | ||
local event = require("event") local _, localNetworkCard, remoteAddress, port, distance, payload = event.pull("modem_message") print("Received data '" .. tostring(payload) .. "' from address " .. remoteAddress .. " on network card " .. localNetworkCard .. " on port " .. port .. ".") if distance > 0 then | |||
print("Message was sent from " .. distance .. " blocks away.") | |||
</ | |||
end | |||
</syntaxhighlight> | |||
== 电脑 == | == 电脑 == | ||
* | * <code>component_added(address: string, componentType: string)</code> | ||
<pre>当有新组件连接到系统时,[[Block/computer case/zh|电脑]]或[[Block/robot/zh|机器人]] | <pre>当有新组件连接到系统时,[[Block/computer case/zh|电脑]]或[[Block/robot/zh|机器人]]会将此信号加入队列。address是新加入的组件的地址,componentType是组件的类型(例如redstone或gpu)。 | ||
注意:请尽可能不要直接使用这个信号,而是用component_available代替,后者会在添加或改变**首选**组件时,被[[API/component/zh|component(组件) 库]]加入信号队列。 | |||
</pre> | </pre> | ||
* | * <code>component_removed(address: string, componentType: string)</code> | ||
<pre>当某组件被从系统中移除时,[[Block/computer case/zh|电脑]]或[[Block/robot/zh|机器人]] | <pre>当某组件被从系统中移除时,[[Block/computer case/zh|电脑]]或[[Block/robot/zh|机器人]]会将此信号加入信号队列。address是被移除的组件的地址,componentType是组件的类型(如 redstone 或 gpu)。 | ||
注意:请尽可能不要直接使用这个信号,而是用component_unavailable代替,后者会在移除**首选**组件时,被[[API/component/zh|component(组件) 库]]加入队列。 | |||
</pre> | </pre> | ||
* | * <code>component_available(componentType: string)</code> | ||
<pre>当添加或改变**首选**组件时,[[API/component/zh|component(组件) 库]] | <pre>当添加或改变**首选**组件时,[[API/component/zh|component(组件) 库]]会将这个信号加入队列。一般来说,最好使用它而不是component_added,以免与组件库冲突。 | ||
</pre> | </pre> | ||
* | * <code>component_unavailable(componentType: string)</code> | ||
<pre>当移除**首选**组件时,[[API/component/zh|component(组件) 库]] | <pre>当移除**首选**组件时,[[API/component/zh|component(组件) 库]]会将这个信号加入队列。一般来说,最好使用它而不是component_removed,以免与组件库冲突。 | ||
</pre> | </pre> | ||
* | * <code>term_available()</code> | ||
<pre>当电脑的[[Item/graphics card/zh|GPU]]**与**[[Block/screen/zh|屏幕]]变得均可用时,[[API/term/zh|term(终端) 库]]会将这个信号加入队列。此信号有助于确定何时可以将文本输出到设备连接的屏幕上。 | <pre>当电脑的[[Item/graphics card/zh|GPU]]**与**[[Block/screen/zh|屏幕]]变得均可用时,[[API/term/zh|term(终端) 库]]会将这个信号加入队列。此信号有助于确定何时可以将文本输出到设备连接的屏幕上。 | ||
</pre> | </pre> | ||
* | * <code>term_unavailable()</code> | ||
<pre>当电脑的 [[Item/graphics card/zh|GPU]]**或**[[Block/screen/zh|屏幕]]的其中任意一个变得不可用时,[[API/term/zh|term(终端) 库]]会将这个信号加入队列。此信号有助于确定何时不能将文本输出到设备连接的屏幕上。 | <pre>当电脑的 [[Item/graphics card/zh|GPU]]**或**[[Block/screen/zh|屏幕]]的其中任意一个变得不可用时,[[API/term/zh|term(终端) 库]]会将这个信号加入队列。此信号有助于确定何时不能将文本输出到设备连接的屏幕上。 | ||
</pre> | </pre> | ||
== 屏幕 == | == 屏幕 == | ||
* | * <code>screen_resized(screenAddress: string, newWidth: number, newHeight: number)</code> | ||
<pre>当分辨率发生变化,例如通过[[Component/GPU/zh|GPU]]手动修改分辨率时,对应的[[Block/screen/zh|屏幕]] | <pre>当分辨率发生变化,例如通过[[Component/GPU/zh|GPU]]手动修改分辨率时,对应的[[Block/screen/zh|屏幕]]会将此信号加入队列。screenAddress是产生信号的屏幕的地址。 | ||
</pre> | </pre> | ||
* | * <code>touch(screenAddress: string, x: number, y: number, button: number, playerName: string)</code> | ||
<pre>此信号会在2级或3级屏幕被点击时入队。包括左键点击GUI(连接键盘时),或在世界中直接右键点击它们/与其交互(没有键盘连接或潜行交互时)。 | <pre>此信号会在2级或3级屏幕被点击时入队。包括左键点击GUI(连接键盘时),或在世界中直接右键点击它们/与其交互(没有键盘连接或潜行交互时)。 | ||
screenAddress是产生信号的屏幕的地址。x和y坐标的单位是“字母”(意味着它们直接映射到term.setCursor或gpu.set)。playerName 是触发这个事件的玩家的名字。 | |||
关于玩家名的说明:我可能会在将来添加一个配置项来禁用这个参数,因为有些人认为这太……不真实了。但它对多用户程序很有用,因此我暂时保留了它。 | 关于玩家名的说明:我可能会在将来添加一个配置项来禁用这个参数,因为有些人认为这太……不真实了。但它对多用户程序很有用,因此我暂时保留了它。 | ||
</pre> | </pre> | ||
'''注意:'''此信号是'''已经过核查'''的,也就是说,只有当玩家是该电脑的[[computer users/zh|登记用户]](或该电脑没有登记任何用户)时,信号才会入队。 | '''注意:'''此信号是'''已经过核查'''的,也就是说,只有当玩家是该电脑的[[computer users/zh|登记用户]](或该电脑没有登记任何用户)时,信号才会入队。 | ||
* | * <code>drag(screenAddress: string, x: number, y: number, button: number, playerName: string)</code> | ||
<pre>此信号几乎等同于 | <pre>此信号几乎等同于 touch 信号,唯一隐含的区别是: 此信号被触发时,其实是“属于”先前已被触发的touch信号的。此信号只能通过在GUI中进行拖动来触发。 | ||
</pre> | </pre> | ||
* | * <code>drop(screenAddress: string, x: number, y: number, button: number, playerName: string)</code> | ||
<pre> | <pre>此信号在玩家触发touch后松开鼠标时被触发。尽管它叫这个名字,但它不必需跟在drag信号之后。 | ||
</pre> | </pre> | ||
* | * <code>scroll(screenAddress: string, x: number, y: number, direction: number, playerName: string)</code> | ||
<pre>当玩家在2级或3级屏幕的GUI中使用鼠标滚轮时,对应屏幕会将此信号加入队列。 | <pre>当玩家在2级或3级屏幕的GUI中使用鼠标滚轮时,对应屏幕会将此信号加入队列。 | ||
x和y坐标的值为滚动时鼠标光标的位置。与touch信号相同,坐标以“字母”为单位。direction表示滚动的方向,正数代表“向上”,负数代表“向下”。注意,这可能会根据游戏客户端的操作系统或驱动配置而有所不同。playerName是触发该事件的玩家名字。 | |||
对于玩家名,此处也有与touch处相同的考虑。 | |||
</pre> | </pre> | ||
* | * <code>walk(screenAddress: string, x: number, y: number[, playerName: string])</code> | ||
<pre> | <pre>当玩家或其他实体在2级或3级屏幕上行走时,对应屏幕会将这个信号加入信号队列。screenAddress是产生信号的屏幕的地址。x和y坐标是当屏幕为多方块屏幕时**子方块的坐标**。使用[[Component/GPU/zh|gpu.getSize()]]可以计算出实际上代表了显示器的哪个区域。 | ||
与点击不同的是,根据当前的分辨率不同,这个信号可能会被屏幕上没有任何显示的区域触发,所以要记住这一点。 | 与点击不同的是,根据当前的分辨率不同,这个信号可能会被屏幕上没有任何显示的区域触发,所以要记住这一点。 | ||
对于玩家名,此处也有与touch处相同的考虑。 | |||
</pre> | </pre> | ||
== 键盘 == | == 键盘 == | ||
* | * <code>key_down(keyboardAddress: string, char: number, code: number, playerName: string)</code> | ||
<pre>当用户在屏幕上输入内容时,附着其上的[[Block/keyboard/zh|键盘]]会将此信号添加到队列中。准确来说,应该是当用户**按下**一个键时。如果用户一直按着这个键,这个事件可能会被重复触发。 | <pre>当用户在屏幕上输入内容时,附着其上的[[Block/keyboard/zh|键盘]]会将此信号添加到队列中。准确来说,应该是当用户**按下**一个键时。如果用户一直按着这个键,这个事件可能会被重复触发。 | ||
</pre> | </pre> | ||
'''注意:'''此信号'''已经过核查''',也就是说,只有当玩家是该电脑的[[computer users/zh|登记用户]](或该电脑没有登记任何用户)时,信号才会入队。 | '''注意:'''此信号'''已经过核查''',也就是说,只有当玩家是该电脑的[[computer users/zh|登记用户]](或该电脑没有登记任何用户)时,信号才会入队。 | ||
* | * <code>key_up(keyboardAddress: string, char: number, code: number, playerName: string)</code> | ||
<pre>当用户在屏幕上输入内容时,附着其上的[[Block/keyboard/zh|键盘]]会将此信号添加到队列中。准确来说,应该是当用户**松开**一个键时。 | <pre>当用户在屏幕上输入内容时,附着其上的[[Block/keyboard/zh|键盘]]会将此信号添加到队列中。准确来说,应该是当用户**松开**一个键时。 | ||
| Line 94: | Line 96: | ||
</pre> | </pre> | ||
'''注意:'''此信号'''已经过核查''',也就是说,只有当玩家是该电脑的[[computer users/zh|登记用户]](或该电脑没有登记任何用户)时,信号才会入队。 | '''注意:'''此信号'''已经过核查''',也就是说,只有当玩家是该电脑的[[computer users/zh|登记用户]](或该电脑没有登记任何用户)时,信号才会入队。 | ||
* | * <code>clipboard(keyboardAddress: string, value: string, playerName: string)</code> | ||
<pre>当用户从剪切板上粘贴文本(shift+ins或鼠标中键)时,[[Block/keyboard/zh|键盘]]会将此信号添加到信号队列。请注意,文本可粘贴的最大长度是有限制的(可在配置文件中修改)。 | <pre>当用户从剪切板上粘贴文本(shift+ins或鼠标中键)时,[[Block/keyboard/zh|键盘]]会将此信号添加到信号队列。请注意,文本可粘贴的最大长度是有限制的(可在配置文件中修改)。 | ||
| Line 102: | Line 104: | ||
== 红石卡与红石I/O端口 == | == 红石卡与红石I/O端口 == | ||
* | * <code>redstone_changed(address: string, side: number, oldValue: number, newValue: number[, color: number])</code> | ||
<pre>当传入的红石信号改变时,[[Component/redstone/zh|红石组件]]会将此信号添加到队列。 | <pre>当传入的红石信号改变时,[[Component/redstone/zh|红石组件]]会将此信号添加到队列。 | ||
address是[[Block/redstone io/zh|红石I/O端口]]或检测到红石信号的机器安装的[[Item/redstone card/zh|红石卡]]的地址。side是[[API/sides/zh|sides(方向)]]常量的其中之一,表示哪一侧的红石信号发生了变化。这里的方向是相对于组件容器的相对方向,因此对电脑和机器人而言,具体的值取决于它们的朝向。对于红石I/O端口来说,方向是绝对的。color参数只有在配合集束线缆使用时才会引入,其值表示发生改变的信号的颜色。 | |||
</pre> | </pre> | ||
== 运动传感器 == | == 运动传感器 == | ||
* | * <code>motion(address:string, relativeX:number, relativeY:number, relativeZ:number[, entityName:string])</code> | ||
<pre>当检测范围内的活动实体移速超过配置的灵敏度时,这个信号会被[[Block/motion sensor/zh|运动传感器]] | <pre>当检测范围内的活动实体移速超过配置的灵敏度时,这个信号会被[[Block/motion sensor/zh|运动传感器]]添加到事件队列。relativeX、relativeY和relativeZ是被检测到的物体相对于运动传感器的位置。 | ||
</pre> | </pre> | ||
== 网卡 == | == 网卡 == | ||
* | * <code>modem_message(receiverAddress: string, senderAddress: string, port: number, distance: number, ...)</code> | ||
<pre>当在开放的端口上收到信息时,[[Item/network card/zh|网卡]](包括无线网卡)会将此信号添加到事件队列。 | <pre>当在开放的端口上收到信息时,[[Item/network card/zh|网卡]](包括无线网卡)会将此信号添加到事件队列。 | ||
receiverAddress 是收到信息的网卡的地址,senderAddress是发送信息的网卡的地址。注意,若信息经过了一个或多个[[Block/switch/zh|中继器]],那么发送者的地址可能与实际发送信息的网卡地址不同。port是收到信息的端口。distance参数只有在收到**无线**网络信息时才有效,此时它的值是接收者到发送者之间的距离。对于普通的网卡来说,该值永远为零。其他所有参数都是用户定义的,并对应用户在调用[[Component/modem/zh|modem.send()]] 或 modem.broadcast()时指定的内容,为信息载荷。 | |||
</pre> | </pre> | ||
== 机器人 == | == 机器人 == | ||
* | * <code>inventory_changed(slot: number)</code> | ||
<pre>当机器人的物品栏发生变化时,机器人会将此信号添加到队列。注意,只包括储存在槽位中的物品种类变化。增加或减少一个物品堆中的物品数量并不会触发这个信号。 | <pre>当机器人的物品栏发生变化时,机器人会将此信号添加到队列。注意,只包括储存在槽位中的物品种类变化。增加或减少一个物品堆中的物品数量并不会触发这个信号。 | ||
玩家手动将机器人库存中的一种物品换成另一种(例如火把和木棍)时实际上会触发**两个**信号:一个是移除火把的信号,一个是与此同时放入木棍的信号。使用[[API/robot/zh|robot.transferTo()]]交换两个槽位中的物品甚至会触发**四个**信号——原因同上,但这次涉及到两个槽位间的物品交换。 | 玩家手动将机器人库存中的一种物品换成另一种(例如火把和木棍)时实际上会触发**两个**信号:一个是移除火把的信号,一个是与此同时放入木棍的信号。使用[[API/robot/zh|robot.transferTo()]]交换两个槽位中的物品甚至会触发**四个**信号——原因同上,但这次涉及到两个槽位间的物品交换。 | ||
此外,该信号只针对机器人物品栏中有地址的部分,也就是说,它不会因装备(工具、扩展卡、升级)的变化而被触发。 | 此外,该信号只针对机器人物品栏中有地址的部分,也就是说,它不会因装备(工具、扩展卡、升级)的变化而被触发。 | ||
</pre> | </pre> | ||
== 抽象总线卡 == | == 抽象总线卡 == | ||
来自[ | 来自[http://stargatetech.theender.net/miscellaneous/home.html Stargate Tech 2]。 | ||
* | * <code>bus_message(protocolId: number, senderAddress: number, targetAddress: number, data: table, metadata: table)</code> | ||
= <code>protocolId</code>是所使用的协议的版本。 = | |||
= <code>senderAddress</code>是发送信息的设备地址。 = | |||
= <code>targetAddress</code>是信息的目标设备地址(网络广播为 -1)。 = | |||
= <code>data</code>是包含所发送数据的表。 = | |||
= <code>metadata</code>是特定于发送方设备的数据的表。 = | |||
== 车辆 == | == 车辆 == | ||
来自[ | 来自[https://www.curseforge.com/minecraft/mc-mods/remain-in-motion Redstone in motion / remain in motion(红石运动机构)] | ||
<s>'''注意:'''该组件的驱动程序已被移动到附属模组OpenComponents中。</s> OpenComponents模组的内容已合并进主模组。 | <s>'''注意:'''该组件的驱动程序已被移动到附属模组OpenComponents中。</s> OpenComponents模组的内容已合并进主模组。 | ||
* | * <code>carriage_moved(success: boolean[, reason:string[, x:number, y: number, z: number]])</code> | ||
<pre> | <pre>此信号会在车辆组件成功执行移动或模拟移动命令后加入队列。success参数指出移动或模拟移动指令是否执行成功,即车辆是否可移动。若移动失败,reason即为错误信息。取决于错误信息,(x,y,z)会是造成移动失败的方块在世界中的坐标。 | ||
</pre> | </pre> | ||
== 目录 == | == 目录 == | ||
{{:Component/contents/zh}} | {{:Component/contents/zh}} | ||
Latest revision as of 20:27, 24 August 2026
信号
信号是由某些外部来源发送给电脑的信息,可被用于各种用途。它们需要至少有个名字,然后还可以有任意数量的(简单)参数。注意,电脑自己也可以向自己的信号队列中添加信号。
信号可以被computer.pullSignal()或其更方便的封装event.pull()消耗掉。
下面列出了所有由组件和内置库触发的信号。它们由以下格式列出:信号名(参数名: 参数类型, ...),你可以用local name, arg, ... = event.pull()这样的写法拉取它们。 例如,要拉取一条调制解调器收到的消息:
local event = require("event") local _, localNetworkCard, remoteAddress, port, distance, payload = event.pull("modem_message") print("Received data '" .. tostring(payload) .. "' from address " .. remoteAddress .. " on network card " .. localNetworkCard .. " on port " .. port .. ".") if distance > 0 then
print("Message was sent from " .. distance .. " blocks away.")
end电脑
component_added(address: string, componentType: string)
当有新组件连接到系统时,[[Block/computer case/zh|电脑]]或[[Block/robot/zh|机器人]]会将此信号加入队列。address是新加入的组件的地址,componentType是组件的类型(例如redstone或gpu)。 注意:请尽可能不要直接使用这个信号,而是用component_available代替,后者会在添加或改变**首选**组件时,被[[API/component/zh|component(组件) 库]]加入信号队列。
component_removed(address: string, componentType: string)
当某组件被从系统中移除时,[[Block/computer case/zh|电脑]]或[[Block/robot/zh|机器人]]会将此信号加入信号队列。address是被移除的组件的地址,componentType是组件的类型(如 redstone 或 gpu)。 注意:请尽可能不要直接使用这个信号,而是用component_unavailable代替,后者会在移除**首选**组件时,被[[API/component/zh|component(组件) 库]]加入队列。
component_available(componentType: string)
当添加或改变**首选**组件时,[[API/component/zh|component(组件) 库]]会将这个信号加入队列。一般来说,最好使用它而不是component_added,以免与组件库冲突。
component_unavailable(componentType: string)
当移除**首选**组件时,[[API/component/zh|component(组件) 库]]会将这个信号加入队列。一般来说,最好使用它而不是component_removed,以免与组件库冲突。
term_available()
当电脑的[[Item/graphics card/zh|GPU]]**与**[[Block/screen/zh|屏幕]]变得均可用时,[[API/term/zh|term(终端) 库]]会将这个信号加入队列。此信号有助于确定何时可以将文本输出到设备连接的屏幕上。
term_unavailable()
当电脑的 [[Item/graphics card/zh|GPU]]**或**[[Block/screen/zh|屏幕]]的其中任意一个变得不可用时,[[API/term/zh|term(终端) 库]]会将这个信号加入队列。此信号有助于确定何时不能将文本输出到设备连接的屏幕上。
屏幕
screen_resized(screenAddress: string, newWidth: number, newHeight: number)
当分辨率发生变化,例如通过[[Component/GPU/zh|GPU]]手动修改分辨率时,对应的[[Block/screen/zh|屏幕]]会将此信号加入队列。screenAddress是产生信号的屏幕的地址。
touch(screenAddress: string, x: number, y: number, button: number, playerName: string)
此信号会在2级或3级屏幕被点击时入队。包括左键点击GUI(连接键盘时),或在世界中直接右键点击它们/与其交互(没有键盘连接或潜行交互时)。 screenAddress是产生信号的屏幕的地址。x和y坐标的单位是“字母”(意味着它们直接映射到term.setCursor或gpu.set)。playerName 是触发这个事件的玩家的名字。 关于玩家名的说明:我可能会在将来添加一个配置项来禁用这个参数,因为有些人认为这太……不真实了。但它对多用户程序很有用,因此我暂时保留了它。
注意:此信号是已经过核查的,也就是说,只有当玩家是该电脑的登记用户(或该电脑没有登记任何用户)时,信号才会入队。
drag(screenAddress: string, x: number, y: number, button: number, playerName: string)
此信号几乎等同于 touch 信号,唯一隐含的区别是: 此信号被触发时,其实是“属于”先前已被触发的touch信号的。此信号只能通过在GUI中进行拖动来触发。
drop(screenAddress: string, x: number, y: number, button: number, playerName: string)
此信号在玩家触发touch后松开鼠标时被触发。尽管它叫这个名字,但它不必需跟在drag信号之后。
scroll(screenAddress: string, x: number, y: number, direction: number, playerName: string)
当玩家在2级或3级屏幕的GUI中使用鼠标滚轮时,对应屏幕会将此信号加入队列。 x和y坐标的值为滚动时鼠标光标的位置。与touch信号相同,坐标以“字母”为单位。direction表示滚动的方向,正数代表“向上”,负数代表“向下”。注意,这可能会根据游戏客户端的操作系统或驱动配置而有所不同。playerName是触发该事件的玩家名字。 对于玩家名,此处也有与touch处相同的考虑。
walk(screenAddress: string, x: number, y: number[, playerName: string])
当玩家或其他实体在2级或3级屏幕上行走时,对应屏幕会将这个信号加入信号队列。screenAddress是产生信号的屏幕的地址。x和y坐标是当屏幕为多方块屏幕时**子方块的坐标**。使用[[Component/GPU/zh|gpu.getSize()]]可以计算出实际上代表了显示器的哪个区域。 与点击不同的是,根据当前的分辨率不同,这个信号可能会被屏幕上没有任何显示的区域触发,所以要记住这一点。 对于玩家名,此处也有与touch处相同的考虑。
键盘
key_down(keyboardAddress: string, char: number, code: number, playerName: string)
当用户在屏幕上输入内容时,附着其上的[[Block/keyboard/zh|键盘]]会将此信号添加到队列中。准确来说,应该是当用户**按下**一个键时。如果用户一直按着这个键,这个事件可能会被重复触发。
注意:此信号已经过核查,也就是说,只有当玩家是该电脑的登记用户(或该电脑没有登记任何用户)时,信号才会入队。
key_up(keyboardAddress: string, char: number, code: number, playerName: string)
当用户在屏幕上输入内容时,附着其上的[[Block/keyboard/zh|键盘]]会将此信号添加到队列中。准确来说,应该是当用户**松开**一个键时。 请注意,玩家可以不松开按键就将自己“移开”屏幕范围,这在大多数情况下**应该**会得到处理(我认为),但有时仍会处理失败。这意味着该功能或多或少还处于……观察阶段,若被证明不可行,该功能会在以后的某个时间点被删除。
注意:此信号已经过核查,也就是说,只有当玩家是该电脑的登记用户(或该电脑没有登记任何用户)时,信号才会入队。
clipboard(keyboardAddress: string, value: string, playerName: string)
当用户从剪切板上粘贴文本(shift+ins或鼠标中键)时,[[Block/keyboard/zh|键盘]]会将此信号添加到信号队列。请注意,文本可粘贴的最大长度是有限制的(可在配置文件中修改)。
注意:此信号已经过核查,也就是说,只有当玩家是该电脑的登记用户(或该电脑没有登记任何用户)时,信号才会入队。
红石卡与红石I/O端口
redstone_changed(address: string, side: number, oldValue: number, newValue: number[, color: number])
当传入的红石信号改变时,[[Component/redstone/zh|红石组件]]会将此信号添加到队列。 address是[[Block/redstone io/zh|红石I/O端口]]或检测到红石信号的机器安装的[[Item/redstone card/zh|红石卡]]的地址。side是[[API/sides/zh|sides(方向)]]常量的其中之一,表示哪一侧的红石信号发生了变化。这里的方向是相对于组件容器的相对方向,因此对电脑和机器人而言,具体的值取决于它们的朝向。对于红石I/O端口来说,方向是绝对的。color参数只有在配合集束线缆使用时才会引入,其值表示发生改变的信号的颜色。
运动传感器
motion(address:string, relativeX:number, relativeY:number, relativeZ:number[, entityName:string])
当检测范围内的活动实体移速超过配置的灵敏度时,这个信号会被[[Block/motion sensor/zh|运动传感器]]添加到事件队列。relativeX、relativeY和relativeZ是被检测到的物体相对于运动传感器的位置。
网卡
modem_message(receiverAddress: string, senderAddress: string, port: number, distance: number, ...)
当在开放的端口上收到信息时,[[Item/network card/zh|网卡]](包括无线网卡)会将此信号添加到事件队列。 receiverAddress 是收到信息的网卡的地址,senderAddress是发送信息的网卡的地址。注意,若信息经过了一个或多个[[Block/switch/zh|中继器]],那么发送者的地址可能与实际发送信息的网卡地址不同。port是收到信息的端口。distance参数只有在收到**无线**网络信息时才有效,此时它的值是接收者到发送者之间的距离。对于普通的网卡来说,该值永远为零。其他所有参数都是用户定义的,并对应用户在调用[[Component/modem/zh|modem.send()]] 或 modem.broadcast()时指定的内容,为信息载荷。
机器人
inventory_changed(slot: number)
当机器人的物品栏发生变化时,机器人会将此信号添加到队列。注意,只包括储存在槽位中的物品种类变化。增加或减少一个物品堆中的物品数量并不会触发这个信号。 玩家手动将机器人库存中的一种物品换成另一种(例如火把和木棍)时实际上会触发**两个**信号:一个是移除火把的信号,一个是与此同时放入木棍的信号。使用[[API/robot/zh|robot.transferTo()]]交换两个槽位中的物品甚至会触发**四个**信号——原因同上,但这次涉及到两个槽位间的物品交换。 此外,该信号只针对机器人物品栏中有地址的部分,也就是说,它不会因装备(工具、扩展卡、升级)的变化而被触发。
抽象总线卡
bus_message(protocolId: number, senderAddress: number, targetAddress: number, data: table, metadata: table)
protocolId是所使用的协议的版本。
senderAddress是发送信息的设备地址。
targetAddress是信息的目标设备地址(网络广播为 -1)。
data是包含所发送数据的表。
metadata是特定于发送方设备的数据的表。
车辆
来自Redstone in motion / remain in motion(红石运动机构)
注意:该组件的驱动程序已被移动到附属模组OpenComponents中。 OpenComponents模组的内容已合并进主模组。
carriage_moved(success: boolean[, reason:string[, x:number, y: number, z: number]])
此信号会在车辆组件成功执行移动或模拟移动命令后加入队列。success参数指出移动或模拟移动指令是否执行成功,即车辆是否可移动。若移动失败,reason即为错误信息。取决于错误信息,(x,y,z)会是造成移动失败的方块在世界中的坐标。
目录
| < 100% 15% 15% > | ||
| 组件API | 3D打印机 - 抽象总线 - 无线接入点 - 区块加载器 - 电脑 - 合成 - 数据卡 - 数据库 - 调试 - 无人机 - 驱动器 - EEPROM - 经验 - 文件系统 - 发电机 - 地质分析仪 - GPU - 全息投影仪 - 因特网 - 物品栏控制器 - 拴绳 - 微控制器 - 调制解调器 - 运动传感器 - 导航 - 网络拆分器 - 活塞 - 红石 - 运动红石机构 - 机器人 - 屏幕 - 告示牌 - 储罐控制器 - 牵引光束 - 转运器 - 隧道 - 世界传感器 | |
| ::: | 其它 | 访问组件 - 信号 |
| ::: | 模组联动 | 应用能源 |