Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local DigTargetBlocks = { "minecraft:melon_block", "minecraft:pumpkin" }
- local DropTargetItems = { "minecraft:melon", "minecraft:pumpkin" }
- local DigBlackList = { "minecraft:melon_stem", "minecraft:pumpkin_stem", "minecraft:torch", "minecraft:spruce_fence", "minecraft:spruce_fence_gate", "storagedrawers:basicdrawers", "storagedrawers:controller" }
- local NeedToBackStartPos = 9
- local NormalFlowCount = 1
- local MinFuelLevel = 50
- local function ContainsInArray(Target, Arr)
- for i = 1, #Arr do
- if Target == Arr[i] then
- return true
- end
- end
- return false
- end
- local function Dig(DigFunc, InspectFunc)
- local blockExist, itemInfo = InspectFunc()
- if not blockExist then
- print("block is not found")
- return true
- end
- if ContainsInArray(itemInfo.name, DigBlackList) then
- print("Front block is in black list")
- return false
- else
- DigFunc()
- return true
- end
- end
- local function GoForward(MoveCount)
- for i = 1, MoveCount do
- while not turtle.forward() do
- if turtle.detect() then
- Dig(turtle.dig, turtle.inspect)
- else
- turtle.attack()
- end
- end
- end
- end
- local function BlockIsDigTargetBlock(BlockInfo)
- return ContainsInArray(BlockInfo.name, DigTargetBlocks)
- end
- local function MoveAndHarvest()
- for i = 1, 6 do
- GoForward(1)
- local blockExist, itemInfo = turtle.inspectDown()
- if blockExist and BlockIsDigTargetBlock(itemInfo) then
- Dig(turtle.digDown, turtle.inspectDown)
- end
- end
- end
- local function MoveOppositeSide()
- MoveAndHarvest()
- GoForward(1)
- end
- local function MoveBase(TurnFunc)
- MoveOppositeSide()
- TurnFunc()
- GoForward(3)
- TurnFunc()
- end
- local function MoveBaseNotLastMove(FirstTurnFunc, SecondTurnFunc)
- MoveBase(FirstTurnFunc)
- MoveBase(SecondTurnFunc)
- end
- local function MoveBaseLastMove(TurnFunc)
- MoveBase(TurnFunc)
- MoveOppositeSide()
- TurnFunc()
- GoForward(NeedToBackStartPos)
- end
- local function HarvestWaterMelonAndPumpkin()
- for i = 1, NormalFlowCount do
- MoveBaseNotLastMove(turtle.turnRight, turtle.turnLeft)
- end
- MoveBaseLastMove(turtle.turnRight)
- end
- local function TurnBack()
- turtle.turnRight()
- turtle.turnRight()
- end
- local function refuel()
- while turtle.getFuelLevel() < MinFuelLevel do
- turtle.suck()
- turtle.refuel()
- end
- end
- local function IsDropTargetItem(targetSlot)
- local itemDetail = turtle.getItemDetail(targetSlot)
- if itemDetail == nil then
- return false
- end
- return ContainsInArray(itemDetail.name, DropTargetItems)
- end
- while true do
- if turtle.getFuelLevel() < MinFuelLevel then
- turtle.turnLeft()
- print("refuel")
- refuel()
- TurnBack()
- else
- turtle.turnRight()
- end
- print("Start harvest")
- HarvestWaterMelonAndPumpkin()
- print("Drop item")
- for i = 1, 16 do
- if IsDropTargetItem(i) then
- turtle.select(i)
- turtle.dropDown()
- end
- end
- turtle.select(1)
- print("Sleep 60 sec")
- os.sleep(60)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement