Component/redstone/zh: Difference between revisions

From OpenComputers: Rebooted
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 7: Line 7:
= ==== get''与set''方法重载 =
= ==== get''与set''方法重载 =


自patch release 1.7.3起,红石组件提供以下函数的重载版本:`getInput`、`getOuput`、`setInput`、`getBundledInput`、`getBundledOutput`以及`setBundledOutput`。
自patch release 1.7.3起,红石组件提供以下函数的重载版本:<code>getInput</code>、<code>getOuput</code>、<code>setInput</code>、<code>getBundledInput</code>、<code>getBundledOutput</code>以及<code>setBundledOutput</code>。


= ==== get''与set''调用开销 =
= ==== get''与set''调用开销 =


'''get'''方法为“直接”调用,且几乎无开销。实验中我每秒可以调用20000到22000次`getInput`方法。
'''get'''方法为“直接”调用,且几乎无开销。实验中我每秒可以调用20000到22000次<code>getInput</code>方法。


'''set'''方法并非为“直接”调用,因此每tick最多只能调用一次。也就是说每秒钟可以调用约20次。除了间接成本(消耗剩余的tick)之外,调用'''set'''改变了输出的强度等级后机器上还会有额外的延迟。默认情况下,调用'''set'''每秒可以改变输出约6次。
'''set'''方法并非为“直接”调用,因此每tick最多只能调用一次。也就是说每秒钟可以调用约20次。除了间接成本(消耗剩余的tick)之外,调用'''set'''改变了输出的强度等级后机器上还会有额外的延迟。默认情况下,调用'''set'''每秒可以改变输出约6次。
Line 17: Line 17:
使用这些重载变体的显著优势之一是,API调用开销为每次调用后结算,而不是每次设定数值后结算。
使用这些重载变体的显著优势之一是,API调用开销为每次调用后结算,而不是每次设定数值后结算。


组件名:`redstone`。
组件名:<code>redstone</code>。


回调函数:
回调函数:


* `getInput(side: number): number`
* <code>getInput(side: number): number</code>


<pre>`getInput(): table` 
<pre>getInput(): table
</pre>
</pre>
返回当前输入的(非集束)红石信号值。`getInput(side)`会返回指定[[API/sides/zh|方向]]上的红石信号等级。`getInput()`会返回包含所有方向上红石信号等级的表。 请注意返回的表的索引从0开始。因为表的索引其实是方向的原始值,`sides.bottom`对应了0。 还需注意此函数用到的方向是相对于电脑而言的。即`sides.south`为'''电脑的前方''',而不是世界的南方。类似还有`sides.left`为电脑的左侧,也就是说如果你站在电脑面前的话,在你的右侧。 如果使用了例如RedLogic这样的模组,输入值可能会超出MC原版的[0, 15]范围。
返回当前输入的(非集束)红石信号值。<code>getInput(side)</code>会返回指定[[API/sides/zh|方向]]上的红石信号等级。<code>getInput()</code>会返回包含所有方向上红石信号等级的表。 请注意返回的表的索引从0开始。因为表的索引其实是方向的原始值,<code>sides.bottom</code>对应了0。 还需注意此函数用到的方向是相对于电脑而言的。即<code>sides.south</code>为'''电脑的前方''',而不是世界的南方。类似还有<code>sides.left</code>为电脑的左侧,也就是说如果你站在电脑面前的话,在你的右侧。 如果使用了例如RedLogic这样的模组,输入值可能会超出MC原版的[0, 15]范围。


```lua lua> component.redstone.getInput(sides.left) 15 lua> component.redstone.getInput(sides.right) 4 lua> component.redstone.getInput() {[0]=7, 0, 0, 0, 4, 15} lua> component.redstone.getInput()[sides.bottom] 7 ```
<syntaxhighlight lang="lua">
lua> component.redstone.getInput(sides.left) 15 lua> component.redstone.getInput(sides.right) 4 lua> component.redstone.getInput() {[0]=7, 0, 0, 0, 4, 15} lua> component.redstone.getInput()[sides.bottom] 7
</syntaxhighlight>


