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