View difference between Paste ID: 8Tg6khn3 and We5K7FgF
SHOW: | | - or go back to the newest paste.
1
-- branch
2
-- Creates a 1x1x3 tunnel of the length specified by the user
3
--    then mines 3 blocks to the right and tunnels back
4
-- Torches, if supplied, will be placed on the right-hand wall at 8 block intervals
5
-- Written by HarvDad, March 2014
6
7
args = {...}
8
nArgs = #args
9
10-
print("branch: Rev 1.3")
10+
print("branch: Rev 1.0")
11
12
loop = 0;
13
x = 0
14
y = 0
15
z = 0
16
face = 0
17
minimumFuel = 100
18
missionMessage = "Mission complete."
19
abort = false
20
local currentFuelLevel = turtle.getFuelLevel()
21
22
if nArgs == 0 or (nArgs == 1 and args[1]== "help") then
23
	print("Creates a 2x2 tunnel with sealed sides.")
24
	print("Place fuel in slot 1")
25
	print("Place patch material (like cobblestone) in slot 2.")
26
	print("If torches are desired, place torches in slot 16.")
27
	print("Usage: branch <length>")
28
	return
29
end
30
31
if nArgs ~= 1 then
32
  print("Usage: branch <length>")
33
  return
34
end
35
36
length = tonumber(args[1])
37
if length == nil then
38
  print("\"", args[1], "\" is not a valid length")
39
  return
40
end
41
if length < 1 then
42
  print("length must be a positive number greater than zero")
43
end
44
45
targetArea = length
46
areaCovered = 1;
47
48
49
function left()
50
 if face == 0 then face = 1 turtle.turnLeft() return end 
51
 if face == 1 then face = 2 turtle.turnLeft() return end
52
 if face == 2 then face = 3 turtle.turnLeft() return end
53
 if face == 3 then face = 0 turtle.turnLeft() return end
54
 print("function left\(\): Bad face value: ", face)
55
end
56
57
function right()
58
 if face == 0 then face = 3 turtle.turnRight() return end 
59
 if face == 1 then face = 0 turtle.turnRight() return end
60
 if face == 2 then face = 1 turtle.turnRight() return end
61
 if face == 3 then face = 2 turtle.turnRight() return end
62
 print("function right\(\): Bad face value: ", face)
63
end
64
65
function up()
66
	success = false
67
68
	repeat
69
		while turtle.detectUp() do	-- This loop added in case of falling sand or whatever
70
		  turtle.digUp()
71
		end
72
	  success = turtle.up()
73
	until success
74
  y = y+1
75
end
76
77
function rise(nBlocks)
78
  local i
79
  for i=1,nBlocks do
80
    up()
81
  end
82
end
83
84
function descend(nBlocks)
85
  local i
86
  for i=1,nBlocks do
87
    down()
88
  end
89
end
90
91
function down()
92
  if turtle.detectDown() then
93
    turtle.digDown()
94
  end
95
  turtle.down()
96
  y = y-1
97
end
98
99
100
function forward()
101
	while turtle.detect() do	-- This loop added in case of falling sand or whatever
102
	  turtle.dig()
103
	end
104
	for i=1,10 do
105
		if turtle.forward() then
106
			break
107
		end
108
		turtle.attack()
109
		sleep(2)
110
	end
111
  	if face == 0 then z = z+1 return end
112
  	if face == 1 then x = x-1 return end
113
  	if face == 2 then z = z-1 return end
114
  	if face == 3 then x = x+1 return end
115
end
116
117
function patch()
118
	turtle.select(2)
119
	turtle.place()
120
end
121
122
function patchUp()
123
	turtle.select(2)
124
	turtle.placeUp()
125
end
126
127
function patchDown()
128
	turtle.select(2)
129
	turtle.placeDown()
130
end
131
132
addTorch = true
133-
torchSpacing = 8
133+
torchSpacing = 3
134-
torchSpot = 6
134+
torchSpot = 7
135
136
function mineForward()
137
	forward()
138
139
	while turtle.detectUp() do	-- This loop added in case of falling sand or whatever
140
	  turtle.digUp()
