Compare commits

..

4 Commits

Author SHA1 Message Date
b47a8ad4fa Update shit 2024-02-26 02:58:42 -06:00
a1bb89a4d2 Remove extraneous code 2024-02-26 02:30:48 -06:00
53bfc85164 Improve algo for sorting items away 2024-02-26 02:25:39 -06:00
bcbb419179 Working on a bunch of things 2024-02-26 01:46:12 -06:00
3 changed files with 43 additions and 6 deletions

View File

@@ -4,7 +4,10 @@ This is an implementation of a centralized storage network architecture that use
## Deployment
First, consider using [someone else's project](https://github.com/lewark/inv.lua) instead of this one. It's liable to be a lot better than mine.
1. Deploy a Smart Computer
2. Connect the computer to at least 1 chest and 1 hopper via physical modem lines. Chests need to be attached from the bottom and hoppers from their output direction
3. Put a chest on top of the Smart Computer
4. Deploy the script
4. Install Basalt (`wget run https://basalt.madefor.cc/install.lua release latest.lua`)
5. Deploy the script (as `startup`, of course)

View File

@@ -5,7 +5,6 @@
-- Startup diagnostics
print("Salt's CC Storage Net")
print("Computer " .. os.getComputerID() .. " configured as " .. mode)
-- Global scope locals
local output = peripheral.wrap("top") or error("Put a chest on top of this terminal for output items", 0)
@@ -29,22 +28,57 @@ function pushDepositsToChests()
-- Take all the contents of all connected hoppers and stuff them into any other connected inventory
-- These things are wrapped into tables because that's how you take multiple return values and stuff them in a table, apparently
local hoppers = getDepositHoppers()
local chests = {peripheral.find("inventory", function(name,i) return string.find(name, "minecraft:chest") end)}
local chests = getConnectedChests()
-- For each hopper connected to the network...
for k,hopper in ipairs(hoppers) do
-- For each item in that hopper's inventory...
for hslot,hitem in pairs(hopper.list()) do
-- For each connected "chest"...
for k,chest in ipairs(chests) do
-- Attempt to push our items in
hopper.pushItems(peripheral.getName(chest),hslot)
-- First, make an attempt to find slots that we can shove the item into
for cslot,citem in pairs(chest.list()) do
if
citem["name"] == hitem["name"] and -- We have the same item
citem["count"] < chest.getItemLimit(cslot) -- There's space in this slot
then
hopper.pushItems(peripheral.getName(chest),hslot,hitem["count"],cslot)
end
end
end
-- We've fallen through trying to fill up existing stacks. Fragmentation is not a concern, put it wherever
if hopper.getItemDetail(hslot) then
for k,chest in ipairs(chests) do
hopper.pushItems(peripheral.getName(chest),hslot)
end
end
end
end
end
function requestItem(name, count)
-- Pull a number of an item into the output chest above the machine
remaining = count
local chests = getConnectedChests()
-- For each chest on the network...
for k,chest in ipairs(chests) do
-- For each slot in that chest...
for cslot,citem in pairs(chest.list()) do
if
citem["name"] == name and
citem["count"] > 0
then
desired = math.max(remaining, citem["count"])
output.pullItems(peripheral.getName(chest),cslot,desired)
remaining = remaining - desired
end
if remaining <= 0 then return true end
end
end
if remaining > 0 then return false end
end
-- Application entrypoint
function main()
requestItem("minecraft:sandstone", 12)
while true do
-- Manage inventory cleanup tasks
pushDepositsToChests() -- Take all deposit terminals and push them into the inventory network

View File

@@ -16,5 +16,5 @@ echo "Root: $_ccroot"
for computer in "$masterid"; do
echo "Deploying to: $computer"
mkdir -p "$_ccroot/$computer"
cp common.lua "$_ccroot/$computer/autostart"
cp common.lua "$_ccroot/$computer/startup"
done