View difference between Paste ID: ge5HTPDW and 6UwbbPFS
SHOW: | | - or go back to the newest paste.
1
rednet.open("back")
2
os.loadAPI("button")
3
local m = term
4
local areaShown = false
5
6
local homex = -847
7
local homey = 168
8
local homez = 970
9
10
local setx = 0
11
local sety = 0 
12
local setz = 0
13
local setx2 = 0
14
local sety2 = 0 
15
local setz2 = 0
16
local currx = 0
17
local curry = 0
18
local currz = 0
19
local chestx = 0
20
local chesty = 0
21
local chestz = 0
22
23
local menuType = "mainMenu"
24
local areaType = "Filled"
25
local moveMode = "Normal"
26
27
28
function sendMessage(message)
29
    rednet.send(59, message)
30
end
31
32
function mainMenu()
33
	m.clear()
34
	button.clearTable()
35
	button.setTable("Come Here", comeHere, "", 3, 13, 1, 1)
36
	button.setTable("Go Home", goHome, "", 15, 25, 1, 1)
37
	button.setTable("Set Area", setXYZMenu, "", 3, 13, 3, 3)
38
	button.setTable("GoTo", goTo, "", 15, 25, 3, 3)
39
	button.setTable("Dig", dig, "", 3, 13, 5, 5)
40
	button.setTable("Get Pick", getPickaxe, "", 15, 25, 5, 5)
41
	button.setTable("Pickup", pickup, "", 3, 13, 7, 7)
42
	button.setTable("GetItems", getItems, "", 15, 25, 7, 7) 
43
	button.setTable("ItemsChest", dropItems, "", 15, 25, 9, 9) 
44
	button.setTable("Attack", attack, "", 3, 13, 9, 9)
45
	button.setTable("Build", place, "", 3, 13, 11, 11)
46
	button.setTable("Set Chest", setChest, "", 3, 13, 16, 16) 
47
	button.setTable("Show Area", showAreaToggle, "", 15, 25, 18, 18)
48
	button.setTable("Status", setStatusMenu, "", 3, 13, 18, 18)
49
	if chesty ~= 0 then
50
		button.toggleButton("Set Chest")
51
	end
52
	button.setButton("Show Area", areaShown)
53
	button.screen()
54
end
55
56
function statusMenu()
57
	local x,y,z = getPosition()
58
	m.clear()
59
	button.clearTable()
60
	button.setTable("Back", setMainMenu, "", 1, 6, 1, 1)
61
	button.setTable("Refresh", displayScreen, "", 2, 25, 20,20)
62
	button.label(1,3,"Pressure: "..getPressure())
63
	button.label(1,4,"Position: "..math.floor(x)..","..math.floor(y)..","..math.floor(z))
64
	button.label(1,5,"Action:   "..tostring(not isDone()))
65
--	button.label(1,6,"Pickaxe:  "..tostring(hasPickaxe()))
66
	button.screen()
67
end
68
69
function xyzMenu()
70
	m.clear()
71
	button.clearTable()
72
	button.label(1,1,"Position: "..currx..","..curry..","..currz)
73
	button.setTable("Back", setMainMenu, "", 1, 6, 2, 2)
74
	button.setTable(moveMode, toggleMoveMode, "", 10, 20, 2, 2)
75
	button.label(1,4,"X: ")
76
	button.setTable("x-10", changeX, -10, 4, 7, 4, 4)
77
	button.setTable("x-1", changeX, -1, 9, 11, 4, 4)
78
	button.label(15, 4, setx)
79
	button.setTable("x+1", changeX, 1, 18, 20, 4, 4)
80
	button.setTable("x+10", changeX, 10, 22, 25, 4, 4)
81
	button.label(1,6,"Y: ")
82
	button.setTable("y-10", changeY, -10, 4, 7, 6, 6)
83
	button.setTable("y-1", changeY, -1, 9, 11, 6, 6)
84
	button.label(15, 6, sety)
85
	button.setTable("y+1", changeY, 1, 18, 20, 6, 6)
