SHOW:
|
|
- or go back to the newest paste.
1 | - | --[[ |
1 | + | --[[ |
2 | - | 2014 (c) psychedelixx |
2 | + | 2015 (c) psychedelixx |
3 | - | Minecraft Turtle: Room (Tobust) |
3 | + | Minecraft Turtle: Spiral miner (Robust) |
4 | - | 2014-04-21 |
4 | + | 2015-01-04 |
5 | ||
6 | - | Digs a room with specified dimensions. |
6 | + | Mines in a spiralform (spin me right round baby) and stays on the level it started. |
7 | ||
8 | Robust API: | |
9 | http://computercraft.info/wiki/Robust_Turtle_API | |
10 | ||
11 | Usage: | |
12 | - use turtle and type "label set <name>" | |
13 | (to give your turtle an unique name so it remembers its programs) | |
14 | - | - type "pastebin get VRR7iLat room" |
14 | + | - type "pastebin get 7Ckr8y7s spiral" |
15 | - | - type "room <width> [<length>] [<height>]" |
15 | + | - type "spiral <limit> [<fillGround 0|1 default 0> <factor default 1.5> <useTesseract 0|1 default 0>]" |
16 | - | - default length = width |
16 | + | - place chests in slot 16 |
17 | - | - default height = 2 |
17 | + | ]] |
18 | - | - place solid blocks in slot 16 to fill the ground |
18 | + | torchesAvailable = false |
19 | - | --]] |
19 | + | chestsAvailable = false |
20 | torchSlot = 15 | |
21 | factor = 1.5 | |
22 | useTesseract = false | |
23 | ||
24 | function move() | |
25 | slot = 1 | |
26 | - | empty = 0 |
26 | + | while not turtle.detectDown() and fillGround == 1 do |
27 | - | if nextTurnRight then |
27 | + | |
28 | - | print("w"..w.." l"..l.." h"..h.." next turn right. Fuel: " .. turtle.getFuelLevel()) |
28 | + | turtle.placeDown() |
29 | - | else |
29 | + | |
30 | - | print("w"..w.." l"..l.." h"..h.." next turn left. Fuel: " .. turtle.getFuelLevel()) |
30 | + | if slot < 13 then |
31 | slot = slot+1 | |
32 | else | |
33 | - | for slot = 1, 16 do |
33 | + | print("no items to fill ground") |
34 | fillGround = 0 | |
35 | break | |
36 | end | |
37 | end | |
38 | ||
39 | t.dig() | |
40 | - | t.down(h-1) |
40 | + | |
41 | t.digUp() | |
42 | - | if (h-1)%4==0 then |
42 | + | |
43 | - | if nextTurnRight then |
43 | + | empty = 0 |
44 | - | t.left() |
44 | + | for slot = 1, 13 do |
45 | - | t.forward(w-1) |
45 | + | |
46 | - | t.left() |
46 | + | |
47 | - | t.forward(l) |
47 | + | |
48 | - | else |
48 | + | |
49 | - | t.right() |
49 | + | |
50 | - | t.forward(w-1) |
50 | + | |
51 | - | t.left() |
51 | + | --[[ if turtle is full, turn around, place chest, move items into it, turn around and continue ]]-- |
52 | - | t.forward(length-l-1) |
52 | + | |
53 | t.turnAround() | |
54 | ||
55 | - | if nextTurnRight then |
55 | + | if not chestsAvailable then |
56 | - | t.right() |
56 | + | print("Please put chests in slot 15 and press enter to continue") |
57 | - | t.forward(width-w) |
57 | + | read() |
58 | - | t.left() |
58 | + | end |
59 | - | t.forward(length-l-1) |
59 | + | |
60 | - | else |
60 | + | turtle.select(14) |
61 | - | t.left() |
61 | + | turtle.place() |
62 | - | t.forward(width-w) |
62 | + | |
63 | - | t.left() |
63 | + | for slot = 1, 13 do |
64 | - | t.forward(l) |
64 | + | |
65 | turtle.drop() | |
66 | end | |
67 | ||
68 | - | for slot = 1, 15 do |
68 | + | if useTesseract then |
69 | os.sleep(0.5) | |
70 | turtle.select(14) | |
71 | turtle.dig() | |
72 | end | |
73 | ||
74 | if turtle.getItemCount(14) > 0 then | |
75 | - | if (h-1)%4==0 then |
75 | + | chestsAvailable = true |
76 | - | if nextTurnRight then |
76 | + | else |
77 | - | t.forward(l) |
77 | + | chestsAvailable = false |
78 | - | t.right() |
78 | + | end |
79 | - | t.forward(w-1) |
79 | + | |
80 | - | t.left() |
80 | + | |
81 | - | else |
81 | + | |
82 | - | t.forward(length-l-1) |
82 | + | |
83 | - | t.right() |
83 | + | |
84 | - | t.forward(w-1) |
84 | + | |
85 | - | t.right() |
85 | + | |
86 | print("") | |
87 | print("spiral <limit> [<fillGround 0|1 default 0> <factor default 1.5> <useTesseract 0|1 default 0]") | |
88 | - | if nextTurnRight then |
88 | + | print("place chests/tesseract in slot 14") |
89 | - | t.forward(length-l-1) |
89 | + | print("place torches in slots 15 and 16") |
90 | - | t.right() |
90 | + | |
91 | - | t.forward(width-w) |
91 | + | |
92 | - | t.right() |
92 | + | |
93 | - | else |
93 | + | |
94 | - | t.forward(l) |
94 | + | |
95 | - | t.right() |
95 | + | limit = tonumber(args[1]) |
96 | - | t.forward(width-w) |
96 | + | fillGround = 0 |
97 | - | t.left() |
97 | + | |
98 | if #args >= 2 then | |
99 | fillGround = tonumber(args[2]) | |
100 | end | |
101 | - | t.up(h-1) |
101 | + | if #args >= 3 then |
102 | factor= tonumber(args[3]) | |
103 | end | |
104 | if #args >= 4 then | |
105 | if tonumber(args[4]) > 0 then | |
106 | useTesseract = true | |
107 | else | |
108 | - | print("Usage: room <width> [<length>] [<height>]") |
108 | + | useTesseract = false |
109 | - | print("# default length = width") |
109 | + | end |
110 | - | print("# default height = 2") |
110 | + | |
111 | ||
112 | if turtle.getFuelLevel() < 0.75*limit*limit + limit then | |
113 | print("I need " .. (0.75*limit*limit + limit) - turtle.getFuelLevel() .. " more fuel!") | |
114 | else | |
115 | print("======== 2015 (c) psychedelixx ========") | |
116 | print("Let's go!") | |
117 | - | width = tonumber(args[1]) |
117 | + | print("Mining a spiral...") |
118 | - | length = width |
118 | + | |
119 | - | height = 2 |
119 | + | if turtle.getItemCount(15)+turtle.getItemCount(16) > 0 then |
120 | torchesAvailable = true | |
121 | else | |
122 | - | length = tonumber(args[2]) |
122 | + | print("") |
123 | print("Warning: no torches found in slot 15 and 16. Press enter to continue") | |
124 | - | if #args == 3 then |
124 | + | read() |
125 | - | height = tonumber(args[3]) |
125 | + | torchesAvailable = false |
126 | end | |
127 | ||
128 | - | if turtle.getFuelLevel() < height*width*length then |
128 | + | if turtle.getItemCount(14) > 0 then |
129 | - | print("I need " .. height*width*length - turtle.getFuelLevel() .. " more fuel!") |
129 | + | chestsAvailable = true |
130 | else | |
131 | - | print("======== 2014 (c) psychedelixx ========") |
131 | + | print("") |
132 | print("Warning: no chests found in slot 14. Press enter to continue") | |
133 | - | print("Digging " .. width .. "*" .. length .. "*" .. height .. " (w*l*h)") |
133 | + | read() |
134 | chestsAvailable = false | |
135 | - | nextTurnRight = true |
135 | + | end |
136 | - | h = 1 |
136 | + | |
137 | if turtle.getItemCount(15) > 0 then | |
138 | torchesAvailable = true | |
139 | - | w = 1 |
139 | + | torchSlot = 15 |
140 | - | while w <= width do |
140 | + | elseif turtle.getItemCount(16) > 0 then |
141 | - | print("") |
141 | + | torchesAvailable = true |
142 | - | l = 1 |
142 | + | torchSlot = 16 |
143 | - | while l < length do |
143 | + | else |
144 | - | move() |
144 | + | torchesAvailable = false |
145 | - | l = l+1 |
145 | + | end |
146 | ||
147 | - | if w < width then |
147 | + | if turtle.getItemCount(14) > 0 then |
148 | - | if nextTurnRight then |
148 | + | chestsAvailable = true |
149 | - | t.right() |
149 | + | else |
150 | - | move() |
150 | + | chestsAvailable = false |
151 | - | t.right() |
151 | + | end |
152 | - | nextTurnRight = false |
152 | + | |
153 | - | else |
153 | + | x = 0 |
154 | - | t.left() |
154 | + | |
155 | - | move() |
155 | + | |
156 | - | t.left() |
156 | + | x = x + 1 |
157 | - | nextTurnRight = true |
157 | + | y = math.ceil(x*factor) |
158 | - | end |
158 | + | |
159 | for i = 1, y do | |
160 | - | w = w+1 |
160 | + | move() |
161 | - | end |
161 | + | if i%7 == 0 and y-i > 5 and torchesAvailable and turtle.detectDown() then |
162 | - | if h < height then |
162 | + | t.turnAround() |
163 | - | h = h+2 |
163 | + | turtle.select(torchSlot) |
164 | ||
165 | - | if h == height then |
165 | + | turtle.place() |
166 | - | h = h+1 |
166 | + | t.turnAround() |
167 | ||
168 | if torchSlot == 15 and turtle.getItemCount(torchSlot) == 0 then | |
169 | - | if h < height then |
169 | + | torchSlot = 16 |
170 | - | t.turnAround() |
170 | + | elseif torchSlot == 16 and turtle.getItemCount(torchSlot) == 0 then |
171 | - | t.up() |
171 | + | torchSlot = 15 |
172 | - | t.digUp() |
172 | + | end |
173 | - | if h < height then |
173 | + | |
174 | - | t.up() |
174 | + | if turtle.getItemCount(15) + turtle.getItemCount(16) > 0 then |
175 | - | t.digUp() |
175 | + | torchesAvailable = true |
176 | else | |
177 | torchesAvailable = false | |
178 | - | until h >= height |
178 | + | end |
179 | end | |
180 | - | t.down(height-2) |
180 | + | |
181 | - | for slot = 1, 15 do |
181 | + | |
182 | if torchesAvailable then | |
183 | - | turtle.drop() |
183 | + | t.dig() |
184 | turtle.select(torchSlot) | |
185 | turtle.place() | |
186 | end | |
187 | ||
188 | t.right() | |
189 | ||
190 | print (y .. " / " .. limit .. "... fuel: " .. turtle.getFuelLevel()) | |
191 | until y >= limit | |
192 | print("Done") | |
193 | end |