Guest User

Untitled

a guest
Jun 28th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.62 KB | None | 0 0
  1. -- Originally developed by Orwell
  2. -- Maintained by vico
  3. -- Check the README
  4. -- version 0.2 - 3 june 2012
  5.  
  6. local tArgs = { ... }
  7. if #tArgs ~= 1 then
  8. print("Usage: scbuild <gunzipped schematic file>")
  9. return
  10. end
  11.  
  12. local filename = tArgs[1]
  13.  
  14. if not fs.exists(filename) then
  15. print("File does not exist.")
  16. return
  17. end
  18.  
  19. local length = 0
  20. local height = 0
  21. local width = 0
  22. local blocks = {}
  23. local data = {}
  24.  
  25. block_id = {}
  26.  
  27. -- Blocks
  28. block_id[0] = "Air"
  29. block_id[1] = "Stone"
  30. block_id[2] = "Grass Block"
  31. block_id[3] = "Dirt"
  32. block_id[4] = "Cobblestone"
  33. block_id[5] = "Wood Planks"
  34. block_id[6] = "Sapling"
  35. block_id[7] = "Bedrock"
  36. block_id[8] = "Water"
  37. block_id[9] = "Stationary Water"
  38. block_id[10] = "Lava"
  39. block_id[11] = "Stationary Lava"
  40. block_id[12] = "Sand"
  41. block_id[13] = "Gravel"
  42. block_id[14] = "Gold Ore"
  43. block_id[15] = "Iron Ore"
  44. block_id[16] = "Coal Ore"
  45. block_id[17] = "Wood"
  46. block_id[18] = "Leaves"
  47. block_id[19] = "Sponge"
  48. block_id[20] = "Glass"
  49. block_id[21] = "Lapis Lazuli Ore"
  50. block_id[22] = "Lapis Lazuli Block"
  51. block_id[23] = "Dispenser"
  52. block_id[24] = "Sandstone"
  53. block_id[25] = "Note Block"
  54. block_id[26] = "Bed"
  55. block_id[27] = "Powered Rail"
  56. block_id[28] = "Detector Rail"
  57. block_id[29] = "Sticky Piston"
  58. block_id[30] = "Cobweb"
  59. block_id[31] = "Grass"
  60. block_id[32] = "Dead Bush"
  61. block_id[33] = "Piston"
  62. block_id[34] = "Piston Head"
  63. block_id[35] = "Wool"
  64. block_id[36] = "Block moved by Piston"
  65. block_id[37] = "Dandelion"
  66. block_id[38] = "Poppy"
  67. block_id[39] = "Brown Mushroom"
  68. block_id[40] = "Red Mushroom"
  69. block_id[41] = "Block of Gold"
  70. block_id[42] = "Block of Iron"
  71. block_id[43] = "Double Stone Slab"
  72. block_id[44] = "Stone Slab"
  73. block_id[45] = "Bricks"
  74. block_id[46] = "TNT"
  75. block_id[47] = "Bookshelf"
  76. block_id[48] = "Moss Stone"
  77. block_id[49] = "Obsidian"
  78. block_id[50] = "Torch"
  79. block_id[51] = "Fire"
  80. block_id[52] = "Monster Spawner"
  81. block_id[53] = "Oak Wood Stairs"
  82. block_id[54] = "Chest"
  83. block_id[55] = "Redstone Wire"
  84. block_id[56] = "Diamond Ore"
  85. block_id[57] = "Block of Diamond"
  86. block_id[58] = "Crafting Table"
  87. block_id[59] = "Wheat"
  88. block_id[60] = "Farmland"
  89. block_id[61] = "Furnace"
  90. block_id[62] = "Burning Furnace"
  91. block_id[63] = "Standing Sign"
  92. block_id[64] = "Oak Door"
  93. block_id[65] = "Ladder"
  94. block_id[66] = "Rail"
  95. block_id[67] = "Cobblestone Stairs"
  96. block_id[68] = "Wall Sign"
  97. block_id[69] = "Lever"
  98. block_id[70] = "Stone Pressure Plate"
  99. block_id[71] = "Iron Door"
  100. block_id[72] = "Wooden Pressure Plate"
  101. block_id[73] = "Redstone Ore"
  102. block_id[74] = "Glowing Redstone Ore"
  103. block_id[75] = "Redstone Torch (inactive)"
  104. block_id[76] = "Redstone Torch (active)"
  105. block_id[77] = "Stone Button"
  106. block_id[78] = "Snow (layer)"
  107. block_id[79] = "Ice"
  108. block_id[80] = "Snow"
  109. block_id[81] = "Cactus"
  110. block_id[82] = "Clay"
  111. block_id[83] = "Sugar Cane"
  112. block_id[84] = "Jukebox "
  113. block_id[85] = "Fence"
  114. block_id[86] = "Pumpkin"
  115. block_id[87] = "Netherrack"
  116. block_id[88] = "Soul Sand"
  117. block_id[89] = "Glowstone"
  118. block_id[90] = "Nether Portal"
  119. block_id[91] = "Jack o-Lantern"
  120. block_id[92] = "Cake"
  121. block_id[93] = "Redstone Repeater (inactive)"
  122. block_id[94] = "Redstone Repeater (active)"
  123. block_id[95] = "Stained Glass"
  124. block_id[96] = "Trapdoor"
  125. block_id[97] = "Monster Egg "
  126. block_id[98] = "Stone Bricks"
  127. block_id[99] = "Brown Mushroom (block)"
  128. block_id[100] = "Red Mushroom (block)"
  129. block_id[101] = "Iron Bars"
  130. block_id[102] = "Glass Pane"
  131. block_id[103] = "Melon"
  132. block_id[104] = "Pumpkin Stem"
  133. block_id[105] = "Melon Stem"
  134. block_id[106] = "Vines"
  135. block_id[107] = "Fence Gate"
  136. block_id[108] = "Brick Stairs"
  137. block_id[109] = "Stone Brick Stairs"
  138. block_id[110] = "Mycelium"
  139. block_id[111] = "Lily Pad"
  140. block_id[112] = "Nether Brick"
  141. block_id[113] = "Nether Brick Fence"
  142. block_id[114] = "Nether Brick Stairs"
  143. block_id[115] = "Nether Wart"
  144. block_id[116] = "Enchantment Table"
  145. block_id[117] = "Brewing Stand "
  146. block_id[118] = "Cauldron"
  147. block_id[119] = "End Portal"
  148. block_id[120] = "End Portal Frame"
  149. block_id[121] = "End Stone"
  150. block_id[122] = "Dragon Egg"
  151. block_id[123] = "Redstone Lamp (inactive)"
  152. block_id[124] = "Redstone Lamp (active)"
  153. block_id[125] = "Double Wooden Slab"
  154. block_id[126] = "Wooden Slab"
  155. block_id[127] = "Cocoa"
  156. block_id[128] = "Sandstone Stairs"
  157. block_id[129] = "Emerald Ore"
  158. block_id[130] = "Ender Chest"
  159. block_id[131] = "Tripwire Hook"
  160. block_id[132] = "Tripwire"
  161. block_id[133] = "Block of Emerald"
  162. block_id[134] = "Spruce Wood Stairs"
  163. block_id[135] = "Birch Wood Stairs"
  164. block_id[136] = "Jungle Wood Stairs"
  165. block_id[137] = "Command Block"
  166. block_id[138] = "Beacon"
  167. block_id[139] = "Cobblestone Wall"
  168. block_id[140] = "Flower Pot"
  169. block_id[141] = "Carrot"
  170. block_id[142] = "Potato"
  171. block_id[143] = "Wooden Button"
  172. block_id[144] = "Mob head"
  173. block_id[145] = "Anvil"
  174. block_id[146] = "Trapped Chest"
  175. block_id[147] = "Weighted Pressure Plate (Light)"
  176. block_id[148] = "Weighted Pressure Plate (Heavy)"
  177. block_id[149] = "Redstone Comparator"
  178. block_id[150] = "Redstone Comparator (deprecated)"
  179. block_id[151] = "Daylight Sensor"
  180. block_id[152] = "Block of Redstone"
  181. block_id[153] = "Nether Quartz Ore"
  182. block_id[154] = "Hopper"
  183. block_id[155] = "Block of Quartz"
  184. block_id[156] = "Quartz Stairs"
  185. block_id[157] = "Activator Rail"
  186. block_id[158] = "Dropper"
  187. block_id[159] = "Stained Clay"
  188. block_id[160] = "Stained Glass Pane"
  189. block_id[161] = "Leaves (Acacia/Dark Oak)"
  190. block_id[162] = "Wood (Acacia/Dark Oak)"
  191. block_id[163] = "Acacia Wood Stairs"
  192. block_id[164] = "Dark Oak Wood Stairs"
  193. block_id[165] = "Slime Block"
  194. block_id[166] = "Barrier"
  195. block_id[167] = "Iron Trapdoor"
  196. block_id[168] = "Prismarine"
  197. block_id[169] = "Sea Lantern"
  198. block_id[170] = "Hay Bale"
  199. block_id[171] = "Carpet"
  200. block_id[172] = "Hardened Clay"
  201. block_id[173] = "Block of Coal"
  202. block_id[174] = "Packed Ice"
  203. block_id[175] = "Large Flowers"
  204. block_id[176] = "Standing Banner"
  205. block_id[177] = "Wall Banner"
  206. block_id[178] = "Inverted Daylight Sensor"
  207. block_id[179] = "Red Sandstone"
  208. block_id[180] = "Red Sandstone Stairs"
  209. block_id[181] = "Double Red Sandstone Slab"
  210. block_id[182] = "Red Sandstone Slab"
  211. block_id[183] = "Spruce Fence Gate"
  212. block_id[184] = "Birch Fence Gate"
  213. block_id[185] = "Jungle Fence Gate"
  214. block_id[186] = "Dark Oak Fence Gate"
  215. block_id[187] = "Acacia Fence Gate"
  216. block_id[188] = "Spruce Fence"
  217. block_id[189] = "Birch Fence"
  218. block_id[190] = "Jungle Fence"
  219. block_id[191] = "Dark Oak Fence"
  220. block_id[192] = "Acacia Fence"
  221. block_id[193] = "Spruce Door"
  222. block_id[194] = "Birch Door"
  223. block_id[195] = "Jungle Door"
  224. block_id[196] = "Acacia Door"
  225. block_id[197] = "Dark Oak Door"
  226. block_id[198] = "End Rod"
  227. block_id[199] = "Chorus Plant"
  228. block_id[200] = "Chorus Flower"
  229. block_id[201] = "Purpur Block"
  230. block_id[202] = "Purpur Pillar"
  231. block_id[203] = "Purpur Stairs"
  232. block_id[204] = "Purpur Double Slab"
  233. block_id[205] = "Purpur Slab"
  234. block_id[206] = "End Stone Bricks"
  235. block_id[207] = "Beetroot Seeds"
  236. block_id[208] = "Grass Path"
  237. block_id[209] = "End Gateway"
  238. block_id[210] = "Repeating Command Block"
  239. block_id[211] = "Chain Command Block"
  240. block_id[212] = "Frosted Ice"
  241. block_id[213] = "Magma Block"
  242. block_id[214] = "Nether Wart Block"
  243. block_id[215] = "Red Nether Brick"
  244. block_id[216] = "Bone Block"
  245. block_id[217] = "Structure Void"
  246. block_id[255] = "Structure Block"
  247.  
  248. -- Items
  249. block_id[256] = "Iron Shovel"
  250. block_id[257] = "Iron Pickaxe"
  251. block_id[258] = "Iron Axe"
  252. block_id[259] = "Flint and Steel"
  253. block_id[260] = "Apple"
  254. block_id[261] = "Bow"
  255. block_id[262] = "Arrow"
  256. block_id[263] = "Coal"
  257. block_id[264] = "Diamond"
  258. block_id[265] = "Iron Ingot"
  259. block_id[266] = "Gold Ingot"
  260. block_id[267] = "Iron Sword"
  261. block_id[268] = "Wooden Sword"
  262. block_id[269] = "Wooden Shovel"
  263. block_id[270] = "Wooden Pickaxe"
  264. block_id[271] = "Wooden Axe"
  265. block_id[272] = "Stone Sword"
  266. block_id[273] = "Stone Shovel"
  267. block_id[274] = "Stone Pickaxe"
  268. block_id[275] = "Stone Axe"
  269. block_id[276] = "Diamond Sword"
  270. block_id[277] = "Diamond Shovel"
  271. block_id[278] = "Diamond Pickaxe"
  272. block_id[279] = "Diamond Axe"
  273. block_id[280] = "Stick"
  274. block_id[281] = "Bowl"
  275. block_id[282] = "Mushroom Stew"
  276. block_id[283] = "Golden Sword"
  277. block_id[284] = "Golden Shovel"
  278. block_id[285] = "Golden Pickaxe"
  279. block_id[286] = "Golden Axe"
  280. block_id[287] = "String"
  281. block_id[288] = "Feather"
  282. block_id[289] = "Gunpowder"
  283. block_id[290] = "Wooden Hoe"
  284. block_id[291] = "Stone Hoe"
  285. block_id[292] = "Iron Hoe"
  286. block_id[293] = "Diamond Hoe"
  287. block_id[294] = "Golden Hoe"
  288. block_id[295] = "Seeds"
  289. block_id[296] = "Wheat"
  290. block_id[297] = "Bread"
  291. block_id[298] = "Leather Cap"
  292. block_id[299] = "Leather Tunic"
  293. block_id[300] = "Leather Pants"
  294. block_id[301] = "Leather Boots"
  295. block_id[302] = "Chain Helmet"
  296. block_id[303] = "Chain Chestplate"
  297. block_id[304] = "Chain Leggings"
  298. block_id[305] = "Chain Boots"
  299. block_id[306] = "Iron Helmet"
  300. block_id[307] = "Iron Chestplate"
  301. block_id[308] = "Iron Leggings"
  302. block_id[309] = "Iron Boots"
  303. block_id[310] = "Diamond Helmet"
  304. block_id[311] = "Diamond Chestplate"
  305. block_id[312] = "Diamond Leggings"
  306. block_id[313] = "Diamond Boots"
  307. block_id[314] = "Golden Helmet"
  308. block_id[315] = "Golden Chestplate"
  309. block_id[316] = "Golden Leggings"
  310. block_id[317] = "Goldenoots"
  311. block_id[318] = "Flint"
  312. block_id[319] = "Raw Porkchop"
  313. block_id[320] = "Cooked Porkchop"
  314. block_id[321] = "Painting"
  315. block_id[322] = "Golden Apple"
  316. block_id[323] = "Sign"
  317. block_id[324] = "Oak Door"
  318. block_id[325] = "Bucket"
  319. block_id[326] = "Water Bucket"
  320. block_id[327] = "Lava Bucket"
  321. block_id[328] = "Minecart"
  322. block_id[329] = "Saddle"
  323. block_id[330] = "Ironoor"
  324. block_id[331] = "Redstone"
  325. block_id[332] = "Snowball"
  326. block_id[333] = "Boat"
  327. block_id[334] = "Leather"
  328. block_id[335] = "Milk"
  329. block_id[336] = "Brick"
  330. block_id[337] = "Clay"
  331. block_id[338] = "Sugar Cane"
  332. block_id[339] = "Paper"
  333. block_id[340] = "Book"
  334. block_id[341] = "Slimeball"
  335. block_id[342] = "Minecart with Chest"
  336. block_id[343] = "Minecart with Furnace"
  337. block_id[344] = "Egg"
  338. block_id[345] = "Compass"
  339. block_id[346] = "Fishing Rod"
  340. block_id[347] = "Clock"
  341. block_id[348] = "Glowstone Dust"
  342. block_id[349] = "Raw Fish"
  343. block_id[350] = "Cooked Fish"
  344. block_id[351] = "Dye"
  345. block_id[352] = "Bone"
  346. block_id[353] = "Sugar"
  347. block_id[354] = "Cake"
  348. block_id[355] = "Bed"
  349. block_id[356] = "Redstone Repeater"
  350. block_id[357] = "Cookie"
  351. block_id[358] = "Map"
  352. block_id[359] = "Shears"
  353. block_id[360] = "Melon"
  354. block_id[361] = "Pumpkin Seeds"
  355. block_id[362] = "Melon Seeds"
  356. block_id[363] = "Raw Beef"
  357. block_id[364] = "Steak"
  358. block_id[365] = "Raw Chicken"
  359. block_id[366] = "Cooked Chicken"
  360. block_id[367] = "Rotten Flesh"
  361. block_id[368] = "Ender Pearl"
  362. block_id[369] = "Blaze Rod"
  363. block_id[370] = "Ghast Tear"
  364. block_id[371] = "Gold Nugget"
  365. block_id[372] = "Nether Wart"
  366. block_id[373] = "Potion"
  367. block_id[374] = "Glass Bottle"
  368. block_id[375] = "Spider Eye"
  369. block_id[376] = "Fermented Spider Eye"
  370. block_id[377] = "Blaze Powder"
  371. block_id[378] = "Magma Cream"
  372. block_id[379] = "Brewing Stand"
  373. block_id[380] = "Cauldron"
  374. block_id[381] = "Eye of Ender"
  375. block_id[382] = "Glistering Melon"
  376. block_id[383] = "Spawn Egg"
  377. block_id[384] = "Bottle o' Enchanting"
  378. block_id[385] = "Fire Charge"
  379. block_id[386] = "Book and Quill"
  380. block_id[387] = "Written Book"
  381. block_id[388] = "Emerald"
  382. block_id[389] = "Item Frame"
  383. block_id[390] = "Flower Pot"
  384. block_id[391] = "Carrot"
  385. block_id[392] = "Potato"
  386. block_id[393] = "Baked Potato"
  387. block_id[394] = "Poisonous Potato"
  388. block_id[395] = "Empty Map"
  389. block_id[396] = "Golden Carrot"
  390. block_id[397] = "Mob head"
  391. block_id[398] = "Carrot on a Stick"
  392. block_id[399] = "Nether Star"
  393. block_id[400] = "Pumpkin Pie"
  394. block_id[401] = "Firework Rocket"
  395. block_id[402] = "Firework Star"
  396. block_id[403] = "Enchanted Book"
  397. block_id[404] = "Redstone Comparator"
  398. block_id[405] = "Netherrick"
  399. block_id[406] = "Nether Quartz"
  400. block_id[407] = "Minecart with TNT"
  401. block_id[408] = "Minecart with Hopper"
  402. block_id[409] = "Prismarine Shard"
  403. block_id[410] = "Prismarine Crystals"
  404. block_id[411] = "Raw Rabbit"
  405. block_id[412] = "Cooked Rabbit"
  406. block_id[413] = "Rabbit Stew"
  407. block_id[414] = "Rabbit's Foot"
  408. block_id[415] = "Rabbit Hide"
  409. block_id[416] = "Armor Stand"
  410. block_id[417] = "Iron Horse Armor"
  411. block_id[418] = "Golden Horse Armor"
  412. block_id[419] = "Diamond Horse Armor"
  413. block_id[420] = "Lead"
  414. block_id[421] = "Name Tag"
  415. block_id[422] = "Minecart with Commandlock"
  416. block_id[423] = "Raw Mutton"
  417. block_id[424] = "Cooked Mutton"
  418. block_id[425] = "Banner"
  419. block_id[426] = "End Crystal"
  420. block_id[427] = "Spruce Door"
  421. block_id[428] = "Birch Door"
  422. block_id[429] = "Jungle Door"
  423. block_id[430] = "Acacia Door"
  424. block_id[431] = "Dark Oakoor"
  425. block_id[432] = "Chorus Fruit"
  426. block_id[433] = "Popped Chorus Fruit"
  427. block_id[434] = "Beetroot"
  428. block_id[435] = "Beetroot Seeds"
  429. block_id[436] = "Beetroot Soup"
  430. block_id[437] = "Dragon's Breath"
  431. block_id[438] = "Splash Potion"
  432. block_id[439] = "Spectral Arrow"
  433. block_id[440] = "Tipped Arrow"
  434. block_id[441] = "Lingering Potion"
  435. block_id[442] = "Shield"
  436. block_id[443] = "Elytra"
  437. block_id[444] = "Spruce Boat"
  438. block_id[445] = "Birch Boat"
  439. block_id[446] = "Jungle Boat"
  440. block_id[447] = "Acacia Boat"
  441. block_id[448] = "Dark Oak Boat"
  442. block_id[2256] = "13 Disc"
  443. block_id[2257] = "Cat Disc"
  444. block_id[2258] = "Blocks Disc"
  445. block_id[2259] = "Chirp Disc"
  446. block_id[2260] = "Far Disc"
  447. block_id[2261] = "Mall Disc"
  448. block_id[2262] = "Mellohi Disc"
  449. block_id[2263] = "Stal Disc"
  450. block_id[2264] = "Strad Disc"
  451. block_id[2265] = "Ward Disc"
  452. block_id[2266] = "11 Disc"
  453. block_id[2267] = "Wait Disc"
  454.  
  455. woolColors = {}
  456. woolColors[0] = "White"
  457. woolColors[1] = "Orange"
  458. woolColors[2] = "Magenta"
  459. woolColors[3] = "Light Blue"
  460. woolColors[4] = "Yellow"
  461. woolColors[5] = "Lime"
  462. woolColors[6] = "Pink"
  463. woolColors[7] = "Gray"
  464. woolColors[8] = "Light Gray"
  465. woolColors[9] = "Cyan"
  466. woolColors[10] = "Purple"
  467. woolColors[11] = "Blue"
  468. woolColors[12] = "Brown"
  469. woolColors[13] = "Green"
  470. woolColors[14] = "Red"
  471. woolColors[15] = "Black"
  472.  
  473. woodColors = {}
  474. woodColors[0] = "Oak"
  475. woodColors[1] = "Spruce"
  476. woodColors[2] = "Birch"
  477. woodColors[3] = "Jungle"
  478. woodColors[4] = "Acacia"
  479. woodColors[5] = "Dark Oak"
  480.  
  481. sandstoneType = {}
  482. sandstoneType[0] = "Normal"
  483. sandstoneType[1] = "Chiseled"
  484. sandstoneType[2] = "Smooth"
  485.  
  486. function getBlockName(id, blockData)
  487. blockData = blockData or nil
  488. if(block_id[id] == nil) then
  489. return "UNKNOWN"
  490. else
  491. if(blockData) then
  492. -- Wood
  493. if(id == 5) then
  494. str = woodColors[blockData] .. " " .. block_id[id]
  495. return str
  496. end
  497. -- Wool e Carpet
  498. if (id == 35 or id == 171) then
  499. str = woolColors[blockData] .. " " .. block_id[id]
  500. return str
  501. end
  502. -- (Red) Sandstone
  503. if (id == 24 or id == 179) then
  504. str = sandstoneType[blockData] .. " " .. block_id[id]
  505. return str
  506. end
  507. end
  508. return block_id[id]
  509. end
  510. end
  511.  
  512. function getBlockId(x,y,z)
  513. return blocks[y + z*width + x*length*width + 1]
  514. end
  515.  
  516. function getData(x,y,z)
  517. return data[y + z*width + x*length*width + 1]
  518. end
  519.  
  520. function readbytes(h, n)
  521. for i=1,n do
  522. h.read()
  523. end
  524. end
  525.  
  526. function readname(h)
  527. n1 = h.read()
  528. n2 = h.read()
  529.  
  530. if(n1 == nil or n2 == nil) then
  531. return ""
  532. end
  533.  
  534. n = n1*256 + n2
  535.  
  536. str = ""
  537. for i=1,n do
  538. c = h.read()
  539. if c == nil then
  540. return
  541. end
  542. str = str .. string.char(c)
  543. end
  544. return str
  545. end
  546.  
  547. function parse(a, h, containsName)
  548. containsName = containsName or true
  549. if a==0 then
  550. return
  551. end
  552. if containsName then
  553. name = readname(h)
  554. end
  555.  
  556. if a==1 then
  557. readbytes(h,1)
  558. elseif a==2 then
  559. i1 = h.read()
  560. i2 = h.read()
  561. i = i1*256 + i2
  562. if(name=="Height") then
  563. height = i
  564. elseif (name=="Length") then
  565. length = i
  566. elseif (name=="Width") then
  567. width = i
  568. end
  569. elseif a==3 then
  570. readbytes(h,4)
  571. elseif a==4 then
  572. readbytes(h,8)
  573. elseif a==5 then
  574. readbytes(h,4)
  575. elseif a==6 then
  576. readbytes(h,8)
  577. elseif a==7 then
  578. i1 = h.read()
  579. i2 = h.read()
  580. i3 = h.read()
  581. i4 = h.read()
  582. i = i1*256*256*256 + i2*256*256 + i3*256 + i4
  583. if name == "Blocks" then
  584. for i=1,i do
  585. table.insert(blocks, h.read())
  586. end
  587. elseif name == "Data" then
  588. for i=1,i do
  589. table.insert(data, h.read())
  590. end
  591. else
  592. readbytes(h,i)
  593. end
  594. elseif a==8 then
  595. i1 = h.read()
  596. i2 = h.read()
  597. i = i1*256 + i2
  598. readbytes(h,i)
  599. elseif a==9 then
  600. --readbytes(h,5)
  601. type = h.read()
  602. i1 = h.read()
  603. i2 = h.read()
  604. i3 = h.read()
  605. i4 = h.read()
  606. i = i1*256*256*256 + i2*256*256 + i3*256 + i4
  607. for j=1,i do
  608. parse(h.read(), h, false)
  609. end
  610. end
  611. end
  612.  
  613. function forward()
  614. while not turtle.forward() do
  615. turtle.dig()
  616. end
  617. end
  618.  
  619. function up()
  620. while not turtle.up() do
  621. turtle.digUp()
  622. end
  623. end
  624.  
  625. function down()
  626. while not turtle.down() do
  627. turtle.digDown()
  628. end
  629. end
  630.  
  631. function place()
  632. iteminfo = turtle.getItemDetail()
  633. if iteminfo then
  634. if iteminfo.name ~= "minecraft:wheat_seeds" then
  635. while not turtle.placeDown() do
  636. turtle.digDown()
  637. end
  638. turtle.placeDown()
  639. end
  640. end
  641. end
  642.  
  643. h = fs.open(filename, "rb")
  644.  
  645. a = 0
  646. while (a ~= nil) do
  647. a = h.read()
  648. parse(a, h)
  649. end
  650.  
  651. write("length: " .. length)
  652. write(" width: " .. width)
  653. write(" height: " .. height .. "\n")
  654.  
  655. uniqueblocks={}
  656. for i,v in ipairs(blocks) do
  657. found = false
  658. for j,w in ipairs(uniqueblocks) do
  659. -- for now, data is only accounted for when the block is whool
  660. if (w.blockID==v and (w.data==data[i] or w.blockID ~= 35)) then
  661. found = true
  662. w.amount = w.amount + 1
  663. break
  664. end
  665. end
  666.  
  667. if found==false then
  668. uniqueblocks[#uniqueblocks+1] = {}
  669. uniqueblocks[#uniqueblocks].blockID = v
  670. uniqueblocks[#uniqueblocks].data = data[i]
  671. uniqueblocks[#uniqueblocks].amount = 1
  672. end
  673. end
  674.  
  675. print("number of block types: " .. #uniqueblocks)
  676. for i,v in ipairs(uniqueblocks) do
  677. if (i%9)==0 then
  678. read()
  679. end
  680. print(" -" .. getBlockName(v.blockID, v.data) .. ": " .. v.amount)
  681. end
  682.  
  683. read()
  684.  
  685. print("Give the numbers of all slots containing the specified block type:")
  686.  
  687. slots={}
  688. for i,block in ipairs(uniqueblocks) do
  689. blockData = block.data
  690. print(" -in which slots is " .. getBlockName(block.blockID, blockData) .. "?")
  691. if not slots[block.blockID] then
  692. slots[block.blockID] = {}
  693. end
  694. slots[block.blockID][blockData] = {}
  695. write(" ")
  696. str = read()
  697. for i = 1, #str do
  698. local c = str:sub(i,i)
  699. n = tonumber(c)
  700. if(n) then
  701. if(n>0 and n<10) then
  702. table.insert(slots[block.blockID][blockData], n)
  703. end
  704. end
  705. end
  706. end
  707.  
  708. print("Press key to start building...")
  709. read()
  710.  
  711. up()
  712. n = 1
  713. turtle.select(n)
  714.  
  715. for x=1,height do
  716. for y=1,width do
  717. for z=1,length do
  718. blockID = getBlockId(x-1,y-1,z-1)
  719. blockData = getData(x-1,y-1,z-1)
  720. forward()
  721. turtle.digDown()
  722. slot_lst = slots[blockID][blockData]
  723. if(slot_lst ~= nil) then
  724. if(#slot_lst > 0) then
  725. local found=false
  726. for i,v in ipairs(slot_lst) do
  727. if(turtle.getItemCount(v) > 0) then
  728. found=true
  729. turtle.select(v)
  730. break
  731. end
  732. end
  733. if not found then
  734. print("Not enough " .. getBlockName(blockID, blockData) .. ". Please refill...")
  735. read()
  736. end
  737. place()
  738. end
  739. end
  740. end
  741. turtle.turnLeft()
  742. forward()
  743. turtle.turnLeft()
  744. for i=1,length do
  745. forward()
  746. end
  747. turtle.turnRight()
  748. turtle.turnRight()
  749. end
  750. turtle.turnRight()
  751. for i=1,width do
  752. forward()
  753. end
  754. turtle.turnLeft()
  755. up()
  756. end
  757.  
  758. for i=1,height+1 do
  759. down()
  760. end
Add Comment
Please, Sign In to add comment