86
	button.setTable("y+10", changeY, 10, 22, 25, 6, 6)
87
	button.label(1,8,"Z: ")
88
	button.setTable("z-10", changeZ, -10, 4, 7, 8, 8)
89
	button.setTable("z-1", changeZ, -1, 9, 11, 8, 8)
90
	button.label(15, 8, setz)
91
	button.setTable("z+1", changeZ, 1, 18, 20, 8, 8)
92
	button.setTable("z+10", changeZ, 10, 22, 25, 8, 8)
93
	if moveMode == "Normal" then
94
		button.label(1,10,"X2: ")
95
		button.setTable("a-10", changeX2, -10, 4, 7, 10, 10)
96
		button.setTable("a-1", changeX2, -1, 9, 11, 10, 10)
97
		button.label(15, 10, setx2)
98
		button.setTable("a+1", changeX2, 1, 18, 20, 10, 10)
99
		button.setTable("a+10", changeX2, 10, 22, 25, 10, 10)
100
		button.label(1,12,"Y2: ")
101
		button.setTable("b-10", changeY2, -10, 4, 7, 12, 12)
102
		button.setTable("b-1", changeY2, -1, 9, 11, 12, 12)
103
		button.label(15, 12, sety2)
104
		button.setTable("b+1", changeY2, 1, 18, 20, 12, 12)
105
		button.setTable("b+10", changeY2, 10, 22, 25, 12, 12)
106
		button.label(1,14,"Z2: ")
107
		button.setTable("c-10", changeZ2, -10, 4, 7, 14, 14)
108
		button.setTable("c-1", changeZ2, -1, 9, 11, 14, 14)
109
		button.label(15, 14, setz2)
110
		button.setTable("c+1", changeZ2, 1, 18, 20, 14, 14)
111
		button.setTable("c+10", changeZ2, 10, 22, 25, 14, 14)
112
	end
113
	button.setTable("Reset", resetXYZ, "", 10, 20, 16, 16)
114
	button.setTable(areaType, toggleAreaType, "", 3, 13, 18, 18)
115
	button.setTable("Show Area", showAreaToggle, "", 15, 25, 18, 18)
116
	button.setTable("Clear Area", clearArea, "", 3, 13, 20, 20)
117
	button.setTable("Apply", refreshArea, "", 15, 25, 20, 20)
118
	button.setButton("Show Area", areaShown)
119
	button.screen()
120
end
121
122
function toggleMoveMode()
123
	if moveMode == "Normal" then
124
		moveMode = "Move"
125
	elseif moveMode == "Move" then
126
		moveMode = "Expand"
127
	elseif moveMode == "Expand" then
128
		moveMode = "Normal"
129
	end
130
end
131
132
function getPressure()
133
	local data = {}
134
	data[0] = "getPressure"
135
	sendMessage(textutils.serialize(data))
136
	local id, message, distance, protocol = rednet.receive(5)
137
	return(message)
138
end
139
140
function getPosition()
141
	local data = {}
142
	data[0] = "getPosition"
143
	sendMessage(textutils.serialize(data))
144
	local id, message, distance, protocol = rednet.receive(5)
145
	local returnData = textutils.unserialize(message)
146
	return returnData[1], returnData[2], returnData[3]
147
end
148
149
function toggleAreaType()
150
	if areaType == "Filled" then
151
		areaType = "Frame"
152
	elseif areaType == "Frame" then
153
		areaType = "Walls"
154
	elseif areaType == "Walls" then
155
		areaType = "Filled"
156
	else
157
		areaType = "Filled"
158
	end
159
	refreshArea()
160
end
161
162
function resetXYZ()
163
	setx = 0
164
	sety = 0 
165
	setz = 0
166
	setx2 = 0
167
	sety2 = 0 
168
	setz2 = 0
169
	currx,curry,currz = gpsLocate()
170
	refreshArea()
171
end
172
173
function setXYZMenu()
174
	if curry==0 then
175
		currx,curry,currz = gpsLocate()
176
	end
177
	menuType = "xyzMenu"
