59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
#
|
|
# Code under the MIT license by Alexander Pruss
|
|
#
|
|
# mengersponge [levels [options]]
|
|
# levels is a level count, up to 5
|
|
# options is a string of characters containing possibly the options 's' for 'slice' (cut off a diagonal slice) and 'c' for 'color'
|
|
#
|
|
from mc import *
|
|
import mcpi.settings as settings
|
|
import sys
|
|
|
|
RAINBOW = (STAINED_GLASS_RED,STAINED_GLASS_ORANGE,STAINED_GLASS_YELLOW,STAINED_GLASS_GREEN,STAINED_GLASS_BLUE,STAINED_GLASS_PURPLE)
|
|
|
|
def deleteCubes(x0,y0,z0,length,colorIndex=None):
|
|
nextColorIndex = colorIndex + 1 if colorIndex is not None else None
|
|
length /= 3
|
|
if length < 1:
|
|
return
|
|
for x in range(3):
|
|
for y in range(3):
|
|
for z in range(3):
|
|
posX = x0+x*length
|
|
posY = y0+y*length
|
|
posZ = z0+z*length
|
|
if (x == 1 and y == 1) or (x == 1 and z == 1) or (y == 1 and z == 1):
|
|
if colorIndex is not None:
|
|
mc.setBlocks(posX,posY,posZ,
|
|
posX+length-1,posY+length-1,posZ+length-1,RAINBOW[colorIndex])
|
|
else:
|
|
mc.setBlocks(posX,posY,posZ,
|
|
posX+length-1,posY+length-1,posZ+length-1,AIR)
|
|
else:
|
|
deleteCubes(posX,posY,posZ,length,nextColorIndex)
|
|
|
|
def slice(x0,y0,z0,length):
|
|
for x in range(0,length):
|
|
for y in range(0,length):
|
|
for z in range(0,length):
|
|
if x+y+z >= 1.5*length:
|
|
mc.setBlock(x0+x,y0+y,z0+z,AIR)
|
|
|
|
mc = Minecraft()
|
|
playerPos = mc.player.getPos()
|
|
if settings.isPE:
|
|
length = 3*3*3
|
|
else:
|
|
length = 3*3*3*3
|
|
if len(sys.argv) > 1:
|
|
length = 3**int(sys.argv[1])
|
|
colorIndex = None
|
|
if len(sys.argv) > 2:
|
|
colorIndex = 0 if 'c' in sys.argv[2] else None
|
|
mc.setBlocks(playerPos.x,playerPos.y,playerPos.z,
|
|
playerPos.x+length-1,playerPos.y+length-1,playerPos.z+length-1,WOOL_PURPLE)
|
|
deleteCubes(playerPos.x,playerPos.y,playerPos.z,length,colorIndex=colorIndex)
|
|
if len(sys.argv)>2 and 's' in sys.argv[2]:
|
|
mc.postToChat("Slicing")
|
|
slice(playerPos.x,playerPos.y,playerPos.z,length)
|