Python coding for Minecraft (11 / 17 steg)
Steg 11: Avancerad anteckningar 1: ritade objekt som definieras av en ojämlikhet
Det finns i princip två olika tekniker för att rita matematiskt definierade objekt med ett python-skript i Minecraft.
Ett sätt är att definiera ett fast föremål genom en ojämlikhet. Exempelvis kan en sfär med radien r centrerad på (x0, y0, z0) definieras av ojämlikheten:
(x-x_0) ** 2 + (y-y0) ** 2 + (z-z0) ** 2 < = r ** 2
(Dvs. avståndet till (x0, y0, z0) är på mest r.) Så för att dra en sfär, bara loopa igenom alla punkter (x, y, z) i en kub med sidan-längd 2 * r + 1 kring (x0, y0, z0), och dra ett block om ovanstående ojämlikheten innehar.
Jag lärde mig denna teknik från nt7s_sphere.py exempelskriptet. Börja med standard sidhuvud och init Minecraft anslutning koden:
från mc import *
MC = Minecraft()
Sedan bara göra:
radie = 8
playerPos = mc.player.getPos()
x i range(radius*-1,radius):
för y i intervall (radie *-1, radie):
för z i range(radius*-1,radius):
om x ** 2 + y ** 2 + z ** 2 < radius ** 2:
mc.setBlock (playerPos.x + x, playerPos.y + y + radie, playerPos.z - z - 10, glas)
Detta drar en sfär av angivna radien ovanför spelaren, och en liten förskjutning i z-riktningen.
Jag använder samma teknik, men med en mer komplicerad formel, i min donut.py skript (Ja, det är mer komplicerat än sköldpaddan-baserade metod):
x i range(-R-r,R+r):
för y i range(-R-r,R+r):
xy_dist = math.sqrt (x ** 2 + y ** 2)
om (xy_dist > 0):
ringx = x / xy_dist * R # närmaste punkt på stora ringen
ringy = y / xy_dist * R
ring_dist_sq = (x-ringx) ** 2 + (y-ringy) ** 2
för z i range(-R-r,R+r):
om (ring_dist_sq + z ** 2 < = r ** 2):
mc.setBlock (mcx + x, mcy + z, mcz + y, mcblock, mcmeta)
Medan den ojämlikhet tekniken fungerar bäst för fasta former, kan du använda den för ihåliga former på två sätt. Ett sätt är att använda två ojämlikhet, till exempel när det gäller området att se till att vi inom en yttre radie på mitten och en annan att se till att vi inte är närmare än den inre radien. Det andra sättet är bara att dra ett annat objekt med mindre dimensioner gjort av luft i större fast objektet, mycket som i min donut.py manus, jag först Rita en glas munk, och sedan ersätta insidan av det med vatten.