ComputerCraft Archive

shape/size adaptive tree farm

turtle mining unknown forum

Description

advanced smart adaptive wood farming turtle by Ardevlirn

Installation

Copy one of these commands into your ComputerCraft terminal:

Pastebin:pastebin get si0JTDx0 shape/size_adaptive_tree_farm
wget:wget https://pastebin.com/raw/si0JTDx0 shape/size_adaptive_tree_farm
Archive:wget https://cc.shobie.xyz/cc/get/pb-si0JTDx0 shape/size_adaptive_tree_farm
Quick Install: wget https://cc.shobie.xyz/cc/get/pb-si0JTDx0 shape/size adaptive tree farm

Usage

Run the program after downloading

Tags

turtleminingforumturtle-programs

Source

View Original Source

Code Preview

--advanced smart adaptive wood farming turtle by Ardevlirn
--Instruction:
--Create a path using cobblestone
--place dirt around the path (only at the same Y pos than the path)
--place turtle on the path
--place 3 separate chest next to the turtle and the path
--on top of the harvest chest put nothing, 
--on top of sapling chest put cobblestone_wall
--on top of fuel chest put stoneslab
--place fuel in slot 1 and at least 4 sappling in slot 2
--those next variable can be changed
--(will say when no more variable can be changed):
--Will try to refuel when Fuel Level is under this amount :
local minFuelForRefuel = 800
--Will search the chest if there is less than this amount of fuel item in inventory:
local minFuelInInventory = 12
--If set to true will search the chest when under this amount of sappling left in inventory :
local goSearchSapling = false
local minSaplingInInventory = 3
--PS: While searching for the chest the turtle will no longer place sapling
--and will not cut tree down
--main variable:
local minSlot,maxSlot = 3,16 --slot range in which the harvest is stocked
local chestName = "minecraft:chest"
local fuelName = "minecraft:coal"
local fuelSlot = 1
local saplingName = "minecraft:sapling"
local saplingSlot = 2
local woodName = "minecraft:log"
local leavesName = "minecraft:leaves"
local pathName = "minecraft:cobblestone"
local fuelChest = "minecraft:stone_slab"
local saplingChest = "minecraft:cobblestone_wall"
--no more variable to change
-------------------------------------------------------------

local function Energy()
    turtle.select(fuelSlot)
    if turtle.getFuelLevel() ~= "unlimited" and turtle.getFuelLevel() < minFuelForRefuel then
		local charbonNumb = turtle.getItemCount()
		if charbonNumb > 12 then
			turtle.refuel(10)
		else
			turtle.refuel(charbonNumb-2)
		end
	end
end

local function chemin()
        local success, data = turtle.inspectDown()
        if success and data.name == pathName then
			return true
		else
			return false
		end
end

local function testBlock(nameID)
        local success, data = turtle.inspect()
        if success and data.name == nameID then
			return true
		else
			return false
		end
end
 
local function plante()
        turtle.select(saplingSlot)
		if turtle.getItemCount(saplingSlot) > 2 then
			turtle.place()
		end
end

local function detectCoupe()
	local success, blockUp = turtle.inspectUp()
	if blockUp.name == woodName or blockUp.name == leavesName then
		return true
	else
		return false
	end
end

local function preventStuck()
	local success,data = turtle.inspectDown()
	if data.name == woodName or data.name == leavesName then
		return true
	else
		return false
	end
end

local function coupe()
        turtle.select(1)
			turtle.dig()
			turtle.forward()
            while detectCoupe() do
                    turtle.digUp()
                    turtle.up()
					for i=0,3 do
						if turtle.detect() then
							if testBlock(woodName) then
							
							elseif testBlock(leavesName) then
								turtle.dig()
							end
						end
						turtle.turnRight()
					end
            end
			if not turtle.back() then
				turtle.turnRight()
				turtle.turnRight()
				turtle.dig()
				turtle.forward()
				turtle.turnRight()
				turtle.turnRight()
			end
            while not chemin() do
					if preventStuck() then
						turtle.digDown()
					end
                    turtle.down()
            end
			plante()
			turtle.suck()
end

