added SWASS to the repo

This commit is contained in:
Andreas 2022-06-19 06:52:45 +02:00
parent 3efc247f84
commit 606822f872
3 changed files with 309 additions and 0 deletions

View File

@ -0,0 +1,154 @@
local OUTPUT_NAME = "minecraft:barrel_15"
local LESS_COUNT = 20
local output = peripheral.wrap(OUTPUT_NAME)
local containers = { peripheral.find("minecraft:barrel") }
local args = {...}
function searchInv(inv, targetName)
for slot, item in pairs(inv.list()) do
if item.name == targetName then
return slot
end
end
end
function findItem(targetName, count)
if count == nil then count = 64 end
for _, container in pairs(containers) do
if peripheral.getName(container) ~= OUTPUT_NAME then
local slot = searchInv(container ,targetName)
if slot ~= nil then
local moveCount = output.pullItems(peripheral.getName(container), slot, count)
count = count - moveCount
print("Took " .. moveCount .. " from " .. peripheral.getName(container))
if count <= 0 then return end
end
end
end
print("Could not find the remaining " .. count)
end
function store()
for slot, item in pairs(output.list()) do
print("Storing " .. item.name)
for _, container in pairs(containers) do
if peripheral.getName(container) ~= OUTPUT_NAME then
output.pushItems(peripheral.getName(container), slot)
end
end
end
end
function listStorage()
local lineCount = 0
for _, storage in pairs(containers) do
print(peripheral.getName(storage))
lineCount = lineCount + 1
if lineCount >= LESS_COUNT then
print("Press ENTER to continue...")
read()
lineCount = 0
end
end
end
function listItems()
local lineCount = 0
for _, container in pairs(containers) do
for _, item in pairs(container.list()) do
print(item.name .. " x " .. item.count)
lineCount = lineCount + 1
end
if lineCount >= LESS_COUNT then
print("Press ENTER to continue...")
read()
lineCount = 0
end
end
end
function listFull()
for _, container in pairs(containers) do
print(peripheral.getName(container))
print("---------------------------------------------")
local lineCount = 0
for _, item in pairs(container.list()) do
print("\t" .. item.name .. " x " .. item.count)
lineCount = lineCount + 1
if lineCount >= LESS_COUNT then
print("Press ENTER to continue...")
read()
lineCount = 0
end
end
print("Press ENTER to continue...")
read()
end
end
function list(args)
local target = args[2]
if target == nil then
listFull()
return
end
local targets = {
storage = function()
listStorage()
end,
items = function()
listItems()
end
}
targets[target]()
end
-- HANDLERS
local handlers = {
get = function(args)
local targetName = args[2]
local count = tonumber(args[3])
findItem(targetName, count)
end,
store = function(args)
store(args)
end,
list = function(args)
list(args)
end
}
function argParser(args)
local op = args[1]
local handler = handlers[op]
if handler == nil then
print("Invalid operation.")
return
end
handler(args)
end
function main()
argParser(args)
end
main()

View File

@ -0,0 +1,12 @@
{
name = "SWASS",
comment = "Self Whitewashing Advanced Storage System",
author = "Hion-V",
website = "https://git.subsonics.nl/pootercraft/programs/computer/swass/",
newestversion = "1.0",
install = {
scripturl = "https://git.subsonics.nl/pootercraft/programs/raw/branch/master/computer/swass/packageinstall.lua",
type = "script",
},
dependencies = {},
}

View File