178
end
179
180
function setMainMenu()
181
	menuType = "mainMenu"
182
end
183
184
function setStatusMenu()
185
	menuType = "statusMenu"
186
end
187
188
function refreshArea()
189
	setAreaGlobal()
190
	showArea(false)
191
	showArea(true)
192
	areaShown = true
193
end
194
195
function setChest()
196
	chestx = currx+setx
197
	chesty = curry+sety
198
	chestz = currz+setz
199
end
200
201
function setAreaGlobal()
202
	clearArea()
203
	local data = {}
204
	data[0] = "setArea"
205
	data[1] = currx+setx
206
	data[2] = curry+sety
207
	data[3] = currz+setz
208
	data[4] = currx+setx2
209
	data[5] = curry+sety2
210
	data[6] = currz+setz2
211
	data[7] = areaType
212
	sendMessage(textutils.serialize(data))
213
end
214
215
function showAreaToggle()
216
   areaShown = not areaShown
217
   showArea(areaShown)
218
end
219
220
function changeX(change)
221
	setx = setx + change
222
	if moveMode == "Move" then
223
		setx2 = setx2 + change
224
	elseif moveMode == "Expand" then
225
		setx2 = setx2 - change
226
	end
227
end
228
229
function changeY(change)
230
   sety = sety+change
231
   if moveMode == "Move" then
232
		sety2 = sety2 + change
233
	elseif moveMode == "Expand" then
234
		sety2 = sety2 - change
235
	end
236
end
237
238
function changeZ(change)
239
	setz = setz+change
240
	if moveMode == "Move" then
241
		setz2 = setz2 + change
242
	elseif moveMode == "Expand" then
243
		setz2 = setz2 - change
244
	end
245
end
246
247
function changeX2(change)
248
   setx2 = setx2 + change
249
end
250
251
function changeY2(change)
252
   sety2 = sety2+change
253
end
254
255
function changeZ2(change)
256
	setz2 = setz2+change
257
end
258
259
function gpsLocate()
260
   local x,y,z = gps.locate()
261
   return math.floor(x)-1, math.floor(y), math.floor(z)
262
end
263
264
function comeHere()
265
	local data = {}
266
	local x,y,z = gpsLocate()
267
	data[0] = "goto"
268
	data[1] = x
269
	data[2] = y
270
	data[3] = z
271
	sendMessage(textutils.serialize(data))
272
end
273
274
function setSpot(x,y,z)
275
	clearArea()
276
	local data = {}
277
	data[0] = "setSpot"
278
	data[1] = x
279
	data[2] = y
280
	data[3] = z
281
	sendMessage(textutils.serialize(data))
282
end
283
284
function setArea(x1,y1,z1,x2,y2,z2)
285
	clearArea()
286
	local data = {}
287
	data[0] = "setArea"
288
	data[1] = x1
289
	data[2] = y1
290
	data[3] = z1
291
	data[4] = x2
292
	data[5] = y2
293
	data[6] = z2
294
	sendMessage(textutils.serialize(data))
295
end
296
297
function hasItem(itemName)
298
	local data = {}
299
	data[0] = "hasItem"
300
	data[1] = itemName
301
	sendMessage(textutils.serialize(data))
302
	local id, message, distance, protocol = rednet.receive(5)
303
	return(message)
304
end
305
306
function inventoryImport(itemName)
307
	local data = {}
308
	data[0] = "inventoryImport"
309
	data[1] = itemName
310
	sendMessage(textutils.serialize(data))
311
end
312
313
function inventoryExport(itemName)
314
	local data = {}
315
	data[0] = "inventoryExport"
316
	data[1] = itemName
317
	sendMessage(textutils.serialize(data))
318
end
319
320
function showArea(show)
321
	local data = {}
322
	data[0] = "showArea"
323
	data[1] = show
324
	sendMessage(textutils.serialize(data))
325
end
326
327
function clearArea()
328
	local data = {}
329
	data[0] = "clearArea"
330
	sendMessage(textutils.serialize(data))
331
	areaShown = false