local function vide(itemID)
		local selecteddItem = 0
        for slot = minSlot,maxSlot do
                turtle.select(slot)
				selecteddItem = turtle.getItemDetail()
				if itemID and selecteddItem then
				 	if selecteddItem.name == itemID then
                		turtle.drop()
					elseif itemID == "special" then
						if selecteddItem.name ~= saplingName and selecteddItem.name ~= fuelName then
							turtle.drop()
						end
					end
				else
                	turtle.drop()
				end
        end
end

local function provision()
	turtle.digUp()
	turtle.up()
	local success,chestType = turtle.inspect()
	turtle.down()
	if success and chestType then
		if chestType.name==fuelChest then
			turtle.select(fuelSlot)
			turtle.suck()
			vide(fuelName)
		elseif chestType.name==saplingChest then
			turtle.select(saplingSlot)
			turtle.suck()
			vide(saplingName)
		end
	else
		vide("special")
	end
end

local function gocoffre()
	local foundChest = false
		while foundChest ~= true do
			for i=0,3 do
				if testBlock(chestName) then
					foundChest = true
					break
				else
					turtle.turnRight()
				end
			end
			if foundChest ~= true then				
				turtle.turnLeft()
				for i=0,3 do
					Energy()
					if turtle.forward() then
						if chemin() then
							break
						else
							Energy()
							turtle.back()
							turtle.turnRight()
						end
					else
						turtle.turnRight()
					end
				end
			end
		end
		provision()
end
--turtle script made by Ardevlirn
local function settingUp()
		--gocoffre()
		while turtle.detectDown() ~= true or preventStuck() do
			Energy()
			if preventStuck() then
				turtle.digDown()
			end
			turtle.down()
		end
		local didMove = false
		while chemin() ~= true do
			if turtle.back() then
				didMove = true
			end
			if chemin() ~= true then
				if didMove then
					turtle.forward()
				end
				turtle.turnRight()
			end
		end
end

local function start()
local stop = false
settingUp()
while stop ~= true do
	Energy()
	for i=0,3 do
		if testBlock(chestName) then
			provision()
		elseif testBlock(woodName) then
			Energy()
			coupe()
			turtle.select(saplingSlot)
			turtle.suck()
		elseif testBlock(saplingName) then
			turtle.select(saplingSlot)
			turtle.suck()
			Energy()
		else
			plante()
			turtle.select(saplingSlot)
			turtle.suck()
		end
		turtle.turnRight()
	end
	if turtle.getItemCount(maxSlot) ~= nil and turtle.getItemCount(maxSlot) >= 1 then
		gocoffre()
	end
	if turtle.getItemCount(saplingSlot) ~= nil and turtle.getItemCount(saplingSlot) <= minSaplingInInventory then
		local selecteddItem = 0
		turtle.select(saplingSlot)
		local saplingID = turtle.getItemDetail()
        for slot = minSlot,maxSlot do
                turtle.select(slot)
				selecteddItem = turtle.getItemDetail()
				if saplingID and selecteddItem then
				 	if selecteddItem.name == saplingID.name then
                		turtle.transferTo(saplingSlot,(64-saplingID.count))
					end
				end
        end
		if turtle.getItemCount(saplingSlot) ~= nil and goSearchSapling == true and turtle.getItemCount(saplingSlot) <= minSaplingInInventory then
			gocoffre()
		end
	end
	turtle.turnLeft()
	for i=0,3 do
		Energy()
		if turtle.forward() then
			if chemin() then
				break
			else
				Energy()
				turtle.back()
				turtle.turnRight()
			end
		else
			turtle.turnRight()
		end
	end
	if turtle.getFuelLevel() ~= "unlimited" and turtle.getItemCount(fuelSlot) ~= nil and turtle.getItemCount(fuelSlot) <= minFuelInInventory then
		local selecteddItem = 0
		turtle.select(fuelSlot)
		local fuelID = turtle.getItemDetail()
        for slot = minSlot,maxSlot do
                turtle.select(slot)
				selecteddItem = turtle.getItemDetail()
				if fuelID and selecteddItem then
				 	if selecteddItem.name == fuelID.name then
                		turtle.transferTo(fuelSlot,(64-fuelID.count))
					end
				end
        end
		if turtle.getItemCount(fuelSlot) ~= nil and turtle.getItemCount(fuelSlot) <= minFuelInInventory then
			gocoffre()
		end
	end
end
end

start()