Added dirt farm
This commit is contained in:
parent
c43019b28b
commit
f4c47fe855
|
@ -0,0 +1,82 @@
|
|||
--[[
|
||||
Rooted Dirt Farm which uses a saw to clear trees.
|
||||
|
||||
- The turtle starts facing the location where moss will be placed.
|
||||
- The turtle will drop rooted dirt below it after each cycle.
|
||||
- The turtle will replenish its resources (bonemeal, moss, azaleas) via inventories:
|
||||
bonemeal: left
|
||||
moss: behind
|
||||
azaleas: right
|
||||
]]
|
||||
|
||||
local is = require("itemscript")
|
||||
local ms = require("movescript")
|
||||
|
||||
-- Runs one complete cycle of the farm; that is, plant moss, plant the azalea, bonemeal it, activate the saw, then harvest the dirt.
|
||||
local function doCycle()
|
||||
-- Place the moss and azalea.
|
||||
is.select("minecraft:moss_block")
|
||||
ms.run("PU")
|
||||
is.select("minecraft:azalea")
|
||||
ms.run("P")
|
||||
-- Bonemeal the azalea until we have a tree.
|
||||
local blockData = nil
|
||||
repeat
|
||||
is.select("minecraft:bone_meal")
|
||||
ms.run("P")
|
||||
_, blockData = turtle.inspect()
|
||||
until blockData ~= nil and blockData.name == "minecraft:oak_log"
|
||||
-- Activate the saw until the tree is removed.
|
||||
redstone.setOutput("right", true)
|
||||
while turtle.detect() do
|
||||
os.sleep(0.25)
|
||||
end
|
||||
redstone.setOutput("right", false)
|
||||
ms.run("DDg")
|
||||
is.dropAllDown("minecraft:rooted_dirt")
|
||||
end
|
||||
|
||||
-- Ensures that we've got enough items for a farm cycle, and if not, tries to fetch the items or wait for user intervention.
|
||||
local function ensureItemsForCycle()
|
||||
local requiredItems = {
|
||||
["minecraft:moss_block"] = 1,
|
||||
["minecraft:azalea"] = 1,
|
||||
["minecraft:bone_meal"] = 10
|
||||
}
|
||||
local replenishThreshold = 48
|
||||
for name, requiredCount in pairs(requiredItems) do
|
||||
local actualCount = is.totalCount(name)
|
||||
if actualCount <= requiredCount then
|
||||
local action1, action2 = nil, nil
|
||||
if name == "minecraft:bone_meal" then
|
||||
action1 = "L"
|
||||
action2 = "R"
|
||||
elseif name == "minecraft:moss_block" then
|
||||
action1 = "LL"
|
||||
action2 = "RR"
|
||||
elseif name == "minecraft:azalea" then
|
||||
action1 = "R"
|
||||
action2 = "L"
|
||||
end
|
||||
ms.run(action1)
|
||||
is.select(name)
|
||||
local attempts = 0
|
||||
while actualCount < replenishThreshold do
|
||||
turtle.suck(64 - actualCount)
|
||||
actualCount = is.totalCount(name)
|
||||
attempts = attempts + 1
|
||||
if attempts > 10 then
|
||||
print("Error: Not enough " .. name .. " available. Please add more and press enter.")
|
||||
io.read()
|
||||
attempts = 0
|
||||
end
|
||||
end
|
||||
ms.run(action2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
while true do
|
||||
ensureItemsForCycle()
|
||||
doCycle()
|
||||
end
|
Loading…
Reference in New Issue