SHOW:
|
|
- or go back to the newest paste.
| 1 | local ccCoord = {}
| |
| 2 | ccCoord["x"], ccCoord["y"], ccCoord["z"] = commands.getBlockPosition() | |
| 3 | local blockData = {}
| |
| 4 | local facing = "" | |
| 5 | local fx = 0 | |
| 6 | local fz = 0 | |
| 7 | local swapxz = false | |
| 8 | ||
| 9 | function getFacing() | |
| 10 | local directions = {"unknown", "north", "south", "west", "east"}
| |
| 11 | local blockInfo = commands.getBlockInfo( commands.getBlockPosition() ) | |
| 12 | print( "My facing is ", directions[ blockInfo.metadata ], "." ) | |
| 13 | facing = directions[ blockInfo.metadata ] | |
| 14 | --print(facing) | |
| 15 | end | |
| 16 | ||
| 17 | function setModifiers() | |
| 18 | if facing == "west" then | |
| 19 | fx = 1 | |
| 20 | fz = 1 | |
| 21 | swapxz = true | |
| 22 | elseif facing == "east" then | |
| 23 | fx = -1 | |
| 24 | fz = -1 | |
| 25 | swapxz = true | |
| 26 | elseif facing == "north" then | |
| 27 | fx = -1 | |
| 28 | fz = 1 | |
| 29 | swapxz = false | |
| 30 | elseif facing == "south" then | |
| 31 | fx = 1 | |
| 32 | fz = -1 | |
| 33 | swapxz = false | |
| 34 | end | |
| 35 | end | |
| 36 | ||
| 37 | ||
| 38 | function saveBlock(x,y,z) | |
| 39 | local data = commands.getBlockInfo(x,y,z) | |
| 40 | if not blockData[x] then | |
| 41 | blockData[x] = {}
| |
| 42 | end | |
| 43 | if not blockData[x][y] then | |
| 44 | blockData[x][y] = {}
| |
| 45 | end | |
| 46 | if not blockData[x][y][z] then | |
| 47 | blockData[x][y][z] = {}
| |
| 48 | end | |
| 49 | blockData[x][y][z]["name"] = data["name"] | |
| 50 | blockData[x][y][z]["metadata"] = data["metadata"] | |
| 51 | end | |
| 52 | ||
| 53 | function writeBlocks() | |
| 54 | file = io.open("blocks", "w")
| |
| 55 | file:write(textutils.serialize(blockData)) | |
| 56 | file:close() | |
| 57 | end | |
| 58 | ||
| 59 | function saveSpace(xStart, xEnd, yStart, yEnd, zStart, zEnd) | |
| 60 | --print(xStart..xEnd..yStart..yEnd..zStart..zEnd) | |
| 61 | for x = xStart, xEnd,fx do | |
| 62 | for y = yStart, yEnd do | |
| 63 | for z = zStart, zEnd,fz do | |
| 64 | saveBlock(x,y,z) | |
| 65 | end | |
| 66 | end | |
| 67 | end | |
| 68 | writeBlocks() | |
| 69 | end | |
| 70 | ||
| 71 | function relXYZnoswap(x,y,z) | |
| 72 | --print("NoSwap: "..ccCoord["x"]+(x+1)*fx..":"..ccCoord["y"]+(y)..":"..ccCoord["z"]+(z+1)*fz)
| |
| 73 | return ccCoord["x"]+(x+1)*fx, ccCoord["y"]+(y), ccCoord["z"]+(z+1)*fz | |
| 74 | end | |
| 75 | ||
| 76 | function relXYZ(x,y,z) | |
| 77 | if not swapxz then | |
| 78 | return ccCoord["x"]+(x+1)*fx, ccCoord["y"]+(y), ccCoord["z"]+(z+1)*fz | |
| 79 | else | |
| 80 | return ccCoord["x"]+(z+1)*fz, ccCoord["y"]+(y), ccCoord["z"]+(x+1)*fx | |
| 81 | end | |
| 82 | end | |
| 83 | ||
| 84 | function saveBoardArea() | |
| 85 | print("Saving board area, this may take a moment....")
| |
| 86 | local x,y,z,x2,y2,z2 | |
| 87 | x,y,z = relXYZnoswap(0,-1,0) | |
| 88 | x2,y2,z2 = relXYZnoswap(9,5,9) | |
| 89 | print("Save: "..x..":"..x2..", "..y..":"..y2..", "..z..":"..z2)
| |
| 90 | saveSpace(x,x2,y,y2,z,z2) | |
| 91 | print("Saving board area complete.")
| |
| 92 | end | |
| 93 | ||
| 94 | getFacing() | |
| 95 | setModifiers() | |
| 96 | saveBoardArea() |