Advertisement
goldfiction

MCjPAhyz cc glass os

Sep 28th, 2023
781
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.92 KB | None | 0 0
  1. -- MCjPAhyz
  2.  
  3. local p = peripheral.wrap("back")
  4. p.clear()
  5. local mon = {}
  6.  
  7. mon.minY = 8 * 9
  8. mon.maxY = 24 * 9 + 4
  9. mon.minX = 0 * 6
  10. mon.maxX = 68 * 6 + 4
  11. mon.rows = math.floor((mon.maxY - mon.minY) / 9)
  12. mon.cols = math.floor((mon.maxX - mon.minX) / 6)
  13. mon.lines = {}
  14. mon.mtrx = {}
  15. for i = 1, mon.rows do
  16.  mon.mtrx[i] = {}
  17. end
  18. mon.scale = 1
  19. mon.curr = 1
  20. mon.curc = 1
  21. mon.cur = p.addText(math.floor((mon.curc - 1) * 6 * mon.scale) + mon.minX + 2, math.floor(((mon.curr - 1) * 9 + 1) * mon.scale) + mon.minY + 2, " ", 0)
  22. mon.colors = {[1] = 0xffffff, [2] = 0xffc125, [4] = 0xff3e96, [8] = 0x836fff, [16] = 0xffff00, [32] = 0x00ff00, [64] = 0xff82ab, [128] = 0x444444, [256] = 0x999999, [512] = 0x009acd, [1024] = 0x9400d3, [2048] = 0x0000ff, [4096] = 0x8b5a2b, [8192] = 0x458b00, [16384] = 0xff0000, [32768] = 0}
  23.  
  24. mon.bgColor = 0
  25. mon.color = 0xffffff
  26. mon.box = p.addBox(mon.minX, mon.minY, mon.maxX - mon.minX + 1, mon.maxY - mon.minY + 1, mon.bgColor, 0)
  27. mon.box.setZIndex(-1)
  28.  
  29. mon.write = function(s)
  30.  for i = 1, #s do
  31.   local x = math.floor((mon.curc - 1) * 6 * mon.scale) + mon.minX + 2
  32.   local y = math.floor((mon.curr - 1) * 9 * mon.scale) + mon.minY + 2
  33.   local j = 1
  34.   local t = mon.mtrx[mon.curr][mon.curc]
  35.   if t then
  36.    t.delete()
  37.   end
  38.   t = p.addText(x, y, s:sub(i,i), mon.color)
  39.   mon.mtrx[mon.curr][mon.curc] = t
  40.   mon.lines[#mon.lines + 1] = t
  41.   mon.curc = mon.curc + 1
  42.   if mon.curc > mon.cols then
  43.    mon.curc = 1
  44.    if mon.curr == mon.rows then
  45.     return
  46.    else
  47.     mon.curr = mon.curr + 1
  48.    end
  49.   end
  50.  end
  51.  mon.cur.setX(math.floor((mon.curc - 1) * 6 * mon.scale) + mon.minX + 2)
  52.  mon.cur.setY(math.floor(((mon.curr - 1) * 9 + 1) * mon.scale) + mon.minY + 2)
  53. end
  54.  
  55. mon.clear = function()
  56.  for i = 1, #mon.lines do
  57.   mon.lines[i].delete()
  58.   mon.lines[i] = nil
  59.  end
  60. end
  61.  
  62. mon.clearLine = function(n)
  63.  local y = math.floor(((n or mon.curr) - 1) * 9 * mon.scale) + mon.minY + 2
  64.  local i = 1
  65.  while i <= #mon.lines do
  66.   if not mon.lines[i].getY() or mon.lines[i].getY() == y then
  67.    mon.lines[i].delete()
  68.    mon.lines[i] = mon.lines[#mon.lines]
  69.    mon.lines[#mon.lines] = nil
  70.   else
  71.    i = i + 1
  72.   end
  73.  end
  74. end
  75.  
  76. mon.scroll = function()
  77.  mon.clearLine(1)
  78.  local i = 1
  79.  while i <= #mon.lines do
  80.   if not mon.lines[i].getY() then
  81.    mon.lines[i].delete()
  82.    mon.lines[i] = mon.lines[#mon.lines]
  83.    mon.lines[#mon.lines] = nil
  84.   else
  85.    mon.lines[i].setY(mon.lines[i].getY() - (9 * mon.scale))
  86.    i = i + 1
  87.   end
  88.  end
  89.  for i = 1, mon.rows - 1 do
  90.   mon.mtrx[i] = mon.mtrx[i + 1]
  91.  end
  92.  mon.mtrx[mon.rows] = {}
  93. end
  94.  
  95. mon.setBackgroundColor = function(n)
  96.  if mon.colors[n] then
  97.   n = mon.colors[n]
  98.  end
  99.  mon.bgColor = n
  100.  mon.box.setColor(n)
  101.  mon.box.setOpacity(n == 0 and 0 or 0.40)
  102. end
  103.  
  104. mon.setBackgroundColour = mon.setBackgroundColor
  105.  
  106. mon.setTextColor = function(n)
  107.  if mon.colors[n] then
  108.   n = mon.colors[n]
  109.  end
  110.  mon.color = n
  111.  mon.cur.setColor(n)
  112. end
  113.  
  114. mon.setTextColour = mon.setTextColor
  115.  
  116. mon.setTextScale = function(n)
  117.  mon.rows = math.floor((mon.maxY - mon.minY - 4)/(9 * n))
  118.  mon.cols = math.floor((mon.maxX - mon.minX - 4)/(6 * n))
  119.  local y = nil
  120.  local x = nil
  121.  if n > mon.scale then
  122.   y = math.floor((mon.rows + 1) * 9 * mon.scale) + mon.minY + 2
  123.   x = math.floor((mon.cols + 1) * 6 * mon.scale) + mon.minX + 2
  124.  end
  125.  local i = 1
  126.  while i < #mon.lines do
  127.   if not mon.lines.getY() or y and (mon.lines[i].getY() >= y or mon.lines[i].getX() >= x) then
  128.    mon.lines[i].delete()
  129.    mon.lines[i] = mon.lines[#mon.lines]
  130.    mon.lines[#mon.lines] = nil
  131.   else
  132.    local ny = (mon.lines[i].getY() - mon.minY - 2) / mon.scale * n
  133.    local nx = (mon.lines[i].getX() - mon.minX - 2) / mon.scale * n
  134.    mon.lines[i].setY(ny)
  135.    mon.lines[i].setX(nx)
  136.    mon.lines[i].setScale(n)
  137.    i = i + 1
  138.   end
  139.  end
  140.  for i = 1, mon.rows do
  141.   if not mon.mtrx[i] then
  142.    mon.mtrx[i] = {}
  143.   end
  144.  end
  145.  mon.scale = n
  146.  mon.cur.setX(math.floor((mon.curc - 1) * 6 * mon.scale) + mon.minX + 2)
  147.  mon.cur.setY(math.floor(((mon.curr - 1) * 9 + 1) * mon.scale) + mon.minY + 2)
  148. end
  149.  
  150. mon.setCursorPos = function(x,y)
  151.  mon.curc = x
  152.  mon.curr = y
  153.  mon.cur.setX(math.floor((mon.curc - 1) * 6 * mon.scale) + mon.minX + 2)
  154.  mon.cur.setY(math.floor(((mon.curr - 1) * 9 + 1) * mon.scale) + mon.minY + 2)
  155. end
  156.  
  157. mon.getCursorPos = function()
  158.  return mon.curc, mon.curr
  159. end
  160.  
  161. mon.getSize = function()
  162.  return mon.cols, mon.rows
  163. end
  164.  
  165. local blink = true
  166. local blinkstate = false
  167. local nextBlink = os.startTimer(0.3)
  168. mon.setCursorBlink = function(b)
  169.  blink = b
  170. end
  171.  
  172. local function doBlink()
  173.  blinkstate = not blinkstate
  174.  mon.cur.setText(blinkstate and blink and "_" or " ")
  175.  nextBlink = os.startTimer(0.3)
  176. end
  177.  
  178. mon.isColor = function() return true end
  179. mon.isColour = function() return true end
  180.  
  181. local pullEvent = os.pullEvent
  182. local charQueue = ""
  183. os.pullEvent = function(...)
  184.  while true do
  185.   if charQueue ~= "" then
  186.    local c = charQueue:sub(1,1)
  187.    charQueue = charQueue:sub(2)
  188.    if c == "\\" then
  189.     c = charQueue:sub(1,1)
  190.     charQueue = charQueue:sub(2)
  191.     if c == "\\" then
  192.      return "char",c
  193.     elseif c == "n" then
  194.      return "key",28
  195.     elseif c == "b" then
  196.      return "key",14
  197.     elseif c == "t" then
  198.      error("Terminated")
  199.     elseif c == "r" then
  200.      os.reboot()
  201.     elseif c == "s" then
  202.      os.shutdown()
  203.     end
  204.    end
  205.    return "char",c
  206.   end
  207.   local t = {pullEvent(...)}
  208.   if t[1] == "chat_command" then
  209.    charQueue = charQueue..t[2]
  210.    local c = charQueue:sub(1,1)
  211.    charQueue = charQueue:sub(2)
  212.    if c == "\\" then
  213.     charQueue = c..charQueue
  214.    else
  215.     return "char",c
  216.    end
  217.   elseif t[1] == "timer" and t[2] == nextBlink then
  218.    doBlink()
  219.   else
  220.    return unpack(t)
  221.   end
  222.  end
  223. end
  224.  
  225. local reboot = os.reboot
  226. os.reboot = function()
  227.  p.clear()
  228.  mon.box.delete()
  229.  mon.cur.delete()
  230.  reboot()
  231. end
  232.  
  233. local shutdown = os.shutdown
  234. os.shutdown = function()
  235.  p.clear()
  236.  shutdown()
  237. end
  238.  
  239. term.redirect(mon)
  240.  
  241. print("Welcome to CcGlasses!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement