Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from ast import literal_eval
- def raise_error(text):
- raise Exception ("{}".format(text))
- data = None
- dataVersion = None
- mainData = None
- with open(raw_input("File path:\n"),"r") as localFile:
- data = localFile.read()
- localFile.close()
- data = data.replace("\r","").split("\n")
- newData = []
- for line in data:
- if line.find("#",0,1) != 0:
- newData.append(line)
- data = newData
- for line in range(0,len(data)):
- mainDataPos = []
- if data[line].find("@Start",0) == 0:
- dataVersion = data[line][1:]
- mainDataPos.append(line)
- for newLine in range(line+1,len(data)):
- if data[newLine].find("@End",0) == 0:
- mainDataPos.append(newLine)
- break
- if len(mainDataPos) != 2:
- raise_error("Missing \"@End\"to close the main data")
- else:
- try:
- mainData = literal_eval("".join(data[mainDataPos[0]+1:mainDataPos[1]]))
- data = data[:mainDataPos[0]]+data[mainDataPos[1]+1:]
- except Exception as inst:
- raise_error("mainData has an invalid format:\n{}\n{}".format(type(inst),inst))
- break
- if len(data) == 0:
- raise_error("No data was found")
- else:
- # See http://minecraft.gamepedia.com/Formatting_codes
- validCharacters = ["{0:x}".format(i) for i in range(0,16)]
- newData = []
- for line in data:
- newLine = "\u2b1b\\\u00a7".decode("unicode-escape").join(i for i in line if i in validCharacters)
- if len(newLine) != 0:
- newData.append("\u00a7"+newLine+"\u2b1b".decode("unicode-escape"))
- mainValues = {
- "gapValue": 0.23,
- "positionType": "bottom",
- "baseCoordinates": ["~","~","~"],
- "newBaseCoordinates": [0,-6,0],
- }
- try:
- mainValues["gapValue"] = float(mainData["Gap"])
- except:
- pass
- try:
- mainValues["positionType"] = mainData["Pos"][1]
- except:
- pass
- try:
- mainValues["baseCoordinates"] = mainData["Pos"][0]
- except:
- pass
- if mainValues["positionType"] == "top":
- mainValues["gapValue"] *= -1
- for i in range(0,3):
- if mainValues["baseCoordinates"][i].find("~",0,1) != 0:
- mainValues["newBaseCoordinates"][i] = float(mainValues["baseCoordinates"][i])
- else:
- mainValues["newBaseCoordinates"][i] += float(mainValues["baseCoordinates"][i][1:]) if len(mainValues["baseCoordinates"][i]) > 1 else 0
- lastHeight = mainValues["newBaseCoordinates"][1]
- commands = []
- for i in range(0,len(newData)):
- coordinates = [None,None,None]
- line = None
- if mainValues["positionType"] == "top":
- line = newData.pop(0)
- else:
- line = newData.pop()
- for j in range(0,3):
- if j == 1:
- coordinate = lastHeight
- else:
- coordinate = float(mainValues["newBaseCoordinates"][j])
- if int(coordinate) == coordinate:
- coordinate = int(coordinate)
- if mainValues["baseCoordinates"][j].find("~",0,1) == 0:
- coordinates[j] = u"~{}".format(coordinate)
- else:
- coordinates[j] = u"{}".format(coordinate)
- lastHeight += mainValues["gapValue"]
- commands.append(u"/summon ArmorStand {} {} {} {{NoGravity:1,Invulnerable:1,Invisible:1,Marker:1,CustomName:{},CustomNameVisible:1}}".format(coordinates[0],coordinates[1],coordinates[2],line))
- def create_command(commandList):
- closeBrackets = []
- command = "/summon MinecartCommandBlock ~ ~2 ~ {Command:/setblock ~ ~-4 ~ redstone_block"
- closeBrackets.append("}")
- command += "#"
- #Need this, else it will skip the first minecarts
- command += ",Riding:{id:MinecartCommandBlock"
- closeBrackets.append("}")
- command += ",Riding:{id:FallingSand,Time:1,Block:activator_rail"
- closeBrackets.append("}")
- command += ",Riding:{id:FallingSand,Time:1,Block:redstone_block"
- closeBrackets.append("}")
- command += ",Riding:{id:FallingSand,Time:1,Block:stone"
- closeBrackets.append("}")
- command += ",Riding:{id:FallingSand,Time:1,Block:command_block,TileEntityData:{Command:/fill ~ ~-2 ~ ~ ~3 ~ air}"
- closeBrackets.append("}")
- command += ",Riding:{id:FallingSand,Time:1,Block:stone"
- closeBrackets.append("}")
- commandStack = ""
- while len(commands) > 0:
- localCommand = commands.pop(0)
- localCommand = ",Riding:{id:MinecartCommandBlock,Command:"+localCommand
- commandStack += localCommand
- closeBrackets.append("}")
- command = command.replace("#",commandStack)
- while len(closeBrackets) != 0:
- command += closeBrackets.pop()
- return command
- returnCommand = "/setblock ~ ~1 ~ standing_sign 0 replace {Text1:\"{text:Click,clickEvent:{action:run_command,value:\\\"/setblock ~ ~1 ~ command_block 0 replace {Command:/kill @e[type=MinecartCommandBlock,dy=6]}\\\"}}\",Text2:\"{text:\\\"\\\",clickEvent:{action:run_command,value:\\\"#\\\"}}\"}"
- returnCommand = returnCommand.replace("#",create_command(commands))
- print returnCommand
Advertisement
Add Comment
Please, Sign In to add comment