potatOS/src/bin/potatoplex.lua

246 lines
6.4 KiB
Lua

-- POTATOPLEX: The best potatOS feature
local args = {...}
local targs = table.concat(args, " ")
local text
if args[1] and fs.exists(args[1]) then
local f = fs.open(args[1], "r")
text = f.readAll()
f.close()
end
local function randpick(l)
if #l == 1 then return l[1] end
return l[math.random(1, #l)]
end
local function potatoplex_is_installed()
if fs.isDir "startup" then return false end
local f = fs.open("startup", "r")
if not f then return false end
return f.readAll():match "POTATOPLEX"
end
if commands then
print "Enabling Command Potatoplex mode. Do not attempt to resist."
_G.os.pullEvent = coroutine.yield
if not potatoplex_is_installed() then
print "Installing as startup"
settings.set("shell.allow_startup", true)
settings.set("shell.allow_disk_startup", false)
settings.save ".settings"
if fs.exists "startup" then fs.delete "startup" end
local f = fs.open("startup", "w")
f.write([[
-- POTATOPLEX!!!!!
_G.os.pullEvent = coroutine.yield
local h = http.get "https://pastebin.com/raw/wYBZjQhN"
local t = h.readAll()
h.close()
local fn, err = load(t, "=potatoplex")
if not fn then error(err)
else fn() end
]])
end
local items = {
"minecraft:diamond_block",
"minecraft:emerald_block",
"minecraft:redstone_block",
"minecraft:lapis_block",
"minecraft:iron_block",
"minecraft:gold_block",
"minecraft:command_block",
"computronics:oc_special_parts",
"opencomputers:casecreative",
{"opencomputers:material", 25},
{"opencomputers:material", 22},
{"opencomputers:material", 19},
{"opencomputers:component", 19},
{"opencomputers:component", 18},
{"opencomputers:component", 12},
{"opencomputers:component", 32},
{"opencomputers:card", 0},
{"plethora:module", 7},
{"plethora:module", 1},
"bibliocraft:bookcasecreative",
"minecraft:nether_star",
"quark:pirate_hat"
}
local baseblocks = {
"minecraft:wool",
"minecraft:concrete",
"minecraft:concrete_powder",
"chisel:antiblock",
"chisel:energizedvoidstone",
"chisel:voidstonerunic",
"chisel:voidstone",
"minecraft:end_portal",
"quark:stained_clay_tiles",
"quark:stained_planks",
"quark:quilted_wool",
"quark:cavecrystal",
"minecraft:stained_hardened_clay",
"minecraft:stained_glass",
"minecraft:stained_glass_pane",
{"minecraft:white_glazed_terracotta", 0},
{"minecraft:orange_glazed_terracotta", 0},
{"minecraft:magneta_glazed_terracotta", 0},
{"minecraft:light_blue_glazed_terracotta", 0},
{"minecraft:yellow_glazed_terracotta", 0},
{"minecraft:lime_glazed_terracotta", 0},
{"minecraft:pink_glazed_terracotta", 0},
{"minecraft:gray_glazed_terracotta", 0},
{"minecraft:silver_glazed_terracotta", 0},
{"minecraft:cyan_glazed_terracotta", 0},
{"minecraft:purple_glazed_terracotta", 0},
{"minecraft:blue_glazed_terracotta", 0},
{"minecraft:brown_glazed_terracotta", 0},
{"minecraft:green_glazed_terracotta", 0},
{"minecraft:red_glazed_terracotta", 0},
{"minecraft:black_glazed_terracotta", 0},
{"minecraft:bedrock", 0},
{"minecraft:diamond_block", 0},
{"minecraft:emerald_block", 0},
{"minecraft:redstone_block", 0},
{"minecraft:lapis_block", 0},
{"minecraft:iron_block", 0},
{"minecraft:gold_block", 0}
}
local blocks = {}
for _, b in pairs(baseblocks) do
if type(b) == "table" then table.insert(blocks, b)
else
for i = 0, 15 do
table.insert(blocks, {b, i})
end
end
end
local x, y, z = commands.getBlockPosition()
local cx, cz = math.floor(x / 16) * 16, math.floor(z / 16) * 16
local give_items = not targs:match "scrooge"
while true do
for i = 1, 8 do
local rx, ry, rz = math.random(cx, cx + 15), math.random(0, 255), math.random(cz, cz + 15)
local pick = randpick(blocks)
local meta, block = pick[2], pick[1]
if rx ~= x and ry ~= y and rz ~= z then
commands.execAsync(("setblock %d %d %d %s %d replace"):format(rx, ry, rz, block, meta))
end
end
if give_items and math.random(0, 1000) == 42 then
print "POTATO FESTIVAL!"
for i = 1, 36 do
local pick = randpick(items)
local meta = 0
local item = pick
if type(pick) == "table" then meta = pick[2] item = pick[1] end
commands.execAsync(("give @a %s 64 %d"):format(item, meta))
end
end
sleep()
end
end
local monitors = {peripheral.find "monitor"}
local signs = {peripheral.find "minecraft:sign"}
table.insert(monitors, term.current())
local duochrome_mode = targs:find "duochrome" ~= nil
local function random_color()
if duochrome_mode then
if math.random(0, 1) == 0 then return colors.black
else return colors.white end
end
return math.pow(2, math.random(0, 15))
end
local function random_segment(text)
local start = math.random(1, #text)
return text:sub(start, math.random(start, #text))
end
local sixel_mode = targs:find "sixel" ~= nil
local min, max = 0, 255
if sixel_mode then
min, max = 128, 159
end
local function random_char()
return string.char(math.random(min, max))
end
local colors = {}
if duochrome_mode then
colors = {"0", "f"}
else
for i = 0, 15 do table.insert(colors, ("%x"):format(i)) end
end
local function random_pick(list)
return list[math.random(1, #list)]
end
local function one_pixel(m, x, y)
m.setCursorPos(x, y)
if text then
m.setBackgroundColor(random_color())
m.setTextColor(random_color())
m.write(random_segment(text))
else
m.blit(random_char(), random_pick(colors), random_pick(colors))
end
end
local chat_colors = {
"k",
"l",
"m",
"n",
"o"
}
for i = 0, 16 do table.insert(chat_colors, string.format("%x", i)) end
local hook = _G.potatoplex_hook
local slowpalette_mode = targs:find "slowpalette" ~= nil
local function run(m)
local w, h = m.getSize()
for i = 1, 16 do
local x, y = math.random(1, w), math.random(1, h)
one_pixel(m, x, y)
end
if not slowpalette_mode or math.random(0, 20) == 13 then
m.setPaletteColor(random_color(), math.random(), math.random(), math.random())
end
if hook then hook(m) end
end
for k, v in pairs(monitors) do if v.setTextScale then v.setTextScale(1) end end
local function line()
local out = "\167" .. random_pick(chat_colors)
for i = 1, 32 do
out = out .. random_char()
end
return out
end
while true do
for k, v in pairs(monitors) do
pcall(run, v)
sleep(0)
end
for k, v in pairs(signs) do
pcall(v.setSignText, line(), line(), line(), line())
sleep()
end
end