# ==== STARTER: INICJALIZACJA I FUNKCJA TOR ==== # Pobieramy współrzędne gracza na starcie programu # x, y, z będą używane w CAŁYM projekcie # Będziemy tylko aktualizować "z" gracza przy każdym kolejnym etapie pozycja = player.position() x = pozycja.get_value(Axis.X) y = pozycja.get_value(Axis.Y) z = pozycja.get_value(Axis.Z) # Funkcja przygotowująca pierwszy pusty segment toru def tor(): # Tworzymy bryłę ze skały macierzystej — ściany, sufit i podłoga toru # HOLLOW = pusta w środku — gracz może chodzić wewnątrz blocks.fill(BEDROCK, world(x-10, y-1, z-2), world(x+10, y+10, z+35), FillOperation.HOLLOW) # Pierwsza linia aktywacyjna — latarnie morskie, które gracz musi zniszczyć # Zniszczenie tej linii wczyta etap 1 blocks.fill(SEA_LANTERN, world(x-9, y-1, z+3), world(x+9, y-1, z+5)) # Teleport gracza do pozycji startowej i czyszczenie ekwipunku player.teleport(world(x, y, z)) player.execute("/clear") player.on_chat("start", tor) def etap1(z): player.say("ETAP 1") # Dobudowujemy nowy segment toru od aktualnej pozycji gracza blocks.fill(BEDROCK, world(x-10, y-1, z-2), world(x+10, y+10, z+35), FillOperation.HOLLOW) # Linia z gąbki - zniszczenie jej załaduje ETAP 2 blocks.fill(SPONGE, world(x-9, y-1, z+25), world(x+9, y-1, z+27)) # Przeszkoda: podłoga z krat żelaznych - gracz wpada "między" kraty blocks.fill(IRON_BARS, world(x-9, y-1, z+3), world(x+9, y-1, z+20)) # (Pod kratami można dodać lawę przez y-1, ale może obciążyć słabsze komputery!) # blocks.fill(LAVA, world(x-9, y-2, z+3), world(x+9, y-2, z+20)) # Czekamy aż gracz wejdzie na kraty while True: if blocks.test_for_block(IRON_BARS, pos(0, -1, 0)): # Gracz na kratach - dajemy broń i spawnujemy creepery! mobs.give(mobs.target(NEAREST_PLAYER), DIAMOND_AXE, 1) for i in range(6): mobs.spawn(CREEPER, randpos(world(x-8, y+1, z+3), world(x+8, y+1, z+20))) break # wychodzimy z pętli # Szablon ładowania etapu (ten wzorzec powielamy dla każdego etapu!) def zniszczenie_bloku_e1(): # Pobieramy aktualną pozycję Z gracza - etap buduje się ZA nim pozycja = player.position() z = pozycja.get_value(Axis.Z) # aktualizujemy tylko Z! etap1(z) # wywołujemy funkcję etapu z nowym Z # SEA_LANTERN to blok linii aktywacyjnej z funkcji tor() blocks.on_block_broken(SEA_LANTERN, zniszczenie_bloku_e1)