Advertisement
shirkit

schemaToAware

Jul 15th, 2013
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.54 KB | None | 0 0
  1. -- Made By Orwell
  2. -- version 0.2.1 - 3 june 2012
  3.  
  4. local tArgs = { ... }
  5. if #tArgs ~= 1 then
  6. print("Usage: build <gunzipped schematic file>")
  7. return
  8. end
  9.  
  10. local filename = tArgs[1]
  11.  
  12. if not fs.exists(filename) then
  13. print("File does not exist.")
  14. return
  15. end
  16.  
  17. local length = 0
  18. local height = 0
  19. local width = 0
  20. local blocks = {}
  21. local data = {}
  22.  
  23. block_id = {}
  24.  
  25. block_id[0] = "Air"
  26. block_id[1] = "Stone"
  27. block_id[2] = "Grass"
  28. block_id[3] = "Dirt"
  29. block_id[4] = "Cobblestone"
  30. block_id[5] = "Wooden Plank"
  31. block_id[6] = "Sapling"
  32. block_id[7] = "Bedrock"
  33. block_id[8] = "Water"
  34. block_id[9] = "Stationary water"
  35. block_id[10] = "Lava"
  36. block_id[11] = "Stationary lava"
  37. block_id[12] = "Sand"
  38. block_id[13] = "Gravel"
  39. block_id[14] = "Gold Ore"
  40. block_id[15] = "Iron (Ore)"
  41. block_id[16] = "Coal Ore"
  42. block_id[17] = "Log"
  43. block_id[18] = "Leaves"
  44. block_id[19] = "Sponge"
  45. block_id[20] = "Glass"
  46. block_id[21] = "Lapis Lazuli (Ore)"
  47. block_id[22] = "Lapis Lazuli (Block)"
  48. block_id[23] = "Dispenser"
  49. block_id[24] = "Sandstone"
  50. block_id[25] = "Note Block Tile entity"
  51. block_id[26] = "Bed"
  52. block_id[27] = "Powered Rail "
  53. block_id[28] = "Detector Rail "
  54. block_id[29] = "Sticky Piston"
  55. block_id[30] = "Cobweb"
  56. block_id[31] = "Tall Grass"
  57. block_id[32] = "Dead Bush"
  58. block_id[33] = "Piston"
  59. block_id[34] = "Piston Extension"
  60. block_id[35] = "Wool"
  61. block_id[36] = "Block moved by Piston"
  62. block_id[37] = "Dandelionandelion"
  63. block_id[38] = "Rose"
  64. block_id[39] = "Brown Mushroom"
  65. block_id[40] = "Red Mushroom"
  66. block_id[41] = "Block of Gold"
  67. block_id[42] = "Block of Iron"
  68. block_id[43] = "Double Slabs"
  69. block_id[44] = "Slabs"
  70. block_id[45] = "Brick Block"
  71. block_id[46] = "TNT"
  72. block_id[47] = "Bookshelf"
  73. block_id[48] = "Moss Stone"
  74. block_id[49] = "Obsidian"
  75. block_id[50] = "Torch"
  76. block_id[51] = "Fire"
  77. block_id[52] = "Monster Spawner"
  78. block_id[53] = "Wooden Stairs"
  79. block_id[54] = "Chest"
  80. block_id[55] = "Redstone (Wire)"
  81. block_id[56] = "Diamond (Ore)"
  82. block_id[57] = "Block of Diamond"
  83. block_id[58] = "Crafting Table"
  84. block_id[59] = "Seeds"
  85. block_id[60] = "Farland"
  86. block_id[61] = "Furnace"
  87. block_id[62] = "Burning Furnace"
  88. block_id[63] = "Sign Post"
  89. block_id[64] = "Wooden Door"
  90. block_id[65] = "Ladders"
  91. block_id[66] = "Rails"
  92. block_id[67] = "Cobblestone Stairs"
  93. block_id[68] = "Wall Sign"
  94. block_id[69] = "Lever"
  95. block_id[70] = "Stone Pressure Plate"
  96. block_id[71] = "Iron Door"
  97. block_id[72] = "Wooden Pressure Plates"
  98. block_id[73] = "Redstone Ore"
  99. block_id[74] = "Glowing Redstone Ore"
  100. block_id[75] = "Redstone Torch"
  101. block_id[76] = "Redstone Torch"
  102. block_id[77] = "Stone Button "
  103. block_id[78] = "Snow"
  104. block_id[79] = "Ice"
  105. block_id[80] = "Snow Block"
  106. block_id[81] = "Cactus"
  107. block_id[82] = "Clay (Block)"
  108. block_id[83] = "Sugar Cane"
  109. block_id[84] = "Jukebox"
  110. block_id[85] = "Fence"
  111. block_id[86] = "Pumpkin"
  112. block_id[87] = "Netherrack"
  113. block_id[88] = "Soul Sand"
  114. block_id[89] = "Glowstone"
  115. block_id[90] = "Portal"
  116. block_id[91] = "Jack-O-Lantern"
  117. block_id[92] = "Cake Block"
  118. block_id[93] = "Redstone Repeater"
  119. block_id[94] = "Redstone Repeater"
  120. block_id[95] = "Locked Chest"
  121. block_id[96] = "Trapdoors"
  122. block_id[97] = "Hidden Silverfish"
  123. block_id[98] = "Stone Brick"
  124. block_id[99] = "Huge brown and red mushroom"
  125. block_id[100] = "Huge brown and red mushroom"
  126. block_id[101] = "Iron Bars"
  127. block_id[102] = "Glass Pane"
  128. block_id[103] = "Melon"
  129. block_id[104] = "Pumpkin Stem"
  130. block_id[105] = "Melon Stem"
  131. block_id[106] = "Vines"
  132. block_id[107] = "Fence Gate"
  133. block_id[108] = "Brick Stairs"
  134. block_id[109] = "Stone Brick Stairs"
  135. block_id[110] = "Mycelium"
  136. block_id[111] = "Lily Pad"
  137. block_id[112] = "Nether Brick"
  138. block_id[113] = "Nether Brick Fence"
  139. block_id[114] = "Nether Brick Stairs"
  140. block_id[115] = "Nether Wart"
  141. block_id[116] = "Enchantment Table"
  142. block_id[117] = "Brewing Stand"
  143. block_id[118] = "Cauldron"
  144. block_id[119] = "End Portal"
  145. block_id[120] = "End Portal Frame"
  146. block_id[121] = "End Stone "
  147. block_id[256] = "Iron Ingotron Shovel"
  148. block_id[257] = "Iron Pickaxe"
  149. block_id[258] = "Iron Axe"
  150. block_id[259] = "Flint and Steel"
  151. block_id[260] = "Red Apple"
  152. block_id[261] = "Bow"
  153. block_id[262] = "Arrow"
  154. block_id[263] = "Coal"
  155.  
  156. woolColors = {}
  157. woolColors[0] = "White"
  158. woolColors[1] = "Orange"
  159. woolColors[2] = "Magenta"
  160. woolColors[3] = "Light Blue"
  161. woolColors[4] = "Yellow"
  162. woolColors[5] = "Lime"
  163. woolColors[6] = "Pink"
  164. woolColors[7] = "Gray"
  165. woolColors[8] = "Light Gray"
  166. woolColors[9] = "Cyan"
  167. woolColors[10] = "Purple"
  168. woolColors[11] = "Blue"
  169. woolColors[12] = "Brown"
  170. woolColors[13] = "Green"
  171. woolColors[14] = "Red"
  172. woolColors[15] = "Black"
  173.  
  174. function getBlockName(id, blockData)
  175. blockData = blockData or nil
  176. if(block_id[id] == nil) then
  177. return "UNKNOWN"
  178. else
  179. if(blockData) then
  180. if(id == 35) then
  181. str = woolColors[blockData] .. " " .. block_id[id]
  182. return str
  183. end
  184. end
  185. return block_id[id]
  186. end
  187. end
  188.  
  189. function getBlockId(x,y,z)
  190. return blocks[y + z*width + x*length*width + 1]
  191. end
  192.  
  193. function getData(x,y,z)
  194. d = data[y + z*width + x*length*width + 1]
  195. if d == nil then
  196. d = 0
  197. end
  198. return d
  199. end
  200.  
  201. function readbytes(h, n)
  202. for i=1,n do
  203. h.read()
  204. end
  205. end
  206.  
  207. function readname(h)
  208. n1 = h.read()
  209. n2 = h.read()
  210.  
  211. if(n1 == nil or n2 == nil) then
  212. return ""
  213. end
  214.  
  215. n = n1*256 + n2
  216.  
  217. str = ""
  218. for i=1,n do
  219. c = h.read()
  220. if c == nil then
  221. return
  222. end
  223. str = str .. string.char(c)
  224. end
  225. return str
  226. end
  227.  
  228. function parse(a, h, containsName)
  229. containsName = containsName or true
  230. if a==0 then
  231. return
  232. end
  233. if containsName then
  234. name = readname(h)
  235. end
  236.  
  237. if a==1 then
  238. readbytes(h,1)
  239. elseif a==2 then
  240. i1 = h.read()
  241. i2 = h.read()
  242. i = i1*256 + i2
  243. if(name=="Height") then
  244. height = i
  245. elseif (name=="Length") then
  246. length = i
  247. elseif (name=="Width") then
  248. width = i
  249. end
  250. elseif a==3 then
  251. readbytes(h,4)
  252. elseif a==4 then
  253. readbytes(h,8)
  254. elseif a==5 then
  255. readbytes(h,4)
  256. elseif a==6 then
  257. readbytes(h,8)
  258. elseif a==7 then
  259. i1 = h.read()
  260. i2 = h.read()
  261. i3 = h.read()
  262. i4 = h.read()
  263. i = i1*256*256*256 + i2*256*256 + i3*256 + i4
  264. if name == "Blocks" then
  265. for i=1,i do
  266. table.insert(blocks, h.read())
  267. end
  268. elseif name == "Data" then
  269. for i=1,i do
  270. table.insert(data, h.read())
  271. end
  272. else
  273. readbytes(h,i)
  274. end
  275. elseif a==8 then
  276. i1 = h.read()
  277. i2 = h.read()
  278. i = i1*256 + i2
  279. readbytes(h,i)
  280. elseif a==9 then
  281. --readbytes(h,5)
  282. type = h.read()
  283. i1 = h.read()
  284. i2 = h.read()
  285. i3 = h.read()
  286. i4 = h.read()
  287. i = i1*256*256*256 + i2*256*256 + i3*256 + i4
  288. for j=1,i do
  289. parse(h.read(), h, false)
  290. end
  291. end
  292. end
  293.  
  294. function forward()
  295. while not turtle.forward() do
  296. turtle.dig()
  297. end
  298. end
  299.  
  300. function up()
  301. while not turtle.up() do
  302. turtle.digUp()
  303. end
  304. end
  305.  
  306. function down()
  307. while not turtle.down() do
  308. turtle.digDown()
  309. end
  310. end
  311.  
  312. function place()
  313. while not turtle.placeDown() do
  314. turtle.digDown()
  315. end
  316. end
  317.  
  318. h = fs.open(filename, "rb")
  319.  
  320. a = 0
  321. while (a ~= nil) do
  322. a = h.read()
  323. parse(a, h)
  324. end
  325.  
  326. write("length: " .. length)
  327. write(" width: " .. width)
  328. write(" height: " .. height .. "\n")
  329.  
  330. uniqueblocks={}
  331. for i,v in ipairs(blocks) do
  332. found = false
  333. for j,w in ipairs(uniqueblocks) do
  334. -- for now, data is only accounted for when the block is whool
  335. if (w.blockID==v and (w.data==data[i] or w.blockID ~= 35)) then
  336. found = true
  337. w.amount = w.amount + 1
  338. break
  339. end
  340. end
  341.  
  342. if found==false then
  343. uniqueblocks[#uniqueblocks+1] = {}
  344. uniqueblocks[#uniqueblocks].blockID = v
  345. if data[i] == nil then
  346. data[i] = 0
  347. end
  348. uniqueblocks[#uniqueblocks].data = data[i]
  349. uniqueblocks[#uniqueblocks].amount = 1
  350. end
  351. end
  352.  
  353. s = "aware"
  354. t = {}
  355. os.loadAPI("matrix")
  356. os.loadAPI("utils")
  357. i = -1
  358. fs.makeDir(s .. filename)
  359.  
  360. for yy = 0,height-1,1 do
  361.  
  362. layer = matrix.create()
  363.  
  364. for xx = 0,width-1,1 do
  365. for zz = 0,length-1,1 do
  366. d = getBlockId(yy,xx,zz)
  367. if d ~= nil and block_id[d] ~= nil then
  368. w = t[d]
  369. if w == nil then
  370. i = i + 1
  371. t[d] = i
  372. w = t[d]
  373. end
  374. if d ~= 0 then
  375. matrix.set(layer, xx, zz, w)
  376. end
  377. end
  378. end
  379. end
  380.  
  381. utils.vartofile(layer, s .. filename .. "/" .. s .. filename .. yy)
  382.  
  383. sleep(0)
  384. end
  385.  
  386. print("number of block types: " .. i)
  387. for i,v in pairs(t) do
  388. print(" - Slot " .. v .. " | block " .. getBlockName(i, 0))
  389. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement