From e49ed72cbcf1cf183263a0a7ca054094e04921a8 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sun, 15 Mar 2026 16:22:03 -0400 Subject: [PATCH] Refactor dropper controller to remove rednet dependency and streamline item dispensing logic --- dropperController.lua | 53 ++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/dropperController.lua b/dropperController.lua index 5cecb23..021c985 100644 --- a/dropperController.lua +++ b/dropperController.lua @@ -1,27 +1,15 @@ -- Dropper Controller: Runs on Computer 1 (next to dropper_0) --- Listens for rednet "dispense" messages and fires redstone to the back. +-- Watches the dropper and pulses redstone until it's empty. local REDSTONE_SIDE = "back" -- side facing dropper_0 local PULSE_TIME = 0.3 -- redstone pulse duration in seconds -local PROTOCOL = "inventory" +local POLL_INTERVAL = 0.5 -- how often to check the dropper +local DROPPER_SIDE = "back" -- side where the dropper is (as peripheral) ------------------------------------------------- --- Setup +-- Helpers ------------------------------------------------- --- Open any available modem -local function setupModem() - for _, side in ipairs({"top","bottom","left","right","front","back"}) do - if peripheral.getType(side) == "modem" then - rednet.open(side) - print("[OK] Modem opened on: " .. side) - return true - end - end - print("[ERR] No modem found!") - return false -end - -- Send a redstone pulse to trigger the dropper local function pulseRedstone() redstone.setOutput(REDSTONE_SIDE, true) @@ -29,6 +17,15 @@ local function pulseRedstone() redstone.setOutput(REDSTONE_SIDE, false) end +-- Check if the dropper has any items +local function dropperHasItems() + local dropper = peripheral.wrap(DROPPER_SIDE) + if not dropper then return false end + local contents = dropper.list() + if not contents then return false end + return next(contents) ~= nil +end + ------------------------------------------------- -- Main ------------------------------------------------- @@ -37,28 +34,22 @@ print("=================================") print(" Dropper Controller (ID " .. os.getComputerID() .. ")") print("=================================") print("") -print("Dropper side: " .. REDSTONE_SIDE) -print("Listening for dispense commands...") +print("Redstone side: " .. REDSTONE_SIDE) +print("Watching dropper for items...") print("") -if not setupModem() then - print("Cannot continue without a modem.") - return -end - while true do - local senderID, message, protocol = rednet.receive(PROTOCOL) + if dropperHasItems() then + print("[DISPENSE] Items detected, firing dropper...") - if message == "dispense" then - print(string.format("[RX] Dispense from computer %d", senderID)) - - -- Pulse once per item slot in the dropper to eject everything - -- A dropper has 9 slots; pulse enough times to empty it - for i = 1, 9 do + -- Keep pulsing until the dropper is empty + while dropperHasItems() do pulseRedstone() sleep(0.1) end - print("[OK] Dropper fired (9 pulses)") + print("[OK] Dropper empty.") end + + sleep(POLL_INTERVAL) end