openprinter 组件用于控制 OpenPrinter 页面打印机。它可以先在内存中累计页面内容、设置标题、打印最终页面、在配置允许时打印命名牌、扫描放入扫描槽中的已打印页面,并查询当前纸张与墨盒余量。
- 仓库:
openprinter - 组件名:
openprinter - 常见宿主:放置在世界中的 OpenPrinter 打印机
local component = require("component")
local printer = component.openprinter
if not printer then
error("未安装 openprinter 组件")
end该打印机还会挂载一个名为 printer 的内置文件系统环境,其中包含随模组附带的 Lua 程序。
0号槽:黑色墨盒1号槽:彩色墨盒2号槽:输入纸张、纸卷或命名牌3到12号槽:输出槽13号槽:扫描槽,用于读取已打印页面
实际影响:
- 打印页面时,必须同时装有黑墨和彩墨。
- 打印命名牌时,只需要黑墨和放在
2号槽中的原版命名牌。 scan()与scanLine()只会读取13号槽中的物品。
writeln() 并不会立刻打印,而是把内容追加到一个内存中的页面缓冲区:
- 最多
20行 - 每一行同时记录:
- 文本
- 整数颜色
- 对齐字符串
setTitle() 会为下一次打印的页面保存标题。print() 成功后会消耗当前缓冲页,并清空行缓冲。
OpenPrinter.cfg.printerInkUse默认是每个墨盒4000次使用量。- 纸张输入可使用:
- 原版纸张
- OpenPrinter 纸卷
- 纸卷余量返回值为
256 - itemDamage。
- 语法:
printer.greet() - 返回:
string - 用途:返回 OpenPrinter 内置问候语。
固定返回文本:
Lasciate ogne speranza, voi ch'intrate
- 语法:
printer.writeln(text)printer.writeln(text, color)printer.writeln(text, alignment)printer.writeln(text, color, alignment)
- 返回:
true - 用途:向待打印页面缓冲区追加一行内容。
参数说明:
text:string:该行文本内容。color:number可选:行颜色,默认值是0x000000。alignment:string可选:对齐标记字符串,默认值是"left"。
行为说明:
- 当缓冲区已经有
20行时,会抛出To many lines.。 - 源码会原样保存 alignment 字符串,不做合法性校验。
示例:
printer.writeln("季度报告", 0x3366CC, "center")
printer.writeln("第二行")- 语法:
printer.setTitle(title) - 返回:
true - 用途:为下一张打印页面设置标题。
参数说明:
title:string:下一张打印页要使用的页面标题和显示名称。
行为说明:
- 这个标题会在下一次
print()成功时被消耗。
示例:
printer.setTitle("会议记录")- 语法:
printer.print([unused, copies]) - 返回:
- 成功:
true - 兜底路径:
false - 失败:抛出异常
- 成功:
- 用途:在第一个空输出槽中生成一张已打印页面。
参数说明:
unused:any可选:源码里读取但没有实际用途。copies:number可选:从第二个参数读取,默认值是9。
重要行为:
- 当前实现会在生成第一页后立即返回,所以即使传入更大的 copies,一次调用实际上也只会产出一张页面。
- 成功打印后,当前缓冲的行、颜色和对齐数据都会被清空。
- 已设置的标题也会在成功打印后被清空。
所需耗材:
0号槽必须有黑墨1号槽必须有彩墨2号槽必须有纸或纸卷3到12号槽中至少要有一个空槽
常见失败:
Please load Ink.Please load Paper.No empty output slots.
示例:
printer.clear()
printer.setTitle("备忘录")
printer.writeln("你好,世界")
assert(printer.print())- 语法:
printer.printTag(name) - 返回:
true - 用途:在第一个空输出槽中打印一个命名后的原版命名牌。
参数说明:
name:string:要写入命名牌显示名的文本。
前提条件:
- OpenPrinter 配置中的
enableNameTag必须启用 0号槽需要黑墨2号槽需要放入原版命名牌3到12号槽中至少要有一个空槽
常见失败:
Name Tag printing is disabled.Please load Black Ink.Please load Name Tags.No empty output slots.
示例:
assert(printer.printTag("仓库钥匙"))- 语法:
printer.scanLine(index) - 返回:
- 成功:
string - 扫描槽中物品不合法:
false - 扫描槽为空:回调报错
- 成功:
- 用途:读取扫描槽
13中已打印页面的某一行原始内容。
参数说明:
index:number:要读取的行号。
行为说明:
- 打印页中的行键名是
line0到line20。 - 如果
13号槽里放的是非PrintedPage或没有对应 NBT 的页面物品,则返回false。 - 如果
13号槽本身为空,当前实现会先直接解引用该槽位物品,因此会报错,而不是稳定返回false。
示例:
local line = printer.scanLine(0)
print(line)- 语法:
printer.scan() - 返回:
- 成功:
title, lines - 扫描槽中物品不合法:
false - 扫描槽为空:回调报错
- 成功:
- 用途:读取扫描槽
13中的已打印页面。
返回值说明:
title:string|nil:页面标题lines:table:按数字索引保存的原始行字符串表
行为说明:
- 返回的行内容与 NBT 中保存的值完全一致。
- 每个原始行字符串内部带有分隔符,拼接了:
- 文本
- 颜色
- 对齐方式
- 如果
13号槽里放入的不是打印页,则返回false。 - 如果
13号槽为空,源码会在判定前先访问该物品栈,因此会直接报错,而不是返回false。
示例:
local title, lines = printer.scan()
if title ~= false then
print(title)
for index, raw in pairs(lines) do
print(index, raw)
end
end- 语法:
printer.getPaperLevel() - 返回:
- 有纸张输入时:
number - 缺失或物品不合法时:
false
- 有纸张输入时:
- 用途:返回
2号输入槽中的剩余纸张数量。
行为说明:
- 如果是纸卷,返回
256 - itemDamage。 - 如果是普通纸堆,返回当前堆叠数量。
- 语法:
printer.getBlackInkLevel() - 返回:
- 有效黑墨盒:
number - 缺失或物品错误:
false
- 有效黑墨盒:
- 用途:返回黑色墨盒剩余可用次数。
行为说明:
- 返回值是
printerInkUse - itemDamage。
- 语法:
printer.getColorInkLevel() - 返回:
- 有效彩墨盒:
number - 缺失或物品错误:
false
- 有效彩墨盒:
- 用途:返回彩色墨盒剩余可用次数。
行为说明:
- 返回值是
printerInkUse - itemDamage。
- 语法:
printer.charCount(text) - 返回:
number - 用途:统计可见字符数量,并忽略 Minecraft 格式控制码。
参数说明:
text:string:要统计的文本。
行为说明:
- 实现会先去掉匹配
§颜色/样式代码的格式串,再计算剩余长度。
示例:
print(printer.charCount("§aGreen Text"))- 语法:
printer.clear() - 返回:
true - 用途:清空待打印的行缓冲、颜色缓冲、对齐缓冲以及待用标题。
示例:
printer.clear()printer.clear()
printer.setTitle("状态报告")
printer.writeln("系统已上线", 0x00AA00, "left")
printer.writeln("所有节点均可达", 0x000000, "left")
print("Paper:", printer.getPaperLevel())
print("Black ink:", printer.getBlackInkLevel())
print("Color ink:", printer.getColorInkLevel())
assert(printer.print())componentopenprinter-openprinter-xerox