141-
--	  turtle.suckUp()
141+
	  turtle.suckUp()
142
	end
143
144
	if turtle.detectDown() then
145
		turtle.digDown()
146-
--		turtle.suckDown()
146+
		turtle.suckDown()
147
	end
148
149
	if addTorch then
150
		if (torchSpot % torchSpacing) == 0 then
151
			left()
152
			left()
153
			turtle.select(16)
154
			turtle.place()	
155
			right()
156
			right()
157
		end
158
	end
159
	torchSpot = torchSpot + 1
160
end
161
162
function setFace(f)
163
	if f == 0 then
164
	  if face == 0 then return end
165
	  if face == 1 then right() return end
166
	  if face == 2 then right() right() return end
167
	  if face == 3 then left() return end
168
	end
169
170
	if f == 1 then
171
	  if face == 0 then left() return end
172
	  if face == 1 then return end
173
	  if face == 2 then right() return end
174
	  if face == 3 then right() right() return end
175
	end
176
177
	if f == 2 then
178
	  if face == 0 then left() left() return end
179
	  if face == 1 then left() return end
180
	  if face == 2 then return end
181
	  if face == 3 then right() return end
182
	end
183
184
	if f == 3 then
185
	  if face == 0 then right() return end
186
	  if face == 1 then left() left() return end
187
	  if face == 2 then left() return end
188
	  if face == 3 then return end
189
	end
190
end
191
192
function checkFuel()
193
	if currentFuelLevel == "unlimited" then
194
		return true
195
	end
196
197
	if currentFuelLevel < minimumFuel then
198
	  if not turtle.refuel(200) then
199
		  areaCovered = targetArea
200
		  missionMessage = "Mission aborted due to low fuel."
201
		  abort = true
202
	    return false
203
	  end
204
	end
205
  return true
206
end
207
208
function home(targetY)
209
--  print("home:face ", face, ", x = ", x, ", z = ", z)
210
  if x < 0 then
211
	setFace(3)
212
	while x < 0 do
213
	  forward()
214
	end
215
  else
216
    if x > 0 then
217
  	  setFace(1)
218
	  while x > 0 do
219
	    forward()
220
	  end
221
    end
222
  end
223
224
  if z < 0 then
225
	setFace(0)
226
	while z < 0 do
227
	  forward()
228
	end
229
  else
230
    if z > 0 then
231
  	  setFace(2)
232
	  while z > 0 do
233
	    forward()
234
	  end
235
    end
236
  end
237
end
238
239
function dump()
240
	for i=2,14 do
241
		turtle.select(i)
242
		turtle.dropDown()
243
	end
244
end
245
246
function branchLoop()
247-
	torchSpot = 6
247+
	torchSpot = 7
248
	local i
249
250
	for i=1,length do
251
		mineForward()
252
	end
253
254
	right()
255
256
	for i=1,3 do
257
		mineForward()
258
	end
259
260
	right()
261
262
	for i=1,length do
263
		mineForward()
264
	end
265
266
	setFace(0)
267
	down()
268
269
	if turtle.detectDown() then
270
		turtle.select(15)
271
		if not turtle.compareDown() then
272
			turtle.digDown()
273-
--			turtle.suckDown()
273+
			turtle.suckDown()
274
			turtle.placeDown()
275
		end
276
	end
277
	if turtle.compareDown() then
278
		dump()
279
	end
280
end
281
282
-- MAIN PROGRAM
283
284
turtle.select(1)
285
286
print("Current Fuel Level: ", currentFuelLevel)
287
288
if currentFuelLevel ~= "unlimited" then
289
	if currentFuelLevel < minimumFuel then
290
		if not turtle.refuel() then
291
		  print("No fuel")
292
		  return
293
		end
294
	end
295
end
296
297
for loop=1,5 do
298
	addTorch = false
299
300
	rise(1)
301
	for i=1,5 do
302
	  mineForward()
303
	end
304
	turtle.back()
305
	turtle.back()
306
	left()
307
	addTorch = true
308
	branchLoop()
309
end
310
311
312
print(missionMessage, " Current fuel level is ", turtle.getFuelLevel())