From 22047061fa93fec912d0460c57778e24a7964414 Mon Sep 17 00:00:00 2001 From: arpruss Date: Sun, 28 Jun 2015 09:05:37 -0500 Subject: [PATCH] improve Juice compatibility in scripts --- python2-scripts.zip | Bin 177942 -> 177384 bytes python2-scripts/mcpipy/bridge.py | 6 +- python2-scripts/mcpipy/console.py | 3 + python2-scripts/mcpipy/forcefield.py | 76 ------------------ python2-scripts/mcpipy/grenade.py | 13 ++- python2-scripts/mcpipy/header.py | 9 --- python2-scripts/mcpipy/mcturtle.py | 25 ++++-- python2-scripts/mcpipy/turtleconsole.py | 4 + python2-scripts/mcpipy/vehicle.py | 1 - python3-scripts.zip | Bin 176975 -> 177277 bytes python3-scripts/mcpipy/bridge.py | 6 +- python3-scripts/mcpipy/console.py | 3 + python3-scripts/mcpipy/forcefield.py | 76 ------------------ python3-scripts/mcpipy/grenade.py | 13 ++- python3-scripts/mcpipy/header.py | 9 --- python3-scripts/mcpipy/mandelbulb.py | 23 +++++- python3-scripts/mcpipy/mcpipy.sln | 4 +- python3-scripts/mcpipy/mcturtle.py | 25 ++++-- python3-scripts/mcpipy/mengersponge.py | 11 +++ python3-scripts/mcpipy/turtleconsole.py | 4 + python3-scripts/mcpipy/vehicle.py | 1 - .../raspberryjammod/APIHandler.java | 1 + 22 files changed, 110 insertions(+), 203 deletions(-) delete mode 100755 python2-scripts/mcpipy/forcefield.py delete mode 100755 python2-scripts/mcpipy/header.py delete mode 100755 python3-scripts/mcpipy/forcefield.py delete mode 100755 python3-scripts/mcpipy/header.py diff --git a/python2-scripts.zip b/python2-scripts.zip index 6f9d0634b5d7e9b88b90066b881b4f4caf1dc872..30ee5ccb9e8f6eaad75dc6661cf87b4f6caa6d71 100755 GIT binary patch delta 22944 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 SfIjpe++6_RGz=QS0RIO^?ba;- diff --git a/python2-scripts/mcpipy/bridge.py b/python2-scripts/mcpipy/bridge.py index f14db7e..56d3313 100755 --- a/python2-scripts/mcpipy/bridge.py +++ b/python2-scripts/mcpipy/bridge.py @@ -9,16 +9,16 @@ mc = Minecraft() -playerId = mc.getPlayerId() try: playerId = int(os.environ['MINECRAFT_PLAYER_ID']) + getTilePos = lambda: mc.entity.getTilePos(playerId) except: - pass + getTilePos = mc.player.getTilePos bridge = [] while True: - pos = mc.entity.getTilePos(playerId) + pos = getTilePos() pos.y = pos.y - 1 belowBlock = mc.getBlock(pos) if belowBlock == AIR.id or belowBlock == WATER_FLOWING.id or belowBlock == WATER_STATIONARY.id: diff --git a/python2-scripts/mcpipy/console.py b/python2-scripts/mcpipy/console.py index 6294366..3d09fdb 100755 --- a/python2-scripts/mcpipy/console.py +++ b/python2-scripts/mcpipy/console.py @@ -1,6 +1,8 @@ # # Code under the MIT license by Alexander Pruss # +# This script only works on Raspberry Jam +# import mcpi.minecraft as minecraft import time @@ -9,6 +11,7 @@ import code import sys + def quit(): sys.exit() diff --git a/python2-scripts/mcpipy/forcefield.py b/python2-scripts/mcpipy/forcefield.py deleted file mode 100755 index 5b48f59..0000000 --- a/python2-scripts/mcpipy/forcefield.py +++ /dev/null @@ -1,76 +0,0 @@ -from mc import * -import os -import time - -RADIUS = 5 -THICKNESS = 2 - -def setBlock(pos, block): - if not pos in records or records[pos] != block: - records[pos] = block - mc.setBlock(pos, block) - -def sphere(dictionary,x0,y0,z0,R,thickness,block): - R2 = R*R - r = R-thickness - r2 = r*r - for x in range(-R,R+1): - for y in range(-R,R+1): - for z in range(-R,R+1): - dist2 = x*x+y*y+z*z - if dist2 <= r2: - dictionary[(x0+x,y0+y,z0+z)] = AIR - elif dist2 <= R2: - dictionary[(x0+x,y0+y,z0+z)] = block - -def platform(dictionary,x0,y0,z0,block): - dictionary[(x0,y0-1,z0)] = block - -def draw(dictionary): - for pos in dictionary: - setBlock(pos,dictionary[pos]) - -def light(x,y,z): - setBlock((x,y-1,z+1),Block(TORCH.id, 3)) - setBlock((x,y-1,z-1),Block(TORCH.id, 4)) - setBlock((x-1,y-1,z),Block(TORCH.id, 2)) - setBlock((x+1,y-1,z),Block(TORCH.id, 1)) - -def unlight(x,y,z): - setBlock((x,y-1,z+1),AIR) - setBlock((x,y-1,z-1),AIR) - setBlock((x-1,y-1,z),AIR) - setBlock((x+1,y-1,z),AIR) - - -mc = Minecraft() -records = {} - -try: - player = int( os.environ['MINECRAFT_PLAYER_ID'] ) -except: - player = mc.getPlayerId() - -prev = None -current = {} -while True: - pos = mc.entity.getTilePos(player) - if prev is None or prev != pos: - dictionary = {} - - if not prev is None: - unlight(prev.x,prev.y,prev.z) - sphere(dictionary, prev.x, prev.y, prev.z, RADIUS, THICKNESS, AIR) - platform(dictionary, prev.x, prev.y, prev.z, AIR) - - # or 166 for barrier - sphere(dictionary, pos.x, pos.y, pos.z, RADIUS, THICKNESS, GLASS) - platform(dictionary, pos.x, pos.y, pos.z, 1) - draw(dictionary) - if len(records) > 100000: - records = {} - - light(pos.x, pos.y, pos.z) - - prev = pos - time.sleep(0.1) diff --git a/python2-scripts/mcpipy/grenade.py b/python2-scripts/mcpipy/grenade.py index 6f08077..2504d5a 100755 --- a/python2-scripts/mcpipy/grenade.py +++ b/python2-scripts/mcpipy/grenade.py @@ -81,12 +81,17 @@ def getXYZ(path, t1): try: player = int(os.environ['MINECRAFT_PLAYER_ID']) + getPos = lambda: mc.entity.getPos(player) + getRotation = lambda: mc.entity.getRotation(player) + getPitch = lambda: mc.entity.getPitch(player) except: - player = mc.getPlayerId() + getPos = mc.player.getPos + getRotation = mc.player.getRotation + getPitch = mc.player.getPitch -center = mc.entity.getPos(player) -azi = mc.entity.getRotation(player) * pi/180. -alt = -mc.entity.getPitch(player) * pi/180. +center = getPos() +azi = getRotation() * pi/180. +alt = -getPitch() * pi/180. GRENADE = { (-1,0,0):TNT, (1,0,0):TNT, (0,-1,0):TNT, (0,1,0):TNT, (0,0,1):TNT, (0,0,-1):TNT } diff --git a/python2-scripts/mcpipy/header.py b/python2-scripts/mcpipy/header.py deleted file mode 100755 index 3a5643a..0000000 --- a/python2-scripts/mcpipy/header.py +++ /dev/null @@ -1,9 +0,0 @@ -import mcpi.minecraft as minecraft -import server -import time -from math import * -from mcpi.block import * - -mc = minecraft.Minecraft.create(server.address) -playerPos = mc.player.getPos() -playerId = mc.getPlayerId() diff --git a/python2-scripts/mcpipy/mcturtle.py b/python2-scripts/mcpipy/mcturtle.py index a7f4162..949e43e 100755 --- a/python2-scripts/mcpipy/mcturtle.py +++ b/python2-scripts/mcpipy/mcturtle.py @@ -23,7 +23,7 @@ def __init__(self,mc=None): self.mc = mc else: self.mc = minecraft.Minecraft() - self.block = BEDROCK + self.block = GOLD_BLOCK self.width = 1 self.pen = True self.directionIn() @@ -31,10 +31,20 @@ def __init__(self,mc=None): self.delayTime = 0.05 self.nib = [(0,0,0)] self.turtleType = PLAYER - self.playerId = self.mc.getPlayerId() - self.turtleId = self.playerId + self.turtleId = None self.fan = None self.stack = [] + self.setEntityCommands() + + def setEntityCommands(self): + if self.turtleId == None: + self.setPos = self.mc.player.setPos + self.setPitch = self.mc.player.setPitch + self.setRotation = self.mc.player.setRotation + else: + self.setPos = lambda *pos: self.mc.entity.setPos(self.turtleId,*pos) + self.setPitch = lambda angle: self.mc.entity.setPitch(self.turtleId,angle) + self.setRotation = lambda angle: self.mc.entity.setRotation(self.turtleId,angle) def save(self): dict = {} @@ -67,11 +77,12 @@ def turtle(self,turtleType): self.mc.removeEntity(self.turtleId) self.turtleType = turtleType if turtleType == PLAYER: - self.turtleId = self.playerId + self.turtleId = None elif turtleType: self.turtleId = self.mc.spawnEntity(turtleType, self.position.x,self.position.y,self.position.z, "{NoAI:1}") + self.setEntityCommands() self.positionOut() self.directionOut() @@ -157,7 +168,7 @@ def positionIn(self): def positionOut(self): if self.turtleType: - self.mc.entity.setPos(self.turtleId,self.position) + self.setPos(self.position) def delay(self): if self.delayTime > 0: @@ -276,10 +287,10 @@ def directionOut(self): heading = self.getHeading() xz = sqrt(heading[0]*heading[0] + heading[2]*heading[2]) pitch = atan2(-heading[1], xz) * Turtle.TO_DEGREES - self.mc.entity.setPitch(self.turtleId,pitch) + self.setPitch(pitch) if xz >= 1e-9: rotation = atan2(-heading[0], heading[2]) * Turtle.TO_DEGREES - self.mc.entity.setRotation(self.turtleId,rotation) + self.setRotation(rotation) def pendelay(self, t): """Set pen delay in seconds (t: float)""" diff --git a/python2-scripts/mcpipy/turtleconsole.py b/python2-scripts/mcpipy/turtleconsole.py index 762ce74..a5b2b32 100755 --- a/python2-scripts/mcpipy/turtleconsole.py +++ b/python2-scripts/mcpipy/turtleconsole.py @@ -1,6 +1,10 @@ # # Code under the MIT license by Alexander Pruss # +# +# Requires Raspberry Jam +# + import mcpi.minecraft as minecraft import time diff --git a/python2-scripts/mcpipy/vehicle.py b/python2-scripts/mcpipy/vehicle.py index 21def76..c68d871 100755 --- a/python2-scripts/mcpipy/vehicle.py +++ b/python2-scripts/mcpipy/vehicle.py @@ -313,7 +313,6 @@ def moveTo(self,x,y,z,angleDegrees=0): playerGetTilePos = lambda: minecraft.entity.getTilePos(player) playerGetRotation = lambda: minecraft.entity.getRotation(player) except: - player = minecraft.getPlayerId() playerGetTilePos = minecraft.player.getTilePos playerGetRotation = minecraft.player.getRotation diff --git a/python3-scripts.zip b/python3-scripts.zip index 0daa1c65fbd64573fdda9bfd402d8e865703bad7..0ba862271cf3d66dc5dbef47821baca00da1093d 100644 GIT binary patch delta 20307 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 delta 19811 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 diff --git a/python3-scripts/mcpipy/bridge.py b/python3-scripts/mcpipy/bridge.py index f14db7e..56d3313 100755 --- a/python3-scripts/mcpipy/bridge.py +++ b/python3-scripts/mcpipy/bridge.py @@ -9,16 +9,16 @@ mc = Minecraft() -playerId = mc.getPlayerId() try: playerId = int(os.environ['MINECRAFT_PLAYER_ID']) + getTilePos = lambda: mc.entity.getTilePos(playerId) except: - pass + getTilePos = mc.player.getTilePos bridge = [] while True: - pos = mc.entity.getTilePos(playerId) + pos = getTilePos() pos.y = pos.y - 1 belowBlock = mc.getBlock(pos) if belowBlock == AIR.id or belowBlock == WATER_FLOWING.id or belowBlock == WATER_STATIONARY.id: diff --git a/python3-scripts/mcpipy/console.py b/python3-scripts/mcpipy/console.py index c26ae8a..58f71fd 100755 --- a/python3-scripts/mcpipy/console.py +++ b/python3-scripts/mcpipy/console.py @@ -1,6 +1,8 @@ # # Code under the MIT license by Alexander Pruss # +# This script only works on Raspberry Jam +# import mcpi.minecraft as minecraft import time @@ -9,6 +11,7 @@ import code import sys + def quit(): sys.exit() diff --git a/python3-scripts/mcpipy/forcefield.py b/python3-scripts/mcpipy/forcefield.py deleted file mode 100755 index 5b48f59..0000000 --- a/python3-scripts/mcpipy/forcefield.py +++ /dev/null @@ -1,76 +0,0 @@ -from mc import * -import os -import time - -RADIUS = 5 -THICKNESS = 2 - -def setBlock(pos, block): - if not pos in records or records[pos] != block: - records[pos] = block - mc.setBlock(pos, block) - -def sphere(dictionary,x0,y0,z0,R,thickness,block): - R2 = R*R - r = R-thickness - r2 = r*r - for x in range(-R,R+1): - for y in range(-R,R+1): - for z in range(-R,R+1): - dist2 = x*x+y*y+z*z - if dist2 <= r2: - dictionary[(x0+x,y0+y,z0+z)] = AIR - elif dist2 <= R2: - dictionary[(x0+x,y0+y,z0+z)] = block - -def platform(dictionary,x0,y0,z0,block): - dictionary[(x0,y0-1,z0)] = block - -def draw(dictionary): - for pos in dictionary: - setBlock(pos,dictionary[pos]) - -def light(x,y,z): - setBlock((x,y-1,z+1),Block(TORCH.id, 3)) - setBlock((x,y-1,z-1),Block(TORCH.id, 4)) - setBlock((x-1,y-1,z),Block(TORCH.id, 2)) - setBlock((x+1,y-1,z),Block(TORCH.id, 1)) - -def unlight(x,y,z): - setBlock((x,y-1,z+1),AIR) - setBlock((x,y-1,z-1),AIR) - setBlock((x-1,y-1,z),AIR) - setBlock((x+1,y-1,z),AIR) - - -mc = Minecraft() -records = {} - -try: - player = int( os.environ['MINECRAFT_PLAYER_ID'] ) -except: - player = mc.getPlayerId() - -prev = None -current = {} -while True: - pos = mc.entity.getTilePos(player) - if prev is None or prev != pos: - dictionary = {} - - if not prev is None: - unlight(prev.x,prev.y,prev.z) - sphere(dictionary, prev.x, prev.y, prev.z, RADIUS, THICKNESS, AIR) - platform(dictionary, prev.x, prev.y, prev.z, AIR) - - # or 166 for barrier - sphere(dictionary, pos.x, pos.y, pos.z, RADIUS, THICKNESS, GLASS) - platform(dictionary, pos.x, pos.y, pos.z, 1) - draw(dictionary) - if len(records) > 100000: - records = {} - - light(pos.x, pos.y, pos.z) - - prev = pos - time.sleep(0.1) diff --git a/python3-scripts/mcpipy/grenade.py b/python3-scripts/mcpipy/grenade.py index 6f08077..2504d5a 100755 --- a/python3-scripts/mcpipy/grenade.py +++ b/python3-scripts/mcpipy/grenade.py @@ -81,12 +81,17 @@ def getXYZ(path, t1): try: player = int(os.environ['MINECRAFT_PLAYER_ID']) + getPos = lambda: mc.entity.getPos(player) + getRotation = lambda: mc.entity.getRotation(player) + getPitch = lambda: mc.entity.getPitch(player) except: - player = mc.getPlayerId() + getPos = mc.player.getPos + getRotation = mc.player.getRotation + getPitch = mc.player.getPitch -center = mc.entity.getPos(player) -azi = mc.entity.getRotation(player) * pi/180. -alt = -mc.entity.getPitch(player) * pi/180. +center = getPos() +azi = getRotation() * pi/180. +alt = -getPitch() * pi/180. GRENADE = { (-1,0,0):TNT, (1,0,0):TNT, (0,-1,0):TNT, (0,1,0):TNT, (0,0,1):TNT, (0,0,-1):TNT } diff --git a/python3-scripts/mcpipy/header.py b/python3-scripts/mcpipy/header.py deleted file mode 100755 index 3a5643a..0000000 --- a/python3-scripts/mcpipy/header.py +++ /dev/null @@ -1,9 +0,0 @@ -import mcpi.minecraft as minecraft -import server -import time -from math import * -from mcpi.block import * - -mc = minecraft.Minecraft.create(server.address) -playerPos = mc.player.getPos() -playerId = mc.getPlayerId() diff --git a/python3-scripts/mcpipy/mandelbulb.py b/python3-scripts/mcpipy/mandelbulb.py index 190cac3..faf46f7 100755 --- a/python3-scripts/mcpipy/mandelbulb.py +++ b/python3-scripts/mcpipy/mandelbulb.py @@ -11,6 +11,11 @@ import cmath import time import sys +from random import uniform + +# setting this to 0 makes for more isolated blocks because the connecting filigree was +# missed; increasing slows down rendering +AVOID_ISOLATES = 12 if not settings.isPE else 0 ESCAPE = 250 if len(sys.argv) < 2: @@ -35,7 +40,14 @@ palette = list(reversed([WOOL_WHITE,HARDENED_CLAY_STAINED_WHITE,WOOL_PINK,WOOL_LIGHT_GRAY,WOOL_LIGHT_BLUE,WOOL_MAGENTA,WOOL_PURPLE,HARDENED_CLAY_STAINED_LIGHT_BLUE,HARDENED_CLAY_STAINED_LIGHT_GRAY,HARDENED_CLAY_STAINED_MAGENTA,HARDENED_CLAY_STAINED_PINK,HARDENED_CLAY_STAINED_RED,WOOL_RED,REDSTONE_BLOCK,HARDENED_CLAY_STAINED_ORANGE,WOOL_ORANGE,HARDENED_CLAY_STAINED_YELLOW,WOOL_YELLOW,WOOL_LIME,HARDENED_CLAY_STAINED_LIME,HARDENED_CLAY_STAINED_PURPLE,HARDENED_CLAY_STAINED_CYAN,WOOL_CYAN,WOOL_BLUE,HARDENED_CLAY_STAINED_BLUE,WOOL_GRAY,HARDENED_CLAY_STAINED_GREEN,WOOL_GREEN,HARDENED_CLAY_STAINED_BROWN,WOOL_BROWN,HARDENED_CLAY_STAINED_GRAY,WOOL_BLACK])); -def calculate(pos): +def positions(pos,scale): + yield pos + for i in range(AVOID_ISOLATES): + yield (uniform(pos[0]-0.5*scale,pos[0]+0.5*scale), + uniform(pos[1]-0.5*scale,pos[1]+0.5*scale), + uniform(pos[2]-0.5*scale,pos[2]+0.5*scale)) + +def calculate0(pos): x,z,y = pos[0],pos[1],pos[2] cx,cy,cz = x,y,z @@ -63,6 +75,13 @@ def calculate(pos): except: return 0 +def calculate(pos0,scale): + for pos in positions(pos0,scale): + r = calculate0(pos) + if r >= 0: + return r + return r + # # we could of course just do for x in range(0,size): for y in range(0,size): yield(x,y) # but it will make users happier if we start at the player @@ -107,7 +126,7 @@ def draw(): for mcX in rangeX: for mcY in rangeY: for mcZ in rangeZ: - radius = calculate(toBulb(centerMC,centerBulb,scale,mcX,mcY,mcZ)) + radius = calculate(toBulb(centerMC,centerBulb,scale,mcX,mcY,mcZ),scale) if radius < 0: mc.setBlock(mcX,mcY,mcZ,AIR) else: diff --git a/python3-scripts/mcpipy/mcpipy.sln b/python3-scripts/mcpipy/mcpipy.sln index 1125ae6..ce55750 100755 --- a/python3-scripts/mcpipy/mcpipy.sln +++ b/python3-scripts/mcpipy/mcpipy.sln @@ -1,10 +1,12 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 +# Visual Studio Express 2013 for Windows Desktop VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "mcpipy", "mcpipy.pyproj", "{AD0B690C-A698-4CE0-9B50-3069E7E8660D}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7CD6D1CE-4B00-4E16-94F0-FB3BF4F0D6F8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/python3-scripts/mcpipy/mcturtle.py b/python3-scripts/mcpipy/mcturtle.py index a7f4162..949e43e 100755 --- a/python3-scripts/mcpipy/mcturtle.py +++ b/python3-scripts/mcpipy/mcturtle.py @@ -23,7 +23,7 @@ def __init__(self,mc=None): self.mc = mc else: self.mc = minecraft.Minecraft() - self.block = BEDROCK + self.block = GOLD_BLOCK self.width = 1 self.pen = True self.directionIn() @@ -31,10 +31,20 @@ def __init__(self,mc=None): self.delayTime = 0.05 self.nib = [(0,0,0)] self.turtleType = PLAYER - self.playerId = self.mc.getPlayerId() - self.turtleId = self.playerId + self.turtleId = None self.fan = None self.stack = [] + self.setEntityCommands() + + def setEntityCommands(self): + if self.turtleId == None: + self.setPos = self.mc.player.setPos + self.setPitch = self.mc.player.setPitch + self.setRotation = self.mc.player.setRotation + else: + self.setPos = lambda *pos: self.mc.entity.setPos(self.turtleId,*pos) + self.setPitch = lambda angle: self.mc.entity.setPitch(self.turtleId,angle) + self.setRotation = lambda angle: self.mc.entity.setRotation(self.turtleId,angle) def save(self): dict = {} @@ -67,11 +77,12 @@ def turtle(self,turtleType): self.mc.removeEntity(self.turtleId) self.turtleType = turtleType if turtleType == PLAYER: - self.turtleId = self.playerId + self.turtleId = None elif turtleType: self.turtleId = self.mc.spawnEntity(turtleType, self.position.x,self.position.y,self.position.z, "{NoAI:1}") + self.setEntityCommands() self.positionOut() self.directionOut() @@ -157,7 +168,7 @@ def positionIn(self): def positionOut(self): if self.turtleType: - self.mc.entity.setPos(self.turtleId,self.position) + self.setPos(self.position) def delay(self): if self.delayTime > 0: @@ -276,10 +287,10 @@ def directionOut(self): heading = self.getHeading() xz = sqrt(heading[0]*heading[0] + heading[2]*heading[2]) pitch = atan2(-heading[1], xz) * Turtle.TO_DEGREES - self.mc.entity.setPitch(self.turtleId,pitch) + self.setPitch(pitch) if xz >= 1e-9: rotation = atan2(-heading[0], heading[2]) * Turtle.TO_DEGREES - self.mc.entity.setRotation(self.turtleId,rotation) + self.setRotation(rotation) def pendelay(self, t): """Set pen delay in seconds (t: float)""" diff --git a/python3-scripts/mcpipy/mengersponge.py b/python3-scripts/mcpipy/mengersponge.py index 4ff23c0..b0386d4 100755 --- a/python3-scripts/mcpipy/mengersponge.py +++ b/python3-scripts/mcpipy/mengersponge.py @@ -3,6 +3,7 @@ # from mc import * import mcpi.settings as settings +import sys def deleteCubes(x0,y0,z0,length): length /= 3 @@ -20,6 +21,13 @@ def deleteCubes(x0,y0,z0,length): else: deleteCubes(posX,posY,posZ,length) +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: @@ -29,3 +37,6 @@ def deleteCubes(x0,y0,z0,length): 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) +if len(sys.argv)>1 and sys.argv[1][0] == 's': + mc.postToChat("Slicing") + slice(playerPos.x,playerPos.y,playerPos.z,length) diff --git a/python3-scripts/mcpipy/turtleconsole.py b/python3-scripts/mcpipy/turtleconsole.py index 6852f99..519b911 100755 --- a/python3-scripts/mcpipy/turtleconsole.py +++ b/python3-scripts/mcpipy/turtleconsole.py @@ -1,6 +1,10 @@ # # Code under the MIT license by Alexander Pruss # +# +# Requires Raspberry Jam +# + import mcpi.minecraft as minecraft import time diff --git a/python3-scripts/mcpipy/vehicle.py b/python3-scripts/mcpipy/vehicle.py index 21def76..c68d871 100644 --- a/python3-scripts/mcpipy/vehicle.py +++ b/python3-scripts/mcpipy/vehicle.py @@ -313,7 +313,6 @@ def moveTo(self,x,y,z,angleDegrees=0): playerGetTilePos = lambda: minecraft.entity.getTilePos(player) playerGetRotation = lambda: minecraft.entity.getRotation(player) except: - player = minecraft.getPlayerId() playerGetTilePos = minecraft.player.getTilePos playerGetRotation = minecraft.player.getRotation diff --git a/src/main/java/mobi/omegacentauri/raspberryjammod/APIHandler.java b/src/main/java/mobi/omegacentauri/raspberryjammod/APIHandler.java index e64f09d..df530b8 100755 --- a/src/main/java/mobi/omegacentauri/raspberryjammod/APIHandler.java +++ b/src/main/java/mobi/omegacentauri/raspberryjammod/APIHandler.java @@ -275,6 +275,7 @@ else if (cmd.equals(WORLDGETPLAYERID)) { fail("Unknown player"); } else { + // unofficial API to get current player ID sendLine(clientPlayer.getEntityId()); } }