added lumberjack program

This commit is contained in:
Andreas 2022-06-19 05:50:16 +02:00
parent 8ee6789265
commit 3efc247f84
3 changed files with 271 additions and 0 deletions

View File

@ -0,0 +1,116 @@
starttime = os.epoch("local")
function printf(data)
print(textutils.serialize(data))
end
function step()
turtle.digUp()
turtle.up()
turtle.dig()
turtle.turnRight()
turtle.dig()
turtle.turnRight()
turtle.dig()
turtle.turnRight()
turtle.dig()
turtle.turnRight()
end
function chop()
turtle.dig()
turtle.forward()
while turtle.detectUp() do
step()
end
end
function descend()
while not turtle.detectDown() do
turtle.down()
end
end
function takeItemOutOfChestSlot(chestSlot,turtleSlot,chestDir)
local SLOT_TURTLE_EMPTY_CHEST = 16
local chest = peripheral.wrap(chestDir)
turtle.select(SLOT_TURTLE_EMPTY_CHEST)
turtle.placeUp()
sleep(.2)
local topchest = peripheral.wrap("top");
chest.pushItems(peripheral.getName(topchest),chestSlot)
turtle.select(turtleSlot)
turtle.suckUp()
turtle.select(SLOT_TURTLE_EMPTY_CHEST)
turtle.digUp()
turtle.select(turtleSlot)
end
function dumpItems()
turtle.turnLeft();turtle.turnLeft()
for i=1,15 do
turtle.select(i)
turtle.drop()
end
turtle.turnLeft();turtle.turnLeft()
end
function replant()
local chestDir = "back"
local chest = peripheral.wrap(chestDir)
local itemlist = chest.list()
local saplingIndex = 0
for _ in pairs(itemlist) do
print(textutils.serialise(_))
if itemlist[_].name == "minecraft:oak_sapling" then
saplingIndex = _
end
end
if saplingIndex > 0 then
-- peripheral.call(chest, "pullitems", )
printf(saplingIndex)
takeItemOutOfChestSlot(saplingIndex,15,"back")
end
turtle.select(15)
turtle.place()
turtle.turnLeft();turtle.turnLeft()
turtle.drop()
turtle.turnLeft();turtle.turnLeft()
turtle.select(1)
-- peripheral.getMethods()
end
function chestTest(chestSlot)
local chest = peripheral.wrap("back");
turtle.select(17)
turtle.placeUp()
local topchest = peripheral.wrap("top");
chest.pushItems(peripheral.getName(topchest),chestSlot)
end
function waitForTree()
while true do
turtle.suck()
has_block, data = turtle.inspect()
if has_block then
if(data) then
if data.tags["minecraft:mineable/axe"] == true then
print((os.epoch("local")-starttime)/1000,"choppable")
if(data.name ~= "minecraft:oak_sapling") then
chop()
descend()
turtle.back()
dumpItems()
replant()
end
print(data.name)
else
print((os.epoch("local")-starttime)/1000,"not choppable")
end
end
end
sleep(1)
end
end
waitForTree()

View File

@ -0,0 +1,12 @@
{
name = "LumberJack",
comment = "Turtle Tree ChippyChoppy Program",
author = "Hion-V",
website = "https://git.subsonics.nl/pootercraft/programs/turtle/lumberjack/",
newestversion = "1.0",
install = {
scripturl = "https://git.subsonics.nl/pootercraft/programs/raw/branch/master/turtle/lumberjack/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 = "LumberJack"
packageURL = "https://git.subsonics.nl/pootercraft/programs/raw/branch/master/turtle/lumberjack/bin/lumberjack"
packageBinPath = "/bin/"
packageFilename = "lumberjack"
-- 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