Guía técnica · ComputerCraft + Advanced Peripherals
Computadoras Lua dentro del juego que monitorean y controlan tu base y tu server. Dos consolas listas para armar: un terminal de almacén conectado a tu red AE2/Refined Storage, y un puente que manda los eventos del server a Discord. Bloques, cableado y código completo.
Antes de empezar
Todo esto ya está en el pack (ComputerCraft: Tweaked + Advanced Peripherals). No hay que instalar nada.
Un periférico (ME Bridge, Chat Box, etc.) se conecta a la computadora de dos formas:
En este server ya está habilitado el acceso HTTP de ComputerCraft, por eso el puente a Discord funciona sin tocar nada. En cambio, las consolas que ejecutan comandos del server (kick, dar rango) necesitan una Command Computer y estar en creative — por eso acá van solo consolas de monitoreo, que cualquiera puede usar.
Un monitor que lista los ítems de tu red de almacenamiento ordenados por cantidad, muestra la energía del sistema, y te deja buscar y lanzar autocrafteos desde la computadora.
-- Terminal de almacen AE2 para GalacticForge
-- Requiere: Advanced Computer + ME Bridge + Advanced Monitor
local bridge = peripheral.find("meBridge") -- para Refined Storage: "rsBridge"
local mon = peripheral.find("monitor")
if not bridge then error("No encuentro un ME Bridge conectado") end
if not mon then error("No encuentro un Monitor conectado") end
mon.setTextScale(0.5)
local currentFilter = nil
local function fmt(n)
if n >= 1e9 then return string.format("%.1fB", n/1e9) end
if n >= 1e6 then return string.format("%.1fM", n/1e6) end
if n >= 1e3 then return string.format("%.1fK", n/1e3) end
return tostring(n)
end
local function draw(filter)
local items = bridge.listItems() or {}
local list = {}
for _, it in ipairs(items) do
local label = string.lower(it.displayName or it.name)
if not filter or string.find(label, filter, 1, true) then
list[#list+1] = it
end
end
table.sort(list, function(a,b) return (a.amount or 0) > (b.amount or 0) end)
mon.clear()
local w, h = mon.getSize()
mon.setCursorPos(1,1); mon.setTextColor(colors.orange)
mon.write("GALACTIC FORGE // ALMACEN")
mon.setCursorPos(1,2); mon.setTextColor(colors.gray)
mon.write(("Tipos: %d Energia: %s AE"):format(#list, fmt(bridge.getEnergyStorage() or 0)))
local row = 4
for i = 1, math.min(#list, h-4) do
local it = list[i]
local name = it.displayName or it.name
if #name > w-10 then name = name:sub(1, w-11).."." end
mon.setCursorPos(1, row); mon.setTextColor(colors.white); mon.write(name)
local amt = fmt(it.amount or 0)
mon.setCursorPos(w-#amt+1, row)
mon.setTextColor(it.isCraftable and colors.lime or colors.white)
mon.write(amt)
row = row + 1
end
end
local function refresher()
while true do pcall(draw, currentFilter); sleep(5) end
end
local function consola()
while true do
term.setTextColor(colors.orange); write("\nbuscar> "); term.setTextColor(colors.white)
local input = read()
if input == "" then
currentFilter = nil
elseif input:sub(1,6) == "craft " then
local q = input:sub(7) -- usar el registry name, ej: minecraft:iron_ingot
local ok, err = bridge.craftItem({name = q, count = 1})
print(ok and ("Crafteo iniciado: "..q) or ("No se pudo: "..tostring(err)))
else
currentFilter = string.lower(input)
end
end
end
print("Terminal lista. Escribi para buscar, 'craft <registryname>' para craftear, Enter vacio limpia.")
parallel.waitForAny(refresher, consola)
¿Usas Refined Storage en vez de AE2? Cambia solo la primera línea: peripheral.find("rsBridge"). Los métodos (listItems, craftItem, getEnergyStorage) son los mismos. Para craftear, el registry name exacto lo ves buscando el ítem en JEI (esquina, se copia con el nombre técnico).
Manda al canal de Discord lo que pasa en el server: mensajes del chat, y quién entra y sale. Todo con un webhook, sin bot ni mod de Java.
-- Puente Minecraft -> Discord para GalacticForge
-- Requiere: Advanced Computer + Chat Box + Player Detector
local WEBHOOK = "https://discord.com/api/webhooks/PEGA_TU_WEBHOOK_ACA"
local SERVER = "GalacticForge"
local chat = peripheral.find("chatBox")
local det = peripheral.find("playerDetector")
if not chat then error("No encuentro un Chat Box") end
if not det then error("No encuentro un Player Detector") end
local function post(text)
local body = textutils.serializeJSON({ username = SERVER, content = text })
local res, err = http.post(WEBHOOK, body, { ["Content-Type"] = "application/json" })
if res then res.close() else print("Webhook fallo: "..tostring(err)) end
end
post(":satellite: Puente conectado")
print("Puente a Discord activo. Ctrl+T para cortar.")
while true do
local event, a, b = os.pullEvent()
if event == "chat" then
post(("**%s**: %s"):format(a, b)) -- a=usuario, b=mensaje
elseif event == "playerJoin" then
post((":green_circle: **%s** se conecto"):format(a))
elseif event == "playerLeave" then
post((":red_circle: **%s** se desconecto"):format(a))
end
end
Que arranque solo con la computadora: guarda el programa como startup (sin extensión) en vez de discord, o crea un archivo startup.lua con shell.run("discord"). Así se reinicia solo tras un reboot del server.
Límites y alcance. El Chat Box captura mensajes de jugadores, no mensajes del sistema — así que las muertes no se detectan por acá (se podrían agregar con lógica extra sobre el Player Detector). Discord limita los webhooks a ~30 mensajes por minuto: si el chat es muy activo, conviene agregar una cola. Este puente es de una vía (Minecraft → Discord); el camino inverso necesitaría un bot con token.
Para seguir
Advanced Peripherals trae más piezas para futuras consolas. Estas son las más útiles con los mods del pack.
| Periférico | Sirve para |
|---|---|
| energyDetector | Medir energía que pasa (FE/RF) — monitor de generación/consumo de la base. |
| redstoneIntegrator | Emitir redstone por programa: prender/apagar granjas y máquinas por horario o condición. |
| inventoryManager | Leer y mover ítems del inventario de un jugador (con brazalete). |
| environmentDetector | Hora, clima, dimensión, luna — para automatizaciones ambientales. |
| geoScanner | Escanear bloques alrededor: buscar menas para minería automatizada. |
Documentación completa de la API: docs.advanced-peripherals.de · ComputerCraft: tweaked.cc