* `getOutput(side: number): number`
* <code>getOutput(side: number): number</code>


<pre>`getOutput(): table` 
<pre>getOutput(): table
</pre>
</pre>
获取指定方向上输出的设定值,若不含参数调用则返回所有方向上的设定值。
获取指定方向上输出的设定值,若不含参数调用则返回所有方向上的设定值。


```lua lua> component.redstone.getOutput(sides.left) 7 lua> component.redstone.getOutput() [sides.left] 7 ```
<syntaxhighlight lang="lua">
lua> component.redstone.getOutput(sides.left) 7 lua> component.redstone.getOutput() [sides.left] 7
</syntaxhighlight>


* `setOutput(side: number, value: number): number`
* <code>setOutput(side: number, value: number): number</code>


<pre>`setOutput(values: table): table` 
<pre>setOutput(values: table): table
</pre>
</pre>
设定要发出的红石信号强度。返回'''旧的'''值。配合支持的mod时可以为很大的值。此方法的参数为[[API/sides/zh|方向]]以及要应用到此方向的红石信号强度。`setOutput(values)`这种写法可以在一次调用内设定所有方向(或数个方向)上的红石信号强度。
设定要发出的红石信号强度。返回'''旧的'''值。配合支持的mod时可以为很大的值。此方法的参数为[[API/sides/zh|方向]]以及要应用到此方向的红石信号强度。<code>setOutput(values)</code>这种写法可以在一次调用内设定所有方向(或数个方向)上的红石信号强度。
* `getBundledInput(side: number, color: number): number`
* <code>getBundledInput(side: number, color: number): number</code>


<pre>`getBundledInput(side: number): table` 
<pre>getBundledInput(side: number): table
`getBundledInput(): table` 
getBundledInput(): table
</pre>
</pre>
和`getInput`类似,但适用于集束输入。读取指定[[API/colors/zh|颜色]]对应通道的值。 '''对OC 1.3而言:'''仅可用于2级红石卡。
和<code>getInput</code>类似,但适用于集束输入。读取指定[[API/colors/zh|颜色]]对应通道的值。 '''对OC 1.3而言:'''仅可用于2级红石卡。


<pre>`getBundledInput(side, color)`返回指定方向上输入的指定颜色红石信号强度值。
<pre>getBundledInput(side, color)返回指定方向上输入的指定颜色红石信号强度值。
`getBundledInput(side)`返回一个表(格式为Map[Int, Int]这样的表结构),整合了指定方向上红石信号值,索引值为颜色。
getBundledInput(side)返回一个表(格式为Map[Int, Int]这样的表结构),整合了指定方向上红石信号值,索引值为颜色。
`getBundledInput()`返回所有的红石信号值,包括所有方向以及所有颜色。格式为Map[Int, Map[Int, Int]]这样的两层表结构。外层表的索引值范围是[0, 5],值为[[API/sides/zh|方向]](请记住`sides.bottom`为0)。每个方向对应内层表的数据结构与`getBundledInput(side)`返回值相同。
getBundledInput()返回所有的红石信号值,包括所有方向以及所有颜色。格式为Map[Int, Map[Int, Int]]这样的两层表结构。外层表的索引值范围是[0, 5],值为[[API/sides/zh|方向]](请记住sides.bottom为0)。每个方向对应内层表的数据结构与getBundledInput(side)返回值相同。
</pre>
</pre>


* `getBundledOutput(side: number, color: number): number`
* <code>getBundledOutput(side: number, color: number): number</code>


<pre>`getBundledOutput(side: number): table` 
<pre>getBundledOutput(side: number): table
`getBundledOutput(): table` 
getBundledOutput(): table
</pre>
</pre>
类似`getOutput`,但是适用于集束输出。用于获取先前设定的输出值。 '''对OC 1.3而言:'''仅可用于2级红石卡。
类似<code>getOutput</code>,但是适用于集束输出。用于获取先前设定的输出值。 '''对OC 1.3而言:'''仅可用于2级红石卡。
* `setBundledOutput(side: number, color: number, value: number): number` 类似`setOutput`,但是适用于集束输出。用于设定指定[[API/colors/zh|颜色]]对应通道的输出值。返回之前设定的值。
* <code>setBundledOutput(side: number, color: number, value: number): number</code> 类似<code>setOutput</code>,但是适用于集束输出。用于设定指定[[API/colors/zh|颜色]]对应通道的输出值。返回之前设定的值。


