shape/size adaptive tree farm
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_farmwget:
wget https://pastebin.com/raw/si0JTDx0 shape/size_adaptive_tree_farmArchive:
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
Source
View Original SourceCode 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()