IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 6 - Programování v Minecraftu - Příkaz /gamerule

V minulém díle seriálu o programování v Minecraftu jsme si představili příkazy pro manipulaci se světem. Dnes toto téma zakončíme příkazem /gamerule, který rozebereme podrobně.

Příkaz /gamerule

Tento příkaz již podle názvu mění "pravidla hry" a to interně, v každém světě samostatně, podobně jako /difficulty. Tato pravidla mění standardní chování hry (resp. když jsou pravidla ve své výchozí podobě, hra se chová normálně). Kompletní tabulku najdete na minecraft wiki (http://minecraft.gamepedia.com/Commands#…), já je zde rozeberu poněkud podrobněji.

Nejprve syntaxe příkazu:

/gamerule <pravidlo> [hodnota]

Jak můžete vidět, každé pravidlo má svou hodnotu - pokud ji v příkazu neuvedete, příkaz hodnotu sdělí, jinak ji přenastaví. Tato hodnota je většinou typu "boolean", čili pravda nebo nepravda - zadáte "true" nebo "false" (bez uvozovek). Někdy je také hodnota číselná, kdy zadáte příslušné číslo. Seznam níže obsahuje pravidla s vysvětlením funkčnosti a mým komentářem k používání. V seznamu záměrně vynechávám pravidla pro změnu chování serverů (multiplayerová pravidla), tím se nebudeme zbytečně zatěžovat, protože pouze mění některé funkce serverů, a dále také specializovaná pravidla, o kterých si řekneme dále v tutoriálu.

Seznam pravidel

  • announceAdvan­cements - nastavuje, zda má být do chatu oznámeno, když hráč získá nějaký advancement (minecraftový achievmentový systém, povíme si o něm v jiné lekci). Výchozí hodnota je true.
  • commandBlockOu­tput - nastavuje, zda mají command bloky psát do chatu zprávu o úspěšném provedení příkazu (např. [@: Found Krepsy3] po nalezení přes /testfor). Výchozí hodnota je true, nastavuji ji na false na creative světech a v mapách.
  • doDaylightCycle - nastavuje, zda má slunce obíhat po obloze, tedy i plynutí času. Výchozí hodnota je true, na creative světech nastavuji na false v kombinaci s /time set 6000, je pak stále pravé poledne.
  • doEntityDrops, doMobLoot a doTileDrops - všechna tři pravidla nastavují, jestli mají padat itemy (entity - z entit nepříšer, mob - z příšer, tile - z rozbití bloků). Výchozí hodnota je true a kdykoli stavím něco v creative, vždy si dám false, mnohem lépe se udržuje čistota inventáře (jinak stále padají redstone dusty z rozbití bloku pod nimi apod.)
  • doFireTick - nastavuje, zdali se má šířit oheň po pálitelných blocích, jako je dřevo či uhlí. Výchozí hodnota je true, na false nastavuji např. pokud mám ohniště u dřevěného baráku (v creative).
  • doLimitedCrafting - určuje, zdali může hráč craftit recepty, které ještě neobjevil. Objevování receptů probíhá postupně, jak hráč hraje, např. recept na loď objeví, když se dostatečně přiblíží k vodě. Je-li nastaveno na true, hráč nemůže loď vycraftit dříve, než se tak stane. Výchozí hodnota je false.
  • doMobSpawning - určuje, zdali má probíhat spawnování zvířat (na trávě) a příšer (ve tmě), výchozí hodnota je true. Na creative světech a mapách nastavuji vždy na false, přítomny tedy budou pouze entity, které si připravím sám.
  • doWeatherCycle - obdobně jako u DaylightCycle, nastavuje, zdali má docházet ke střídání počasí v závislosti na čase. Na creative nastavuji vždy na false, ten déšť je vážně otravný. Obráceně, pokud chcete, aby pršelo neustále, také se vám pravidlo bude hodit.
  • keepInventory - nastavuje, zdali mají po smrti hráčům zůstat itemy v inventáři. Výchozí hodnota je false, čili při smrti itemy vypadnou z hráče kolem místa úmrtí. V mapách a na creative doporučuji vždy přenastavovat na true.
  • maxEntityCramming - další pravidlo s číselnou hodnotou. Nastavuje, do kolika dalších entit může entita naráz strkat, než začne dostávat poškození (postupně zemře). Toto pravidlo přidali mimo jiné v souvislosti s tím, že hráči vytvářeli farmy, kde například v rámci jednoho bloku uchovávali třeba sto slepic, aby snášely vejce do hopperů. Výchozí hodnota je 24, nastavením na 0 pravidlo deaktivujete. Můžete to vyzkoušet, vezměte si spawn vajíčko, postavte vertikální tunel 1x1 a naspawnujte do něj větší množství třeba krav, postupně začnou umírat, protože se "umačkají".
  • mobGriefing - určuje, zdali mohou mobové (živočišné entity) poničit svět (např. Creeper výbuchem či Enderman ukradením bloku). Netýká se tedy TNT a podobných. Výchozí hodnota je true, nastavuji na false zejména na mapách.
  • naturalRegene­ration - určuje, zdali se má hráčovi samo obnovovat zdraví, pokud je dostatečně najedený (má alespoň 9/10 zaplněných indikátorů zdraví). Běžně je nastaven na true, pokud děláte nějakou soubojovou či přežívací mapu, přepněte klidně na false. Jen pak musíte zdraví doplňovat přes lektvary či efekty (viz. díl o příkazu /effect).
  • randomTickSpeed - pravidlo nastavuje rychlost náhodných událostí. Událostmi myslím úplně vše, co se ve hře děje v nějakém náhodném časovém intervalu, tzn. např. růst zasázených rostlin a stromů, růst mláďat zvířat v dospělce, šíření trávy na hlínu, opadávání listí... Tyto události, jak asi tušíte, mají běžně docela dlouhý průběh, který se časově počítá v ticks. Rychlost průběhu těchto událostí můžete zvýšit zvýšením hodnoty pravidla (je číselná), výchozí hodnota je 3. Nastavením na nulu tyto události vypnete.
  • reducedDebugInfo - nastavuje, zda se mají na debug screenu zobrazovat pouze určité informace, s hodnotou true zmizí např. všechny informace o souřadnicích, takže např. pokud v rámci mapy hráče teleportujete, nebude moci zjistit souřadnice.
  • sendCommandFe­edback - nastavuje, zda mají příkazy, které umí vracet textový výstup (zprávu – jako např. /testfor), tento vytvářet. Hodí se, pokud příkazy souvisí s hráčem, a nechcete, aby se jim zobrazilo např. že jim byl změněn gamemode, což je bohužel neovlivnitelné pravidlem commandBlockOutput.
  • showDeathMessages - nastavuje, zda se má po smrti hráče objevovat v chatu zpráva o jeho smrti a způsobu zabití. Ve výchozím nastavení je samozřejmě true, a vypnout se hodí třeba pokud ve vaší mapě má hráč cíleně zemřít a nechcete aby se o tom zbytečně objevila zpráva v chatu.
  • spawnRadius - třetí pravidlo, které má číselnou hodnotu. Minule jsem vám záměrně neřekl, že worldspawn, nastavovaný pomocí /setworldspawn, není přímo definitivní místo, kde se hráči objeví, ale to místo může být kdekoliv ve čtverci 21x21 bloků, kdy prostředek čtverce je právě worldspawn (tedy s "poloměrem" - radiusem 10 bloků). V multiplayeru je to jen 11x11 bloků, tedy je poloměr pouhých 5 bloků. Tímto pravidlem můžete velikost prostoru pro spawn nastavit, 0 znamená, že to bude vždy na bloku označeném jako worldspawn, výchozí hodnota je 10. Slouží to zejména pro účel rozprostření hráčů po vyspawnování na multiplayerových světech.
  • spectatorsGene­rateChunks - nastavuje, zdali hráči s gamemode spectator ("pozorovatel" - speciální gamemode, kde nemůžete nic dělat, ale můžete létat i skrz bloky a dívat se hráčům do inventářů) mohou generovat nové chunky. Jak již víte, chunky se zapínají a vypínají podle toho, zdali je v nich hráč či ne. To, zdali je přítomen, udává nastavení "Render distance" (vykreslovací vzdálenost), kdy jsou načteny všechny chunky, do kterých je hráč schopen dohlédnout - vzdálenost se nastavuje právě počtem chunků. Pokud ale nebyl ještě chunk vygenerován a najednou ho někdo načte, vygeneruje se a uloží do souborů se světem. Toto pravidlo, s výchozí hodnotou true, umí vypnout toto generování, pokud by ho spustil hráč v režimu pozorovatele; šetří to velikost složky se světem. Hodí se to např. pokud je v multiplayerové mapě hráč po smrti přepnut do tohoto módu, a mohl by tak způsobit nechtěnou generaci terénu

Nastavení nového světa

Pokud jste právě založili nový creative svět nebo se chystáte vytvořit mapu, je dobré si před začátkem stavění aplikovat přenastavení pro některá pravidla, aby se vám lépe žilo. Já vždycky nastavuji následující:

/gamerule commandBlockOutput false
/gamerule doDaylightCycle false -> /time set 6000
/gamerule doWeatherCycle false -> /weather clear
/gamerule doMobSpawning false
/gamerule doEntityDrops false
/gamerule doTileDrops false
/gamerule doMobLoot false
/gamerule mobGriefing false
/gamerule keepInventory true
/gamerule randomTickSpeed 2000
/gamerule sendCommandFeedback false

Někdy, pokud testuji nějaký komplexnější systém, si zapnu commandBlockOutput a sendCommandFe­edback, abych lépe viděl, co se děje. Toto mé nastavení vám doporučuji odzkoušet a rozhodnout si, která pravidla se vám hodí či ne. Samozřejmě si je v chatu projíždějte pomocí mačkání klávesy Tab, ať se s nimi nemusíte psát a ať je vidíte všechna.

Procvičení

Na konec dnešního tutoriálu ještě zadám malé procvičení. Otestujte funkčnost všech dnes naučených pravidel příkazu /gamerule. Příklady řešte za pomoci command bloků, které navážete tlačítky tak, aby demonstrovaly funkčnost pravidla. Odpouštím vám announceAdvan­cements, doEntityDrops, doFireTick, doLimitedCrafting, doMobLoot, doTileDrops, maxEntityCramming, mobGriefing, naturalRegene­ration, randomTickSpeed a spectatorsGene­rateChunks, protože na jejich plně automatický důkaz zatím nemáte potřebné znalosti. Ještě dám příklad. Pravidlo commandBlockOutput otestujete pomocí příkazu /testfor. Provedete tedy tyto příkazy:

I. - část pro standardní chování

/commandBlockOutput true //nastavíme pravidlo na hodnotu true
/testfor @p //v chatu se nyní objeví *[@: Found Krepsy3]* (samozřejmě s vaším jménem)

II. - část pro upravené chování

/commandBlockOutput false //nastavíme pravidlo na hodnotu false
/testfor @p //v chatu se nyní neobjeví nic

Mačkáním tlačítek vždy změníte hodnotu pravidla a po té ji otestujete na stejném příkazu. U některých pravidel bude potřeba ještě resetovací část.

Zapojené command bloky ve dvou větvích pro důkaz pravidla - Programování v Minecraftu

Podobným způsobem otestujte ostatní pravidla, vždy tak, abyste dokázali funkčnost. Řešení najdete na světě ke stažení. Pro tento díl je to vše, příště si probereme řetězení command bloků a zakončíme tak první část našeho putování, dále už nás čekají složitější věci. Máte se na co těšit.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 22x (619.14 kB)
Aplikace je včetně zdrojových kódů v jazyce Minecraft

 

Předchozí článek
Programování v Minecraftu - Příkazy pro manipulaci se světem
Všechny články v sekci
Programování v Minecraftu
Přeskočit článek
(nedoporučujeme)
Programování v Minecraftu - Řetězení Command Bloků
Článek pro vás napsal krepsy3
Avatar
Uživatelské hodnocení:
5 hlasů
Autor se učí programovat zde na itnetworku, zatím zejména jazyk C#. Znalosti chce mít ucelené, proto při vývoji aplikací studuje potřebné funkce do hloubky. Vyzná se v programování ve hrách, jako je Minecraft či Ricochet.
Aktivity