<pre>`setBundledOutput(side, values)`设定一组红石信号值,以颜色为索引,颜色取值范围为[0, 15],`colors.white`为0。提供的值不一定要连续,省略的值将会保持不变。 
<pre>setBundledOutput(side, values)设定一组红石信号值,以颜色为索引,颜色取值范围为[0, 15],colors.white为0。提供的值不一定要连续,省略的值将会保持不变。
`setBundledOutput(values)`让你能在单次API调用中修改所有方向上所有颜色的红石信号值。
setBundledOutput(values)让你能在单次API调用中修改所有方向上所有颜色的红石信号值。
</pre>
</pre>
'''对OC 1.3而言:'''仅可用于2级红石卡。
'''对OC 1.3而言:'''仅可用于2级红石卡。
```lua lua> component.redstone.setBundledOutput(sides.left, { [colors.white] = 15 } ) -- only sets 1 output lua> component.redstone.setBundledOutput({ [sides.left] = { [colors.white] = 15 } } ) -- same as above ```
<syntaxhighlight lang="lua">
lua> component.redstone.setBundledOutput(sides.left, { [colors.white] = 15 } ) -- only sets 1 output lua> component.redstone.setBundledOutput({ [sides.left] = { [colors.white] = 15 } } ) -- same as above
</syntaxhighlight>


* `getComparatorInput(side:number):number`
* <code>getComparatorInput(side:number):number</code>


<pre>获取指定方向上的比较器输入。
<pre>获取指定方向上的比较器输入。
</pre>
</pre>


* `getWirelessInput():number`
* <code>getWirelessInput():number</code>


<pre>获取无线红石输入值。
<pre>获取无线红石输入值。
</pre>
</pre>
'''自OC 1.3起添加:'''仅可用于2级红石卡。
'''自OC 1.3起添加:'''仅可用于2级红石卡。


* `getWirelessOutput():boolean`
* <code>getWirelessOutput():boolean</code>


<pre>获取无线红石输出值。
<pre>获取无线红石输出值。
</pre>
</pre>
'''自OC 1.3起添加:'''仅可用于2级红石卡。
'''自OC 1.3起添加:'''仅可用于2级红石卡。


* `setWirelessOutput(value:boolean):boolean`
* <code>setWirelessOutput(value:boolean):boolean</code>


<pre>设定无线红石输出值。
<pre>设定无线红石输出值。
</pre>
</pre>
'''自OC 1.3起添加:'''仅可用于2级红石卡。
'''自OC 1.3起添加:'''仅可用于2级红石卡。


* `getWirelessFrequency():number`
* <code>getWirelessFrequency():number</code>


<pre>获取当前设定的无线红石频率。
<pre>获取当前设定的无线红石频率。
</pre>
</pre>
'''自OC 1.3起添加:'''仅可用于2级红石卡。
'''自OC 1.3起添加:'''仅可用于2级红石卡。


* `setWirelessFrequency(frequency:number):number`
* <code>setWirelessFrequency(frequency:number):number</code>


<pre>设定要使用的无线红石频率。
<pre>设定要使用的无线红石频率。
</pre>
</pre>
'''自OC 1.3起添加:'''仅可用于2级红石卡。
'''自OC 1.3起添加:'''仅可用于2级红石卡。


* `getWakeThreshold():number`
* <code>getWakeThreshold():number</code>


<pre>获取当前唤醒阈值。
<pre>获取当前唤醒阈值。
</pre>
</pre>


* `setWakeThreshold(threshold:number):number`
* <code>setWakeThreshold(threshold:number):number</code>


