Advertisement
Kamioda

minecraft_harvest_watermelon_and_pumpkin

Jul 24th, 2021 (edited)
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. local DigTargetBlocks = { "minecraft:melon_block", "minecraft:pumpkin" }
  2. local DropTargetItems = { "minecraft:melon", "minecraft:pumpkin" }
  3. local DigBlackList = { "minecraft:melon_stem", "minecraft:pumpkin_stem", "minecraft:torch", "minecraft:spruce_fence", "minecraft:spruce_fence_gate", "storagedrawers:basicdrawers", "storagedrawers:controller" }
  4.  
  5. local NeedToBackStartPos = 9
  6. local NormalFlowCount = 1
  7. local MinFuelLevel = 50
  8.  
  9. local function ContainsInArray(Target, Arr)
  10. for i = 1, #Arr do
  11. if Target == Arr[i] then
  12. return true
  13. end
  14. end
  15. return false
  16. end
  17.  
  18. local function Dig(DigFunc, InspectFunc)
  19. local blockExist, itemInfo = InspectFunc()
  20. if not blockExist then
  21. print("block is not found")
  22. return true
  23. end
  24. if ContainsInArray(itemInfo.name, DigBlackList) then
  25. print("Front block is in black list")
  26. return false
  27. else
  28. DigFunc()
  29. return true
  30. end
  31. end
  32.  
  33. local function GoForward(MoveCount)
  34. for i = 1, MoveCount do
  35. while not turtle.forward() do
  36. if turtle.detect() then
  37. Dig(turtle.dig, turtle.inspect)
  38. else
  39. turtle.attack()
  40. end
  41. end
  42. end
  43. end
  44.  
  45. local function BlockIsDigTargetBlock(BlockInfo)
  46. return ContainsInArray(BlockInfo.name, DigTargetBlocks)
  47. end
  48.  
  49. local function MoveAndHarvest()
  50. for i = 1, 6 do
  51. GoForward(1)
  52. local blockExist, itemInfo = turtle.inspectDown()
  53. if blockExist and BlockIsDigTargetBlock(itemInfo) then
  54. Dig(turtle.digDown, turtle.inspectDown)
  55. end
  56. end
  57. end
  58.  
  59. local function MoveOppositeSide()
  60. MoveAndHarvest()
  61. GoForward(1)
  62. end
  63.  
  64. local function MoveBase(TurnFunc)
  65. MoveOppositeSide()
  66. TurnFunc()
  67. GoForward(3)
  68. TurnFunc()
  69. end
  70.  
  71. local function MoveBaseNotLastMove(FirstTurnFunc, SecondTurnFunc)
  72. MoveBase(FirstTurnFunc)
  73. MoveBase(SecondTurnFunc)
  74. end
  75.  
  76. local function MoveBaseLastMove(TurnFunc)
  77. MoveBase(TurnFunc)
  78.  
  79. MoveOppositeSide()
  80. TurnFunc()
  81. GoForward(NeedToBackStartPos)
  82. end
  83.  
  84. local function HarvestWaterMelonAndPumpkin()
  85. for i = 1, NormalFlowCount do
  86. MoveBaseNotLastMove(turtle.turnRight, turtle.turnLeft)
  87. end
  88. MoveBaseLastMove(turtle.turnRight)
  89.  
  90. end
  91.  
  92. local function TurnBack()
  93. turtle.turnRight()
  94. turtle.turnRight()
  95. end
  96.  
  97. local function refuel()
  98. while turtle.getFuelLevel() < MinFuelLevel do
  99. turtle.suck()
  100. turtle.refuel()
  101. end
  102. end
  103.  
  104. local function IsDropTargetItem(targetSlot)
  105. local itemDetail = turtle.getItemDetail(targetSlot)
  106. if itemDetail == nil then
  107. return false
  108. end
  109. return ContainsInArray(itemDetail.name, DropTargetItems)
  110. end
  111.  
  112. while true do
  113. if turtle.getFuelLevel() < MinFuelLevel then
  114. turtle.turnLeft()
  115. print("refuel")
  116. refuel()
  117. TurnBack()
  118. else
  119. turtle.turnRight()
  120. end
  121. print("Start harvest")
  122. HarvestWaterMelonAndPumpkin()
  123. print("Drop item")
  124. for i = 1, 16 do
  125. if IsDropTargetItem(i) then
  126. turtle.select(i)
  127. turtle.dropDown()
  128. end
  129. end
  130. turtle.select(1)
  131. print("Sleep 60 sec")
  132. os.sleep(60)
  133. end
  134.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement