122 lines
3.0 KiB
Lua
122 lines
3.0 KiB
Lua
printUtf8 = load(http.get("https://git.liulikeji.cn/xingluo/ComputerCraft-Utf8/raw/branch/main/utf8ptrint.lua").readAll())()
|
|
|
|
f = fs.open("config","rb")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- 简易空间控制端
|
|
-- 功能: 通过配置文件读取参数,检测按键并发送切换命令
|
|
|
|
-- 配置文件名称
|
|
local CONFIG_FILE = "config"
|
|
|
|
-- 读取配置文件
|
|
local function readConfig()
|
|
if not fs.exists(CONFIG_FILE) then
|
|
-- 创建默认配置文件
|
|
local defaultConfig = {
|
|
rednet_ports = {
|
|
control = 101, -- 控制信道
|
|
response = 102 -- 响应信道
|
|
},
|
|
name = "默认空间" -- 空间名称
|
|
}
|
|
|
|
local file = fs.open(CONFIG_FILE, "w")
|
|
file.write(textutils.serialize(defaultConfig))
|
|
file.close()
|
|
|
|
print("已创建默认配置文件,请编辑 " .. CONFIG_FILE)
|
|
return defaultConfig
|
|
end
|
|
|
|
local file = fs.open(CONFIG_FILE, "r")
|
|
local content = file.readAll()
|
|
file.close()
|
|
|
|
local config = textutils.unserialize(content)
|
|
if not config then
|
|
error("配置文件格式错误!")
|
|
end
|
|
|
|
-- 验证必要字段
|
|
if not config.name then
|
|
error("配置文件中缺少 'name' 字段")
|
|
end
|
|
|
|
if not config.rednet_ports then
|
|
config.rednet_ports = {
|
|
control = 101,
|
|
response = 102
|
|
}
|
|
else
|
|
config.rednet_ports.control = config.rednet_ports.control or 101
|
|
config.rednet_ports.response = config.rednet_ports.response or 102
|
|
end
|
|
|
|
return config
|
|
end
|
|
|
|
-- 初始化红网
|
|
local function initRednet()
|
|
local sides = {"left", "right", "front", "back", "top", "bottom"}
|
|
local modem = nil
|
|
|
|
for _, side in ipairs(sides) do
|
|
if peripheral.getType(side) == "modem" then
|
|
modem = peripheral.wrap(side)
|
|
print("找到网卡在: " .. side)
|
|
break
|
|
end
|
|
end
|
|
|
|
if not modem then
|
|
error("未找到可用的网卡!")
|
|
end
|
|
|
|
return modem
|
|
end
|
|
|
|
-- 发送切换命令
|
|
local function sendSwitchCommand(diskName, modem, controlPort)
|
|
local message = {
|
|
type = "switch_disk",
|
|
disk_name = diskName
|
|
}
|
|
|
|
modem.transmit(controlPort, controlPort, message)
|
|
end
|
|
|
|
-- 主程序
|
|
local function main()
|
|
-- 读取配置
|
|
local config = readConfig()
|
|
|
|
-- 初始化红网
|
|
local modem = initRednet()
|
|
|
|
-- 显示提示信息
|
|
term.clear()
|
|
term.setCursorPos(1, 1)
|
|
|
|
printUtf8("当前空间: "..config.name,colors.white,colors.black)
|
|
printUtf8("如果你被困在此空间中,请按下任意键",colors.white,colors.black)
|
|
printUtf8("我将放出此空间",colors.white,colors.black)
|
|
|
|
|
|
-- 检测按键
|
|
while true do
|
|
local event, key = os.pullEvent("key")
|
|
|
|
-- 发送切换命令
|
|
sendSwitchCommand(config.name, modem, config.rednet_ports.control)
|
|
end
|
|
|
|
end
|
|
|
|
-- 运行程序
|
|
main() |