<pre>将唤醒阈值设定为给定数字。\\
<pre>将唤醒阈值设定为给定数字。\\
</pre>
</pre>
请注意对于如ProjectRed(红石计划)这样的模组而言,较低的强度值(例如原版最高为15的强度值)可能不会像预期一样起到简单开/关信号的作用(例如用于开门)。因为这些模组的红石信号值范围更大。你可能需要指定一个更大的值,例如255。
请注意对于如ProjectRed(红石计划)这样的模组而言,较低的强度值(例如原版最高为15的强度值)可能不会像预期一样起到简单开/关信号的作用(例如用于开门)。因为这些模组的红石信号值范围更大。你可能需要指定一个更大的值,例如255。
== 使用例: ```lua local component = require("component") local sides = require("sides") local colors = require("colors") local rs = component.redstone --获取首选红石组件 print(rs.getInput(sides.back)) rs.setBundledOutput(sides.bottom, colors.green, rs.getBundledInput(sides.top, colors.red)) ``` ` 目录 ==
== 使用例: <syntaxhighlight lang="lua">
local component = require("component") local sides = require("sides") local colors = require("colors") local rs = component.redstone --获取首选红石组件 print(rs.getInput(sides.back)) rs.setBundledOutput(sides.bottom, colors.green, rs.getBundledInput(sides.top, colors.red))
</syntaxhighlight>
 
== 目录 ==


{{:Component/contents/zh}}
{{:Component/contents/zh}}

Latest revision as of 20:27, 24 August 2026

组件:红石

此组件由红石卡提供。

1级红石卡仅支持MC原版红石功能(单路模拟红石信号)。2级红石卡提供与其他模组红石系统的联动(集束红石和无线红石)。对于集束红石,在Minecraft 1.12版本我们仅支持Project Red(红石计划),在更低版本我们支持:RedLogic、Project Red(1.1版本)、MineFactory Reloaded(我的工厂重制版)。无线红石方面支持以下模组:WR-CBE、SlimeVoid's WR。

==== get与set方法重载

自patch release 1.7.3起,红石组件提供以下函数的重载版本:getInput、getOuput、setInput、getBundledInput、getBundledOutput以及setBundledOutput。

==== get与set调用开销

get方法为“直接”调用,且几乎无开销。实验中我每秒可以调用20000到22000次getInput方法。

set方法并非为“直接”调用,因此每tick最多只能调用一次。也就是说每秒钟可以调用约20次。除了间接成本(消耗剩余的tick)之外,调用set改变了输出的强度等级后机器上还会有额外的延迟。默认情况下,调用set每秒可以改变输出约6次。

使用这些重载变体的显著优势之一是,API调用开销为每次调用后结算,而不是每次设定数值后结算。

组件名:redstone。

回调函数:

  • getInput(side: number): number
getInput(): table

返回当前输入的(非集束)红石信号值。getInput(side)会返回指定方向上的红石信号等级。getInput()会返回包含所有方向上红石信号等级的表。 请注意返回的表的索引从0开始。因为表的索引其实是方向的原始值,sides.bottom对应了0。 还需注意此函数用到的方向是相对于电脑而言的。即sides.south为电脑的前方,而不是世界的南方。类似还有sides.left为电脑的左侧,也就是说如果你站在电脑面前的话,在你的右侧。 如果使用了例如RedLogic这样的模组,输入值可能会超出MC原版的[0, 15]范围。

lua> component.redstone.getInput(sides.left) 15 lua> component.redstone.getInput(sides.right) 4 lua> component.redstone.getInput() {[0]=7, 0, 0, 0, 4, 15} lua> component.redstone.getInput()[sides.bottom] 7
  • getOutput(side: number): number
getOutput(): table

获取指定方向上输出的设定值,若不含参数调用则返回所有方向上的设定值。

lua> component.redstone.getOutput(sides.left) 7 lua> component.redstone.getOutput() [sides.left] 7
  • setOutput(side: number, value: number): number
setOutput(values: table): table

设定要发出的红石信号强度。返回旧的值。配合支持的mod时可以为很大的值。此方法的参数为方向以及要应用到此方向的红石信号强度。setOutput(values)这种写法可以在一次调用内设定所有方向(或数个方向)上的红石信号强度。

  • getBundledInput(side: number, color: number): number
getBundledInput(side: number): table
getBundledInput(): table

和getInput类似,但适用于集束输入。读取指定颜色对应通道的值。 对OC 1.3而言:仅可用于2级红石卡。

getBundledInput(side, color)返回指定方向上输入的指定颜色红石信号强度值。
getBundledInput(side)返回一个表(格式为Map[Int, Int]这样的表结构),整合了指定方向上红石信号值,索引值为颜色。
getBundledInput()返回所有的红石信号值,包括所有方向以及所有颜色。格式为Map[Int, Map[Int, Int]]这样的两层表结构。外层表的索引值范围是[0, 5],值为[[API/sides/zh|方向]](请记住sides.bottom为0)。每个方向对应内层表的数据结构与getBundledInput(side)返回值相同。
  • getBundledOutput(side: number, color: number): number
getBundledOutput(side: number): table
getBundledOutput(): table

类似getOutput,但是适用于集束输出。用于获取先前设定的输出值。 对OC 1.3而言:仅可用于2级红石卡。

  • setBundledOutput(side: number, color: number, value: number): number 类似setOutput,但是适用于集束输出。用于设定指定颜色对应通道的输出值。返回之前设定的值。
setBundledOutput(side, values)设定一组红石信号值,以颜色为索引,颜色取值范围为[0, 15],colors.white为0。提供的值不一定要连续,省略的值将会保持不变。
setBundledOutput(values)让你能在单次API调用中修改所有方向上所有颜色的红石信号值。

对OC 1.3而言:仅可用于2级红石卡。

lua> component.redstone.setBundledOutput(sides.left, { [colors.white] = 15 } ) -- only sets 1 output lua> component.redstone.setBundledOutput({ [sides.left] = { [colors.white] = 15 } } ) -- same as above
  • getComparatorInput(side:number):number
获取指定方向上的比较器输入。
  • getWirelessInput():number
获取无线红石输入值。

自OC 1.3起添加:仅可用于2级红石卡。

  • getWirelessOutput():boolean
获取无线红石输出值。

自OC 1.3起添加:仅可用于2级红石卡。

  • setWirelessOutput(value:boolean):boolean
设定无线红石输出值。

自OC 1.3起添加:仅可用于2级红石卡。

  • getWirelessFrequency():number
获取当前设定的无线红石频率。

自OC 1.3起添加:仅可用于2级红石卡。

  • setWirelessFrequency(frequency:number):number
设定要使用的无线红石频率。

自OC 1.3起添加:仅可用于2级红石卡。

  • getWakeThreshold():number
获取当前唤醒阈值。
  • setWakeThreshold(threshold:number):number
将唤醒阈值设定为给定数字。\\

请注意对于如ProjectRed(红石计划)这样的模组而言,较低的强度值(例如原版最高为15的强度值)可能不会像预期一样起到简单开/关信号的作用(例如用于开门)。因为这些模组的红石信号值范围更大。你可能需要指定一个更大的值,例如255。

== 使用例:

local component = require("component") local sides = require("sides") local colors = require("colors") local rs = component.redstone --获取首选红石组件 print(rs.getInput(sides.back)) rs.setBundledOutput(sides.bottom, colors.green, rs.getBundledInput(sides.top, colors.red))

目录

< 100% 15% 15% >
组件API 3D打印机 - 抽象总线 - 无线接入点 - 区块加载器 - 电脑 - 合成 - 数据卡 - 数据库 - 调试 - 无人机 - 驱动器 - EEPROM - 经验 - 文件系统 - 发电机 - 地质分析仪 - GPU - 全息投影仪 - 因特网 - 物品栏控制器 - 拴绳 - 微控制器 - 调制解调器 - 运动传感器 - 导航 - 网络拆分器 - 活塞 - 红石 - 运动红石机构 - 机器人 - 屏幕 - 告示牌 - 储罐控制器 - 牵引光束 - 转运器 - 隧道 - 世界传感器
::: 其它 访问组件 - 信号
::: 模组联动 应用能源