332
	showArea(areaShown)
333
end
334
335
function pickup()
336
	local data = {}
337
	data[0] = "pickup"
338
	sendMessage(textutils.serialize(data))
339
end
340
341
function dig()
342
	local data = {}
343
	data[0] = "dig"
344
	sendMessage(textutils.serialize(data))
345
end
346
347
function place()
348
	local data = {}
349
	data[0] = "place"
350
	sendMessage(textutils.serialize(data))
351
end
352
353
function attack()
354
	local data = {}
355
	data[0] = "attack"
356
	sendMessage(textutils.serialize(data))
357
end
358
359
360
function isDone()
361
	local data = {}
362
	data[0] = "isDone"
363
	sendMessage(textutils.serialize(data))
364
	local id, message, distance, protocol = rednet.receive(5)
365
	return(message)
366
end
367
368
function waitDone()
369
    while not isDone() do
370
		sleep(1)
371
	end
372
end
373
374
function hasPickaxe()
375
	return(hasItem("minecraft:diamond_pickaxe"))
376
end
377
378
function getPickaxe()
379
	if chesty ~= 0 then
380
		setSpot(chestx, chesty, chestz)
381
		inventoryImport("minecraft:diamond_pickaxe")
382
		setAreaGlobal()
383
	else
384
		button.label(1,20,"No Chest Location Set.")
385
		sleep(1)
386
	end
387
end
388
389
function getItems()
390
	if chesty ~= 0 then
391
		setSpot(chestx, chesty, chestz)
392
		inventoryImport("")
393
		setAreaGlobal()
394
	else
395
		button.label(1,20,"No Chest Location Set.")
396
		sleep(1)
397
	end
398
end
399
400
function dropItems()
401
	if chesty ~= 0 then
402
		setSpot(chestx, chesty, chestz)
403
		inventoryExport("")
404
		setAreaGlobal()
405
	else
406
		button.label(1,20,"No Chest Location Set.")
407
		sleep(1)
408
	end
409
end
410
411
function tempShowArea()
412
	showArea(true)
413
	sleep(3)
414
	showArea(false)
415
end
416
417
function setRadius(xRad, zRad, yUp, yDown)
418
   local x,y,z = gpsLocate()
419
   x = x
420
   y = y
421
   print(x..y..z)
422
   setArea(x-xRad, y-yDown, z-zRad, x+xRad, y+yUp, z+zRad)
423
   tempShowArea()
424
end
425
426
function setXYZ()
427
   local x,y,z = gpsLocate()
428
   x = x
429
   y = y
430
   
431
   setArea(x-xRad, y-yDown, z-zRad, x+xRad, y+yUp, z+zRad)
432
   
433
end
434
435
function goHome()
436
	local data = {}
437
	data[0] = "goto"
438
	data[1] = homex
439
	data[2] = homey
440
	data[3] = homez
441
	sendMessage(textutils.serialize(data))
442
end
443
444
function goTo()
445
	local data = {}
446
	data[0] = "goto"
447
	data[1] = currx+setx
448
	data[2] = curry+sety
449
	data[3] = currz+setz
450
	sendMessage(textutils.serialize(data))
451
end
452
453
function displayScreen()
454
	if menuType == "mainMenu" then
455
		mainMenu()
456
	elseif menuType == "xyzMenu" then
457
		xyzMenu()
458
	elseif menuType == "statusMenu" then
459
		statusMenu()
460
	end
461
	local event, side, x, y
462
	event, side, x, y = os.pullEvent()
463
	while event ~= "mouse_click" do
464
		event, side, x, y = os.pullEvent()
465
	end
466
	button.checkxy(x,y)
467
end
468
469
while true do
470
	displayScreen()
471
end
472
473
--clearArea()  
474
--dropItems()
475
--getPickaxe() 
476
--setRadius(3,3,1,2)
477
--dig()
478
--waitDone()
479
--clearArea()
480
--setRadius(5,5,2,3)
481
--pickup()
482
--waitDone()
483
--dropItems()
484
485
--comeHere()