@ -0,0 +1,143 @@
--[[
LumberJack Program Installer
Author: Hion-V
Version: 1.0
Lines of Code: 161; Characters: 5541
]]
-- INSTALL PACKAGE INFO
packageName = "SWASS"
packageURL = "https://git.subsonics.nl/pootercraft/programs/raw/branch/master/computer/swass/bin/swass"
packageFilename = "swass"
packageBinPath = "/bin/"
-- Read arguments
args = {...}
-- FILE MANIPULATION FUNCTIONS --
--[[ Checks if file exists
@param String filepath: Filepath to check
@return boolean: Does the file exist?
--]]
function file_exists(filepath)
local f=io.open(filepath,"r")
if f~=nil then
io.close(f)
return true
else
return false
end
end
--[[ Stores a file in a desired location
@param String filepath: Filepath where to create file (if file already exists, it gets overwritten)
@param String content: Content to store in file
--]]
function storeFile(filepath,content)
writefile = fs.open(filepath,"w")
writefile.write(content)
writefile.close()
end
--[[ Reads a file from a desired location
@param String filepath: Filepath to the file to read
@param String createnew: (Optional) Content to store in new file and return if file does not exist. Can be nil.
@return String|boolean content|error: Content of the file; If createnew is nil and file doesn't exist boolean false is returned
--]]
function readFile(filepath,createnew)
readfile = fs.open(filepath,"r")
if readfile == nil then
if not (createnew==nil) then
storeFile(filepath,createnew)
return createnew
else
return false
end
end
content = readfile.readAll()
readfile.close()
return content
end
--[[ Stores a table in a file
@param String filepath: Filepath where to create file (if file already exists, it gets overwritten)
@param Table data: Table to store in file
--]]
function storeData(filepath,data)
storeFile(filepath,textutils.serialize(data):gsub("\n",""))
end
--[[ Reads a table from a file in a desired location
@param String filepath: Filepath to the file to read
@param boolean createnew: If true, an empty table is stored in new file and returned if file does not exist.
@return Table|boolean content|error: Table thats stored in the file; If createnew is false and file doesn't exist boolean false is returned
--]]
function readData(filepath,createnew)
if createnew then
return textutils.unserialize(readFile(filepath,textutils.serialize({}):gsub("\n","")))
else
return textutils.unserialize(readFile(filepath,nil))
end
end
-- HTTP FETCH FUNCTIONS --
--[[ Gets result of HTTP URL
@param String url: The desired URL
@return Table|boolean result|error: The result of the request; If the URL is not reachable, an error is printed in the terminal and boolean false is returned
--]]
function gethttpresult(url)
if not http.checkURL(url) then
print("ERROR: Url '" .. url .. "' is blocked in config. Unable to fetch data.")
return false
end
result = http.get(url)
if result == nil then
print("ERROR: Unable to reach '" .. url .. "'")
return false
end
return result
end
--[[ Download file HTTP URL
@param String filepath: Filepath where to create file (if file already exists, it gets overwritten)
@param String url: The desired URL
@return nil|boolean nil|error: nil; If the URL is not reachable, an error is printed in the terminal and boolean false is returned
--]]
function downloadfile(filepath,url)
result = gethttpresult(url)
if result == false then
return false
end
storeFile(filepath,result.readAll())
end
-- MISC HELPER FUNCTIONS --
--[[ Checks wether a String starts with another one
@param String haystack: String to check wether is starts with another one
@param String needle: String to check wether another one starts with it
@return boolean result: Wether the firest String starts with the second one
]]--
function startsWith(haystack,needle)
return string.sub(haystack,1,string.len(needle))==needle
end
-- MAIN PROGRAMM --
if (args[1]=="install") or (args[1]==nil) then
print("[Installer] Installing",packageName)
if downloadfile(packageBinPath..packageFilename,packageURL)==false then
return false
end
print("[Installer] Successfully installed '"..packageName.."'!")
elseif args[1]=="update" then
print("[Installer] Updating "..packageName.."...")
if downloadfile("bin/dig",packageURL)==false then
fs.move()
return false
end
elseif args[1]=="remove" then
print("[Installer] Uninstalling '"..packageName.."'...")
fs.delete("/bin/dig")
print("[Installer] So long, and thanks for all the fish!")
else
print("[Installer] Invalid argument: " .. args[1])
end