Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
-- McDonald's V9 with redstone button press local mon = peripheral.wrap("monitor_14") local chest = peripheral.wrap("minecraft:chest_0") local redstoneSide = "back" -- Change this to the side your redstone is connected to mon.setTextScale(0.5) mon.setBackgroundColor(colors.black) mon.clear() local w, h = mon.getSize() local ordersPreparing = {} local ordersReady = {} local nextOrderId = 1 local activeOrders = {} local prepTime = 2 local maxBurgers = 64 * 27 * 2 -- 27 single chest, *2 for double -- Function to check if the depot is empty local function isDepotEmpty() return next(peripheral.wrap("create:depot_0").list()) == nil end -- Get hamburger stock local function getStock() local total = 0 for _, item in pairs(chest.list()) do total = total + item.count end return total end local function drawStockBar() local stock = getStock() local barWidth = w local filledWidth = math.floor((stock / maxBurgers) * barWidth) local barY = h mon.setBackgroundColor(colors.black) mon.setTextColor(colors.white) mon.setCursorPos(1, barY) mon.write(string.rep(" ", barWidth)) if filledWidth > 0 then mon.setBackgroundColor(colors.green) mon.setCursorPos(1, barY) mon.write(string.rep(" ", filledWidth)) end local text = stock .. " burgers" local textX = 1 + math.floor((barWidth - #text) / 2) for i = 1, #text do local charX = textX + i - 1 local char = text:sub(i, i) if charX <= filledWidth then mon.setBackgroundColor(colors.green) else mon.setBackgroundColor(colors.black) end mon.setCursorPos(charX, barY) mon.setTextColor(colors.white) mon.write(char) end mon.setBackgroundColor(colors.black) end local function drawBox(x1, y1, x2, y2, color) mon.setBackgroundColor(color) for y = y1, y2 do mon.setCursorPos(x1, y) mon.write(string.rep(" ", x2 - x1 + 1)) end mon.setBackgroundColor(colors.black) end local function centerText(y, text, color) mon.setTextColor(color or colors.white) local x = math.floor((w - #text) / 2) + 1 mon.setCursorPos(x, y) mon.write(text) end local lastStock = getStock() local function updateStock() local currentStock = getStock() if currentStock ~= lastStock then lastStock = currentStock drawStockBar() end end local stockTimer = os.startTimer(1) local function drawStaticUI() mon.clear() local logo = { " __ __ _____ _ _ _ ", " | \\/ | | __ \\ | | | ( ) ", " | \\ / | ___| | | | ___ _ __ __ _| | __| |/ ___ ", " | |\\/| |/ __| | | |/ _ \\| '_ \\ / _` | |/ _` | / __|", " | | | | (__| |__| | (_) | | | | (_| | | (_| | \\__ \\", " |_| |_|\\___|_____/ \\___/|_| |_|\\__,_|_|\\__,_| |___/"," " } local yOffset = 1 for _, line in ipairs(logo) do centerText(yOffset, line, colors.yellow) yOffset = yOffset + 1 end drawBox(2, 9, math.floor(w/2)-2, h-5, colors.red) drawBox(math.floor(w/2)+2, 9, w-2, h-5, colors.lime) local btnText = " Place Order " local btnX = math.floor((w - #btnText) / 2) local btnY = h - 3 mon.setBackgroundColor(colors.orange) mon.setTextColor(colors.white) for y = btnY - 1, btnY + 1 do mon.setCursorPos(btnX - 1, y) mon.write(string.rep(" ", #btnText + 2)) end mon.setCursorPos(btnX, btnY) mon.write(btnText) drawStockBar() end local function drawTable(x1, y1, x2, y2, color, title) mon.setBackgroundColor(color) mon.setTextColor(colors.white) for y = y1, y2 do mon.setCursorPos(x1, y) mon.write(string.rep(" ", x2 - x1 + 1)) end local tableWidth = x2 - x1 + 1 local titleX = x1 + math.floor((tableWidth - #title) / 2) mon.setCursorPos(titleX, y1) mon.write(title) end local function updateOrdersUI() local leftX1, leftY1 = 3, 10 local leftX2, leftY2 = math.floor(w/2)-3, h-6 local rightX1, rightY1 = math.floor(w/2)+3, 10 local rightX2, rightY2 = w-3, h-6 drawTable(leftX1, leftY1, leftX2, leftY2, colors.red, "Preparing") drawTable(rightX1, rightY1, rightX2, rightY2, colors.lime, "Collect") for i, order in ipairs(ordersPreparing) do mon.setBackgroundColor(colors.red) mon.setTextColor(colors.white) mon.setCursorPos(leftX1 + 1, leftY1 + i) local text = "Order #" .. order mon.write(text .. string.rep(" ", leftX2 - leftX1 - #text)) end for i, order in ipairs(ordersReady) do mon.setBackgroundColor(colors.lime) mon.setTextColor(colors.white) mon.setCursorPos(rightX1 + 1, rightY1 + i) local text = "Order #" .. order mon.write(text .. string.rep(" ", rightX2 - rightX1 - #text)) end drawStockBar() end local function addOrder() local thisOrder = nextOrderId nextOrderId = nextOrderId + 1 table.insert(ordersPreparing, thisOrder) local prepTimer = os.startTimer(prepTime) activeOrders[prepTimer] = {id = thisOrder, stage = "preparing"} updateOrdersUI() end local function isInButton(x, y) local btnText = " Place Order " local btnX = math.floor((w - #btnText) / 2) local btnY = h - 3 return x >= btnX - 1 and x <= btnX + #btnText and y >= btnY - 1 and y <= btnY + 1 end drawStaticUI() updateOrdersUI() -- Start stock timer local stockTimer = os.startTimer(1) while true do local event, arg1, arg2, arg3 = os.pullEvent() if event == "monitor_touch" then local x, y = arg2, arg3 if isInButton(x, y) then addOrder() end elseif event == "timer" then local timerId = arg1 -- === Stock update timer === if timerId == stockTimer then updateStock() stockTimer = os.startTimer(1) -- restart stock timer else local order = activeOrders[timerId] if order then -- Handle redstone pulse off if order.redstoneOff then redstone.setOutput(redstoneSide, false) activeOrders[timerId] = nil -- Preparing → Collect elseif order.stage == "preparing" then -- Remove from preparing table for i, o in ipairs(ordersPreparing) do if o == order.id then table.remove(ordersPreparing, i) break end end -- Add to ready table table.insert(ordersReady, order.id) updateOrdersUI() -- Trigger redstone pulse redstone.setOutput(redstoneSide, true) local pulseTimer = os.startTimer(1) -- must be >= 1 activeOrders[pulseTimer] = {redstoneOff = true} -- Start "check depot" timer after 3s local checkTimer = os.startTimer(3) activeOrders[checkTimer] = {id = order.id, stage = "checkDepot"} activeOrders[timerId] = nil -- Check if depot is empty elseif order.stage == "checkDepot" then if isDepotEmpty() then -- Remove from ready table for i, o in ipairs(ordersReady) do if o == order.id then table.remove(ordersReady, i) break end end updateOrdersUI() activeOrders[timerId] = nil else -- Recheck after 1 second local retryTimer = os.startTimer(1) activeOrders[retryTimer] = {id = order.id, stage = "checkDepot"} activeOrders[timerId] = nil end end end end end end
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)