Minecraft + python3

A “játékipar” számomra igen kevés csábító opciót nyújt, azonban szerencsére vannak kivételek, mint például a Minecraft. Ha megúntuk a favágást, kőbányászást, kézzel építkezést és a barlangban rettegést (survival mód) – szóval valami többre vágyunk, akkor ott a kreatív mód – amit azonban a programozói vénával megáldott “építész” igen hamar vékonykának fog találni.

Sokféle építkezést segítő mod(?) van, azonban gyors átfutás egyik sem tűnt úgy, amely komolyabb programozást lehetővé tenne, inkább a kézi építést szeretnék meggyorsítani. Találtam azonban egy igen szimpatikus lehetőséget: némi hályogkovácsolás – sajnos nincs még natív API támogatás – árán pythonban is programozhatunk!

Kedvcsinálónak nézzünk egy kódrészletet:

def draw_donut(mcx,mcy,mcz,R,r,mcblock):
  for x in range(-R-r,R+r):
     for y in range(-R-r,R+r):
        xy_dist = sqrt(x**2 + y**2)
        if (xy_dist > 0):
           ringx = x / xy_dist * R # nearest point on major ring
           ringy = y / xy_dist * R
           ring_dist_sq = (x-ringx)**2 + (y-ringy)**2
           for z in range(-R-r,R+r):
               if (ring_dist_sq + z**2 <= r**2):
                  mc.setBlock(mcx+x, mcy+z, mcz+y, mcblock)

Látszik, hogy egészen jól fogunk szórakozni. Mindehhez a remek leírást itt találjuk. A poszt írása idején a legfrissebb RaspberryJamMod az 1.12.2 verziójú Minecraftot támogatja, de a Minecraft az 1.14-nél jár (a Raspberry kifejezés ne tévesszen meg senkit, ez csak valamiféle workaround ahhoz, hogy elérjük az API-t, de nem lesz szükségünk extra hardverre) . Szerencsére a Launcherben ezt könnyen hozzáadhatjuk az installációk közé, viszont Forge-ból is ezt kell használnunk (abból van ugyan frissebb, de nyilván nem sokra megyünk vele).

Tehát lényegében a fent hivatkozott leírás alapján az egyszerűsített, aktualizált lépések:

  1. Installáljuk a Minecraftot, majd a Launcherben adjuk hozzá az 1.12.2 verziót
  2. Telepítsük fel a Python3-at.
  3. Telepítsük a Forge 12.2.2 verzióját.
  4. Telepítsük a RaspberryJamMod legfrissebb verzióját.
  5. Amikor indítjuk a játékot, a Launcherben a Forge 1.12.2 profilt válasszuk.
  6. Csináljunk egy 'Superflat' világot.
  7. Nyomjuk meg a 't'-t, hogy kapjunk egy konzolt, majd /py donut.
  8. Enjoy!

Valószínűleg léteznek ettől sokkal szebb/jobb építgető módszerek, de az, hogy ezzel Pythonban lehet programozni, nagyon nagy előny. Néhány kép még kedvcsinálónak:

További szkripteket az AppData\Roaming.minecraft\mcpipy mappa alatt találunk, és ide helyezhetjük el a sajátjainkat is.

A fenti link kb 1/3-ától egy jó áttekintést is kaphatunk a fejlesztés mikéntjéről, néhány buktatóra viszont felhívnám a figyelmet:

  • A setBlock-nak van egy setBlocks 'párja', mielőtt nekiállunk mindent ész nélkül for ciklussal megoldani, ez egyszerűstheti a kódunkat
  • A block.* property-k Block típusúsak. Ha a blokk id-jára vagyunk kíváncsiak, akkor block.WOOD_PLANKS.id formában kaphatjuk meg. Ennek ott van jelentősége, hogy a setBlock(s) máshogy működik, ha block id-t, vagy ha teljes blokkot kap. Például a lépcső írányát és egyéb sub-type-okat a Block objektum .data tulajdonságában kell beállítanunk. Ha id-ként adjuk át, akkor ezt további paraméterként adhatjuk meg a setBlock(s)-nak, ha kész Block objektumot adunk, akkor viszont nekünk kell beállítani, még az átadás előtt.