信号是由某些外部来源发送给电脑的信息,可被用于各种用途。它们需要至少有个名字,然后还可以有任意数量的(简单)参数。注意,电脑自己也可以向自己的信号队列中添加信号。
信号可以被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)
address
是新加入的组件的地址,componentType
是组件的类型(例如redstone
或gpu
)。component_available
代替,后者会在添加或改变首选组件时,被component(组件) 库加入信号队列。component_removed(address: string, componentType: string)
address
是被移除的组件的地址,componentType
是组件的类型(如 redstone
或 gpu
)。component_unavailable
代替,后者会在移除首选组件时,被component(组件) 库加入队列。component_available(componentType: string)
component_added
,以免与组件库冲突。component_unavailable(componentType: string)
component_removed
,以免与组件库冲突。touch(screenAddress: string, x: number, y: number, button: number, playerName: string)
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)
x
和y
坐标的值为滚动时鼠标光标的位置。与touch
信号相同,坐标以“字母”为单位。direction
表示滚动的方向,正数代表“向上”,负数代表“向下”。注意,这可能会根据游戏客户端的操作系统或驱动配置而有所不同。playerName
是触发该事件的玩家名字。
对于玩家名,此处也有与touch
处相同的考虑。walk(screenAddress: string, x: number, y: number[, playerName: string])
screenAddress
是产生信号的屏幕的地址。x
和y
坐标是当屏幕为多方块屏幕时子方块的坐标。使用gpu.getSize()可以计算出实际上代表了显示器的哪个区域。touch
处相同的考虑。redstone_changed(address: string, side: number, oldValue: number, newValue: number[, color: number])
address
是红石I/O端口或检测到红石信号的机器安装的红石卡的地址。side
是sides(方向)常量的其中之一,表示哪一侧的红石信号发生了变化。这里的方向是相对于组件容器的相对方向,因此对电脑和机器人而言,具体的值取决于它们的朝向。对于红石I/O端口来说,方向是绝对的。color
参数只有在配合集束线缆使用时才会引入,其值表示发生改变的信号的颜色。motion(address:string, relativeX:number, relativeY:number, relativeZ:number[, entityName:string])
relativeX
、relativeY
和relativeZ
是被检测到的物体相对于运动传感器的位置。modem_message(receiverAddress: string, senderAddress: string, port: number, distance: number, ...)
receiverAddress
是收到信息的网卡的地址,senderAddress
是发送信息的网卡的地址。注意,若信息经过了一个或多个中继器,那么发送者的地址可能与实际发送信息的网卡地址不同。port
是收到信息的端口。distance
参数只有在收到无线网络信息时才有效,此时它的值是接收者到发送者之间的距离。对于普通的网卡来说,该值永远为零。其他所有参数都是用户定义的,并对应用户在调用modem.send() 或 modem.broadcast()
时指定的内容,为信息载荷。inventory_changed(slot: number)
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
)会是造成移动失败的方块在世界中的坐标。