Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Katedra informačních technologií
Studijní program: Aplikovaná informatika Obor: Informatika
Pro hru Minecraft vytvořte plugin umožňující časování a limitování herních příkazů BAKALÁŘSKÁ PRÁCE
Student: Jakub Kolář Vedoucí: Ing. Rudolf Pecinovský, CSc. Oponent: Mgr. Zbyněk Šlajchrt
2013
Prohlášení Prohlašuji, že jsem bakalářskou práci zpracoval samostatně a že jsem uvedl všechny použité prameny a literaturu, ze které jsem čerpal.
V Praze dne 13. května 2013
................................ Jméno a příjmení studenta
Poděkování: Zde bych rád poděkoval Ing. Rudolfu Pecinovskému, CSc. za vedení této práce. Dále své rodině za podporu a financování mých studií a mé přítelkyni za psychickou podporu. V poslední řadě bych také rád poděkoval Markusi Perssonovi za vytvoření hry Minecraft a také týmu Bukkit za vývoj skvělého serveru a knihovny pro programování pluginů pro tuto hru.
Abstrakt Práce je zaměřena na svět počítačových her a postavení hry Minecraft v tomto světě. Pomocí analýzy jednotlivých možností v této hře samotné a dále také v serverovém softwaru pro tuto určen, se práce snaží nalézt nejčastější problémy, se kterými se uživatelé mohou setkat na straně hráče i na straně správce serveru. K těmto problémům je postupně hledáno řešení. K problému, který nebylo možné vyřešit pomocí analýzy, bylo nutné navrhnout a vytvořit plugin tento problém řešící. Konkrétně se jedná o omezování herních příkazů pomocí poplatků v herní měně a pomocí časování. První část práce obsahuje popis světa počítačových her společně s žánry a druhy těchto her i s příklady. Dále práce popisuje základní vlastnosti a herní mechaniky hry Minecraft. Předposlední část práce obsahuje základní požadavky na vytvářený plugin, který řeší problematiku s herními příkazy. Dále pak návrh tohoto pluginu včetně jeho realizace. Poslední část práce obsahuje uživatelskou dokumentaci vytvořeného pluginu.
Klíčová slova Počítačová hra, žánry počítačových her, Minecraft, plugin, server, Java, objektově orientované programování, hráč, příkaz, závěrečná práce
Abstract Thesis is focused on the world of computer games and status of game Minecraft in this world. By analyzing the different options in the game itself and also in the server software for this game, thesis is trying to find the most common problems that users may encounter. For these problems are gradually finding solutions. For problem that could not be solved by analysis, was necessary to design and create a plugin that solves the problem. Plugin works by limiting in game commands using prices and timings. The first part of thesis contains a description of the world of computer games with genres and types of games and examples. It also describes the basic features and gameplay mechanics of the game Minecraft. The penultimate section contains the basic requirements for plugin that is being created, which addresses the issue with ingame commands. Furthermore, the design of this plugin including its implementation. The last part contains user documentation for created plugin.
Keywords Video game, video game genres, Minecraft, plugin, server, Java, object oriented programing, player, command, thesis
1
ÚVOD...................................................................................................................................................... 1 1.1 1.2 1.3
2
REŠERŠE .................................................................................................................................................. 2 2.1 2.2 2.3 2.4
3
CÍLE PRÁCE ........................................................................................................................................... 1 STRUKTURA PRÁCE ................................................................................................................................. 1 METODY SBĚRU A ANALÝZY DAT ................................................................................................................ 1
GENRE AND THE VIDEO GAME (4) ............................................................................................................. 2 VIDEO GAME GENRE, EVOLUTION AND INNOVATION (5) ............................................................................... 2 WEB MOBBYGAMES (6) ......................................................................................................................... 2 WEB ROVI (7) ....................................................................................................................................... 2
SVĚT POČÍTAČOVÝCH HER A POSTAVENÍ HRY MINECRAFT V NĚM .......................................................... 3 3.1
ROZDĚLENÍ DLE PLATFORMY ..................................................................................................................... 3 3.1.1 Herní konzole ...................................................................................................................... 3 3.1.2
3.2
3.3 4
4.3
3.2.2
Hry na hrdiny (Role‐Playing) ............................................................................................... 4
3.2.3
Simulace (Simulation) ......................................................................................................... 5
3.2.4
Otevřený svět (Open world) ................................................................................................ 5
3.2.5
Pískoviště (Sandbox) ........................................................................................................... 5
POSTAVENÍ HRY MINECRAFT .................................................................................................................... 7
KLIENT ................................................................................................................................................. 8 HERNÍ MECHANIKY ............................................................................................................................... 11 4.2.1 Podstata hry a herní svět .................................................................................................. 11 4.2.2
Nástroje, materiály a výroba ............................................................................................ 13
4.2.3
Redstone ........................................................................................................................... 13
4.2.4
Smrt................................................................................................................................... 13
4.2.5
Monstra a zvířata .............................................................................................................. 14
SERVER .............................................................................................................................................. 14
DEFINICE POŽADAVKŮ NA PLUGIN ELIMINUJÍCÍ PROBLÉM S HERNÍMI PŘÍKAZY ....................................16 5.1 5.2
5.3 6
ROZDĚLENÍ DLE HERNÍCH ŽÁNRŮ ............................................................................................................... 4 3.2.1 Bojové hry (Combat games) ................................................................................................ 4
ZÁKLADNÍ VLASTNOSTI HRY MINECRAFT A TYPICKÉ PROBLÉMY, S NIMIŽ SE HRÁČI SETKÁVAJÍ .............. 8 4.1 4.2
5
Mobilní zařízení ................................................................................................................... 3
POUŽITÉ POJMY ................................................................................................................................... 16 FUNKCE ............................................................................................................................................. 16 5.2.1 Časování příkazů z hlediska warmupů .............................................................................. 16 5.2.2
Časování příkazů z hlediska cooldownů ............................................................................ 17
5.2.3
Nastavení poplatku za příkaz ............................................................................................ 17
5.2.4
Limitovat počet použití příkazu či zablokovat příkaz ........................................................ 17
5.2.5
Možnost vypnutí či zapnutí jakékoli předešlé funkce ........................................................ 17
5.2.6
Možnost nastavení aliasů pro příkazy ............................................................................... 17
5.2.7
Zprávy odesílané hráči musejí být plně lokalizovatelné .................................................... 17
5.2.8
Příkazy samotného pluginu ............................................................................................... 17
OPRÁVNĚNÍ ........................................................................................................................................ 18
NÁVRH APLIKACE ...................................................................................................................................19 6.1
PŘÍPADY UŽITÍ ..................................................................................................................................... 19 6.1.1 Aktéři................................................................................................................................. 19 6.1.2
Případy užití z hlediska hráče ............................................................................................ 19
6.1.3 6.2
6.2.2 7
Případy užití z hlediska administrátora ............................................................................. 21
AKTIVITY ............................................................................................................................................ 24 6.2.1 Proces Použití příkazu hráčem/administrátorem .............................................................. 24 Proces editace konfigurace pomocí příkazu ...................................................................... 25
ANALÝZA A NÁVRH ŘEŠENÍ ....................................................................................................................26 7.1 7.2
JAVA.................................................................................................................................................. 26 BUKKIT .............................................................................................................................................. 26 7.2.1 Oprávnění ......................................................................................................................... 27
7.3 7.4 7.5
VAULT ............................................................................................................................................... 27 ARCHITEKTURA A TVORBA PLUGINU ......................................................................................................... 27 DIAGRAMY TŘÍD................................................................................................................................... 28 7.5.1 Stručný diagram hlavních tříd a propojení s knihovnami Bukkit a Vault .......................... 28 7.5.2
Stručný diagram tříd poskytujících metody hlavních funkcí pluginu a jejich propojení
s hlavními třídami ........................................................................................................................................ 28 7.5.3 7.6
POPIS JEDNOTLIVÝCH TŘÍD ..................................................................................................................... 30 7.6.1 Třídy hlavního balíčku ....................................................................................................... 30 7.6.2
8
Posluchači ......................................................................................................................... 31
UŽIVATELSKÁ DOKUMENTACE ...............................................................................................................33 8.1 8.2
8.3
9
Stručný diagram tříd posluchačů ...................................................................................... 29
INSTALACE PLUGINU ............................................................................................................................. 33 DEFAULTNÍ KONFIGURAČNÍ SOUBOR PLUGINU ............................................................................................ 33 8.2.1 Základní nastavení ............................................................................................................ 33 8.2.2
Nastavení časových jednotek ............................................................................................ 34
8.2.3
Nastavení zpráv odesílaných hráčům ............................................................................... 35
8.2.4
Hlavní nastavení................................................................................................................ 36
8.2.5
Nastavení spojených cooldownů ....................................................................................... 34
8.2.6
Nastavení aliasů ................................................................................................................ 34
8.2.7
Příkazy k ovládání pluginu ................................................................................................ 35
8.2.8
Použitelná oprávnění ........................................................................................................ 37
UŽIVATELSKÉ ROZHRANÍ ........................................................................................................................ 40 8.3.1 Warmup zprávy ................................................................................................................. 40 8.3.2
Cooldown zprávy ............................................................................................................... 41
8.3.3
Zprávy poplatků ................................................................................................................ 41
8.3.4
Zprávy limitů ..................................................................................................................... 42
8.3.5
Další zprávy ....................................................................................................................... 42
ZÁVĚR ....................................................................................................................................................43
LITERATURA ....................................................................................................................................................44 TERMINOLOGICKÝ SLOVNÍK ............................................................................................................................46 OBSAH PŘILOŽENÉHO CD ................................................................................................................................47
1 Úvod Tématem této práce je vytvořit zásuvný modul (plugin) k serveru pro hru Minecraft (1) s použitím knihovny Bukkit (2). K výběru tématu mě vedla skutečnost, že již několik let jsem hlavním administrátorem Minecraft serveru MineCube (3) a potýkal jsem se právě s problémy, které jsou spojené s herními příkazy. K vyřešení tohoto problému jsem nenalezl žádný vyhovující plugin, proto jsem se rozhodl vytvořit vlastní a pomoci tak i ostatním administrátorům Minecraft serverů.
1.1 Cíle práce Cílem práce je následující:
Analyzovat svět počítačových her a zařadit hru Minecraft do tohoto světa
Analyzovat vlastnosti této hry a objevit problémy se kterými se hráči a administrátoři setkávají
Navrhnout a vytvořit plugin, který by některé tyto problémy řešil
Plugin usnadní práci administrátorům Minecraft serverů a bude sloužit majitelům a administrátorům Minecraft serverů k omezování používání herních příkazů pomocí poplatků, limitů a časování.
1.2 Struktura práce
Rešerše literatury použité k analýze světa počítačových her
Analýza světa počítačových her a zařazení hry Minecraft
Základní vlastnosti hry Minecraft a problémy se kterými se hráči a administrátoři běžně setkávají
Definice požadavků na plugin řešící některé problémy
Návrh aplikace
Analýza a návrh řešení aplikace
Uživatelská dokumentace
1.3 Metody sběru a analýzy dat Pro první dvě kapitoly nazývající se Svět počítačových her a postavení hry Minecraft v něm a Základní vlastnosti hry Minecraft a typické problémy, s nimiž se hráči setkávají, jsem využil osobní znalosti těchto témat. Na základě vlastní zkušenosti a literatury uvedené v seznamu použitých zdrojů jsem stručně zpracoval první kapitolu. Druhá kapitola vyplývá převážně z vlastní zkušenosti hráče a hlavního administrátora Minecraft serveru a také zkušeností mých kolegů administrátorů. Znalosti k popisu analýzy a vývoji aplikace jsem čerpal z odborné literatury uvedené v seznamu zdrojů a také z kurzů VŠE.
1
2 Rešerše Kapitola obsahuje rešerši literatury, která byla použita k analýze světa počítačových her.
2.1 Genre and the Video Game (4) Dílo velmi podrobně popisuje svět počítačových her a bylo použito jako základní zdroj informací pro analýzu světa počítačových her. V některých částech dílo obsahuje dělení, které je pro tuto práci a i pro běžné použití až příliš podrobné. Dělí hry na žánry, do kterých je možné zařadit jen velice málo her. Například do žánru Pinball se dá zařadit velmi malé procento počítačových her, které se běžně řadí do žánru arkáda. Naopak zapomíná na některé žánry, které jsou velmi důležité.
2.2 Video Game Genre, Evolution and Innovation (5) Publikace řeší problémy se zařazováním her do herních žánrů. Hry mohou obsahovat více herních žánrů a je velmi obtížné si představit tu správnou hru. Když se například jedná o hru z žánru Role-playing game, může jít o akční hru s několika málo rpg prvky, může jít o hru s nepřeberným množstvím rpg prvků a současně hra může být tahová. Může jít o hru s pohledem s první osoby, nebo o hru s pohledem seshora. Tato publikace pomohla ujasnit způsob zařazení hry.
2.3 Weby MobbyGames (6) a Rovi (7) Web Rovi obsahuje velmi rozsáhlý seznam žánrů počítačových her a web MobbyGames obsahuje velmi výstižné popisy jednotlivých nejpoužívanějších žánrů. Weby pomohly ujasnit, jaké hry spadají do jakých žánrů a tím pomohli k této bakalářské práci.
2
3 Svět počítačových her a postavení hry Minecraft v něm Kategorizace na jednotlivé žánry je používána především v literatuře, filmu nebo hudbě jako užitečný úhel pohledu. V konstituci žánru je důležitá role publika, jemuž je určen, zachycuje a oslavuje jeho kolektivní hodnoty a ideály. Existence žánrů s sebou ovšem přináší i určité těžkosti, souvisící především s vymezením jednotlivých kategorií (které jsou neustále v pohybu) a jejich překrýváním. Nezřídka se tak stává, že najdeme díla, která jsou zařazena ve více žánrech, nebo jsou jejich hybridy. V oblasti videoher tomu není jinak, vliv žánru na zkušenost publika je zde ovšem mnohem výraznější díky aktivní participaci hráče. Z tohoto důvodu je u her důležité vzít v potaz nejen téma a ikonografii (jak je tomu např. u filmů), ale zejména aspekt interaktivity, zohledňující charakter činnosti a zkušenosti hráče při hraní hry (Wolf, 2005). Počítačové hry lze ovšem dělit více různými způsoby, kritériem může např. být, zda se jedná o hru jednoho (single-player) či více hráčů (multiplayer). Některé hry mohou navíc umožňovat odlišné aktivity spadající do různých žánrů. (4)
3.1 Rozdělení dle platformy Svět počítačových her se dělí podle platformy, na které jsou hry dostupné. Zde se budeme zabývat platformami herní konzole, mobilní zařízení a počítač.
3.1.1 Herní konzole Pod pojmem herní konzole se zde jedná konkrétně o herní konzole Microsoft Xbox360 (8) a Sony Play Station 3 (9). Hry na konzolích se nejčastěji ovládají pomocí gamepadu nebo jiného herního zařízení. Tyto hry jsou nejčastěji hry akční nebo sportovní, protože absence počítačové myši nebo dotykového ovládání velmi stěžuje ovládání například her strategických nebo podobných her s půdorysnou kamerou. Většina počítačových her se dnes vydává jak v konzolové, tak v počítačové verzi. Existuje však i mnoho her, které jsou dostupné jen na konzole. Hra Minecraft je dostupná i ve verzi pro herní konzoli Microsoft Xbox360, ovšem jedná se o verzi velice odlišnou od verze pro počítače, kterou se zabývá tato práce. Verze pro konzole je značně omezená a obsahuje jen zlomek toho, co obsahuje verze pro počítače.
3.1.2 Mobilní zařízení Pod pojmem mobilní zařízení se zde rozumí mobilní telefon či tablet disponující operačním systémem Android (10) či iOS (11).
3
Hry na mobilních zařízeních jsou nejčastěji ovládané pomocí dotykové obrazovky a virtuální softwarové klávesnice či virtuálního softwarového gamepadu. K těmto zařízením je často možné přímo připojit gamepad, čímž se ovládání změní na podobné, jakým disponují herní konzole. Hry na tuto platformu jsou od akčních až po strategické, protože dotykové ovládání umožňuje snadno ovládat i hry s půdorysnou kamerou, které je obtížné ovládat na herních konzolích. Jedná se převážně o hry strategické. Na této platformě existuje mnoho kvalitních her, ovšem tyto hry svou kvalitou ani rozsahem nedosahují kvalit her pro herní konzole či pro počítače. Je tomu hlavně kvůli značně omezenému výpočetnímu výkonu na straně mobilních zařízení. Hlavním problémem těchto zařízení je malá kapacita paměti RAM a výkon grafické karty. I přes tato omezení je hra Minecraft dostupná i na platformu mobilních zařízení. Konkrétně se hra nazývá Minecraft Pocket Edition a je oproti svým počítačovým a konzolovým verzím velmi zjednodušená a obsahuje jen málo z toho, co verze Minecraft pro počítače.
3.2 Rozdělení dle herních žánrů Žánrů počítačových her je dnes nespočet a je složité určit, které žánrové dělení je správné. Některé hry mohou zahrnovat žánrů více, nebo se pohybovat na pomezí mezi několik žánry. V této práci proto je použito dělení žánrů dle publikace Genre and the Video Game (4), její rozšíření v publikaci Video Game Genre, Evolution and Innovation (5) a také podle webů MobbyGames (6) a Rovi (7), které je následně rozšířené o několik nových žánrů dnešní doby. Předem uvádím, že zde nejsou uvedeny veškeré žánry uvedené v těchto publikacích, protože pro tuto práci nejsou důležité. Jsou zde uvedeny jen žánry, do kterých spadá nebo se jich nějak týká hra Minecraft.
3.2.1 Bojové hry (Combat games) Hry, které zahrnují dva nebo více hráčů, nebo jednoho hráče a počítačem řízeného hráče, hráčům jsou poskytovány postavy s podobnými prostředky pro poměrně vyrovnaný boj. Tyto hry jsou obvykle zaměřené na schopnost manévrování a někdy také na to jak vyzrát na nepřítele. (4) Jasné příklady tohoto typu her jsou „Battletech“, „Battlezone“ a podobné hry. Tento žánr by se na hru Minecraft dal vztáhnout z hlediska soubojů mezi dvěma hráči. Hráči většinou mají vyrovnané brnění i zbraně a tak záleží převážně na taktice, kterou zvolí či na schopnosti vyhýbat se útokům jiného hráče.
3.2.2 Hry na hrdiny (Role‐Playing) Hry tohoto druhu se vyznačují především postupným zlepšování hlavní postavy současně s tím, jak postupuje ve hře. Hráčova postava většinou disponuje statistikami jako síla, inteligence, obratnost a dalšími, nebo ve zjednodušené verzi pouze statistikami útok, obrana, 4
zdraví. Hráč v naprosté většině těchto her získává zkušenosti za různé aktivity, které vykonává. Například za zabíjení monster či banditů, plnění úkolů atd. Příklady tohoto druhu her jsou například hry „Diablo“, „Fallout“, „Sacred“ a další. Hra Minecraft se do tohoto žánru také dá zařadit, protože obsahuje statistiky jako síla útoku, obrana, zdraví a navíc ještě stupeň nasycení. Dále Minecraft také obsahuje zkušenosti, které se získávají za zabíjení monster ve světě a za výrobu předmětů. Za zkušenosti hráč získává úrovně a za tyto úrovně je následně možné očarovat si svoje nástroje, brnění či zbraně.
3.2.3 Simulace (Simulation) Tento typ her se většinou zaměřuje na simulaci nějaké reálné situace. Například simulátor managementu společnosti, simulátor jízdy autem, simulátor přežití. Hlavně poslední zmíněná položka, kterou je simulátor přežití, je v dnešní době velice oblíbená záležitost a vzniká mnoho her zaměřující se právě na tento žánr. Většinou jde o spojení s jinými akčními žánry, jako jsou například střílečky, hry na hrdiny a podobné. Zejména oblíbené jsou v současnosti simulace přežití zombie apokalypsy, kde je hráč vržen do světa ve kterém nezůstali žádní živí lidé a veškeré obyvatelstvo je změněno na zombie. Úkolem hráče je pak přežít co nejdelší dobu jakýmkoli způsobem. Hra Minecraft obsahuje tyto prvky, protože hráč začíná v novém světě bez jakékoli pomoci, zbraní a nástrojů. A je tak pouze na něm, jestli si do soumraku postaví dům nebo se schová do jeskyně a přečká tak noc plnou monster a nebezpečí.
3.2.4 Otevřený svět (Open world) Hry tohoto typu jsou specifické takzvaným otevřeným světem. Znamená to, že hráči je celý svět hry k dispozici bez jakýchkoli omezení, jako jsou neviditelné stěny blokující hráči přístup, nebo načítací obrazovky. Svět je většinou načítán dynamicky s pohybem hráče, nebo je celý načten při spuštění hry. Příkladem tohoto druhu her je například hra „The Elder Scrolls V: Skyrim“ a další. Hra Minecraft je velice dobrým příkladem tohoto žánru, protože obsahuje svět o rozloze větší než je rozloha planety země, který je dynamicky načítán s tím, jak se hráč po tomto světě pohybuje. Není tedy nijak limitován v pohybu.
3.2.5 Pískoviště (Sandbox) Základní vlastností těchto her je to, že dovolují hráči upravovat herní svět většinou za pomoci nástrojů vlastní výroby. Představují tedy nelineární postup a rozsáhlé možnosti, ve kterých každý hráč najde a využije většinou jen některé z nich.
5
Nelinearita těchto her hráčům poskytuje obrovskou volnost a mnoho možností jak hru hrát. Ve hře Minecraft je možné mnoho různých aktivit a mnoho hráčů si zde dokáže najít tu pravou zábavu. Někteří hráči například těží a schraňují bohatství ve formě diamantů, někteří staví neuvěřitelné stavby, někteří vytvářejí komplexní elektronická zařízení a jiní jen loví monstra či jiné hráče. Nejdůležitějším zástupcem těchto her je bezesporu hra Minecraft. Další zástupci jsou hry „Salem“, „Freebooter“ a další.
6
3.3 Postavení hry Minecraft Hra Minecraft je v současné době nejznámější, nejúspěšnější a nejoblíbenější hrou od nezávislých vývojářů. Tato hra inspirovala mnoho nových a skvělých vývojářů a dovolila tak vzniknout nespočtu nových zajímavých her. Minecraft byl původně hra, kterou vytvořil kompletně sám člověk jménem Markus Persson známý pod přezdívkou Notch (dále jen Notch). Hra se stala obrovským hitem a dnes již dosáhla více než 10 milionů unikátních prodejů. Hra se prodává za cenu 19,95€ a Notch se díky ní stal milionářem. Dnes je již hra vyvíjená pod záštitou firmy Mojang (12), kterou založil a vlastní Notch. Tato firma má několik zaměstnanců a zabývá se vývojem hry Minecraft a další her. Hra se řadí do žánrů bojových her, her na hrdiny, her s otevřeným světem, simulace a hlavně do her sandbox. Hra poskytuje pohled z první osoby, který je možné přepnout na pohled z osoby třetí.
7
4 Základní vlastnosti hry Minecraft a typické problémy, s nimiž se hráči setkávají Základní vlastnosti hry se dělí na vlastnosti klientu, herních mechanik a serveru. Tyto jednotlivé položky jsou dále podrobně popsány a na jejich základě jsou analyzovány problémy s nimi spojené.
4.1 Klient Jedná se o základní část hry Minecraft. Na rozdíl od jiných her typu klient-server, Minecraft klient je schopen fungovat sám od sebe v módu jednoho hráče. Klient se skládá ze dvou částí, první částí je spouštěč – takzvaný Launcher – který je po zakoupení hry možné stáhnout na oficiální webové stránce hry www.minecraft.net. V tomto launcheru je možné přihlásit se pomocí uživatelského jména a hesla zadaného při registraci a zakoupení hry. Po přihlášení launcher automaticky stáhne z internetu poslední verzi hry a veškeré potřebné knihovny a další soubory, jako například zvuky. Následně je spuštěna samotná hra. Launcher samotný je možné stáhnout ve formátu „.exe“ pro systém Windows, nebo ve formátu „.jar“, který je možné spustit na téměř jakémkoli zařízení s nainstalovaným prostředím Java (13). Hru je tedy možné spustit jak na systému Windows (14), tak i systému MacOS (15) a i systému Linux. Pokud uživatel již jednou hru spustil, je ji následně možné spustit v off-line módu, ke kterému není potřebný internet. Nemůže se však poté přihlásit na žádný online server a je odkázán pouze na mód jednoho hráče. Launcher je možné vidět na obrázku 1.
Obrázek 1: Launcher
Po přihlášení je spuštěn samotný herní klient. Ihned po spuštění je možné spustit mód jednoho hráče, mód více hráčů, přejít do nastavení hry nebo hru ukončit. Klient je možné vidět na obrázku 2.
8
Obrázek 2: Herní klient
Samotný klient podporuje takzvané „texture packy“, které tvoří samotní hráči a jejich účel je kompletní změna všech textur ve hře. Původní „texture pack“ disponuje rozlišením jednotlivých textur pouze 16x16 bodů a mnoho hráčů s ním není spokojeno, protože hra pak vypadá velmi zastarale. Podporovaná rozlišení „texture packů“ se pohybuje v rozmezí od 16x16 bodů, do 512x512 bodů. Konkrétně se jedná o rozlišení 16x16, 32x32, 64x64, 128x128, 256x256 a 512x512 bodů. Samotná hra je velice náročná na procesor a operační paměť počítače a proto se na běžných hardwarových sestavách nedoporučuje používat „texture packy“ s rozlišením více než 128x128 bodů. Použití většího rozlišení může velmi nepříznivě ovlivnit plynulost hry. Pro porovnání vzhledu hry s „texture packem“ o rozlišení 16x16 bodů a jiným s rozlišením 64x64 bodů, je možné porovnat obrázek 3 a obrázek 4. Oba obrázky zobrazují stejné místo ve hře, obrázek 3 je pořízen s „texture packem“ o rozlišení 16x16 bodů (originální „texture pack“), zatímco obrázek 4 je pořízen s „texture packem“ 64x64 bodů (použitý „texture pack“ se nazývá Sphax PureBDcraft (16) a je možné ho zdarma stáhnout na webové stránce http://bdcraft.net/)
9
Obrázek 3: Originální 16x16 texture pack
Obrázek 4: 64x64 texture pack Sphax pureBDcraft
Podpora „texture packů“ s sebou nese první problém. Tímto problémem jsou hráči, kteří neuznávají „fair-play“ a chtějí si hru ulehčit. Existuje několik „texture packů“, které jsou kompletně transparentní, až na nejcennější materiály ve hře jako jsou diamanty, emeraldy a železo. Vzhledem k tomu, že texture packy jdou bez omezení použít i v módu více hráčů, je toto velice velký problém. Naštěstí existuje několik pluginů k serverové části hry, které se s tímto problémem dokáží vypořádat. Fungují na základě přepisování packetů odesílaných serverem hráčům a vytvářejí tímto způsobem falešné materiály v zemi, které zmatou uživatele transparentních „texture packů“ a tyto „texture packy“ se pak stanou naprosto nepoužitelnými. Tento problém je tedy již dostatečně ošetřen, a proto se jím nebudeme dále zabývat. Pro porovnání funkčnosti transparentního „texture packu“ bez použití výše zmíněného pluginu a s použitím tohoto pluginu prosím porovnejte jednotlivé ukázky na obrázku 5. Na 10
obrázku 5 je použit transparentní „texture pack“ a v jednotlivých jeho částích jsou použita různá nastavení pluginu. V prostřední části je vidět, jak by tento transparentní „texture pack“ fungoval bez tohoto pluginu, vlevo a vpravo je vidět jak tento „texture pack“ ne/funguje s pluginem. Plugin použitý v tomto příkladu se nazývá Orebfuscator (17) a je možné ho zdarma stáhnout na webové stránce http://dev.bukkit.org/server-mods/orebfuscator/.
Obrázek 5: Transparentní texture pack a ochrana před ním pomocí pluginu Orebfuscator Zdroj: http://dev.bukkit.org/media/images/34/388/1.jpg
4.2 Herní mechaniky Hra Minecraft je velice rozsáhlá a to i přes to, že nezabírá téměř žádnou kapacitu na disku (celá hra zabírá jen něco málo pod 100MB místa na disku).
4.2.1 Podstata hry a herní svět Podstatou hry je naprostá volnost v tom co hráč chce dělat. Hra nemá žádný konec a je možné v ní pokračovat nekonečné množství času. Tuto volnost jen podporuje náhodně generovaný svět, který je celý složen z malých voxelů1 ve tvaru kostek. Svět je naprosto obrovský a téměř neomezený. Pokud bereme v úvahu celkovou rozlohu planety Země, která dosahuje přibližně 510.072.000 km2 a na celkovou rozlohu jednoho Minecraft světa, který dosahuje rozlohy přibližně 4.722.366.482.869.645 km2 tak zjistíme, že tato rozloha je přibližně 9.258.235 krát větší, než rozloha planety na které žijeme. Svět je samozřejmě generován dynamicky, tak jak se hráč po světě pohybuje, protože vygenerovat celý svět v jeho maximálních rozměrech by spotřebovalo velice velké množství času, nemluvě o množství dat na pevném disku. 1
Analogie pixelu ve 3D grafice.
11
Každý jednotlivý blok2 reprezentuje určitý daný materiál, je plně dynamický a je proto možné ho volně editovat, za předpokladu že hráč disponuje potřebným nástrojem k jeho získání. Pokud hráč ve světě nějaký blok zničí, automaticky se změní na předmět, který hráč může sebrat a umístit do svého batohu. Batoh obsahuje celkem 40 slotů, z nichž 4 slouží pro brnění, 9 k rychlému přístupu k věcem či blokům v nich umístěných bez nutnosti otevřít batoh a dalších 27 slouží jako samotný batoh a k přenášení či uchování věcí a bloků. Každý slot – až na sloty pro brnění – pojme maximálně 64 věcí či bloků stejného typu. Hráč je tedy schopen s sebou přenášet až 2304 bloků či věcí. Díky tomu že jsou jednotlivé bloky dynamické je tedy možné je ničit a sbírat, ale také je možné je vracet zpět do světa a stavit z nich různé stavby. Záleží čistě na fantazii a zručnosti hráče co zvládne postavit. Ať se již jedná o hliněný domek z několika málo bloků, nebo například model Eiffelovi věže postavený z několika tisíc bloků (obrázek 6).
Obrázek 6: Model Eiffelovi věže Zdroj: http://fc06.deviantart.net/fs70/f/2012/076/2/c/2012_03_16_12_06_25_by_merelycubed-d4t08qo.jpg
2
Oficiální označení voxelu tvaru kostky
12
4.2.2 Nástroje, materiály a výroba Jak již bylo zmíněno, k zničení a sebrání bloků z různých materiálů je potřeba disponovat nástroji určité kvality. Kvalita materiálů, ze kterých je možné nástroje vyrobit je následující: nejhorší nástroje jsou dřevěné a hráč s nimi dokáže rozbít maximálně kamenné bloky. Tyto nástroje se vyrábějí ze dřeva, které je možné získat ze stromů. Stromy jdou pokácet i takzvaně „holýma rukama“. Dřevěné nástroje se brzy opotřebují a je třeba je nahradit nástroji kamennými, které je možné vyrobit z kamenných bloků natěžených pomocí dřevěných nástrojů. Tyto kamenné nástroje je možné použít k těžbě uhlí a železné rudy. Z železné rudy a uhlí je možnost vyrobit železo a ze železa pak nástroje železné. Železné nástroje jsou již dostatečně silné k těžbě nejcennější suroviny ve hře vůbec – diamantů, nejsou ovšem dostatečně silné k těžbě materiálu zvaného obsidián, který je nejtvrdší a nejodolnější stavební (nelze z něj vyrábět nástroje) materiál ve hře. Diamantové nástroje jsou vůbec nejlepší ve hře, dokáží těžit veškeré suroviny a téměř se neopotřebovávají. Jsou proto velmi cenné. Dále ve hře existují nástroje ze zlata. Tyto nástroje jsou nejrychlejší v těžbě surovin vůbec – rychlejší než diamantové –, ovšem velice rychle se opotřebují. Jejich výdrž je prakticky na úrovni nástrojů dřevěných, nejsou proto tolik oblíbené. Hra také obsahuje kontejnery včetně truhel a různých mechanických bloků, o kterých se můžete dočíst dále. Hra dále disponuje mnoha dalšími materiály včetně bloků písku, štěrku, sněhu atd. Všechny zde nebudou popisovány, protože se jedná o velmi rozsáhlé téma a není pro tuto práci důležité. Veškerá výroba probíhá na ponku („Workbench“ v originále), který je možné vyrobit z několika bloků dřeva. Ponk obsahuje 9 slotů umístěných ve tvaru 3x3 slotů a jeden další slot pro výsledek výroby (obrázek 7). Výroba probíhá dvěma způsoby pomocí různých receptů, kterých je ve hře velké množství. První způsob je takzvaný beztvarý recept, kdy je jedno do jakého slotu vložíme dané materiály, ve výsledném slotu se objeví vyrobená věc. Další způsob je recept, ve kterém musíme přesně dodržet daný tvar, tzn. je nutné dané materiály umístit do předem definovaných slotů (obrázek 8).
Obrázek 7: Obrázek ponku
Obrázek 8:předem definovaný tvar receptu
Zdroj: http://images.wikia.com/minecraftbuildcraft/images/4/44/ Crafting_GUI.png
Zdroj: http://static.acceleratedideas.com/minecraft/images/how-to-create-a-pickaxe.jpg
13
4.2.3 Redstone Hra Minecraft obsahuje materiál zvaný Redstone. V podstatě se jedná o obdobu dnešních elektrických obvodů. Pomocí těchto obvodů a zařízení je možné ve hře vytvářet jednoduchá automatická zařízení jako je například zvonek u domu, automatické dveře či osvětlení domu závislé na denní době. Je dostupných několik zařízení, pomocí kterých je možné vytvořit nevídané a velmi komplexní stavby. I když se jedná pouze o předmět buďto vydávající nebo nevydávající elektrický signál a další předmět, který tento signál je schopný vést dál jako dnešní dráty a kabely, někteří nadaní hráči pomocí nich dokáží vytvořit neuvěřitelně komplexní a funkční stavby. Jako příklad je přiložen obrázek 6 počítače s displejem 100x100 pixelů schopný zobrazovat text o délce až 40 znaků, text je do počítače zadáván pomocí 7-bit ASCII kódů, které jsou zadávány pomocí tlačítek ve hře.
Obrázek 9: Počítač vytvořený pomocí herních mechanik Zdroj: http://rookery9.aviary.com.s3.amazonaws.com/9009000/9009391_dbe5_1024x2000.jpg
4.2.4 Smrt Ve hře Minecraft je hráč nucen jíst, aby přežil. Hra obsahuje ukazatel nasycení, a pokud tento ukazatel klesne na nulovou hodnotu, hráči začne periodicky ubývat zdraví, až dokud kompletně nezemře. Zemřít se dá mnoha různými způsoby a vyhladovění je jen jedním z nich. Dalším způsobem je pád z velké výšky, nebo utopení se ve vodě. K méně častým příčinám smrti patří smrt po zásahu bleskem, nebo například uhoření v lávě nebo při lesním požáru. Nejčastější příčinou smrti v Minecraftu ovšem není ani jedno z předchozích. Nejčastěji hráč zemře v důsledku útočících monster, nebo hráče zabije jiný, silnější hráč. Další častou příčinou smrti je sebevražda pomocí příkazu „/kill“, který je zakomponován do hry a není 13
možné jej zablokovat. Hráči často používají tento příkaz k návratu na startovní lokaci ve světě či serveru. K účelu zablokování tohoto příkazu již pluginy existují, ovšem neumějí zablokovat jiné příkazy než tento. Pokud hráč v této hře zemře, může se opět oživit a pokračovat ve hře, ovšem jistý postih s sebou smrt přináší. Smrtí hráč přichází o veškeré věci v jeho batohu, včetně nasazeného brnění a zbraně. Tyto věci vypadnou na zem a kdokoli je může sebrat a odejít s nimi. Nastává zde problém, že hráči proto velice neradi umírají, obzvláště pokud mají v batohu mnoho cenností. Proto nehledě na fair-play se snaží utéct z boje. Dále o tomto problému v kapitole o serverové části hry.
4.2.5 Monstra a zvířata Ve hře Minecraft není nic zadarmo a po začátku hry je hráč vhozen přímo do nehostinného světa bez jakékoli pomoci. Musí si najít přístřeší dříve, než nastane noc a není tak času nazbyt. Jakmile ve hře nastane noc, začnou se ve světě objevovat monstra. Tyto monstra zahrnují zombie, kteří útočí pomocí útoků na blízkou vzdálenost, dále se pak jedná o kostlivce, kteří útočí pomocí luku a šípu a nakonec monstrum zvané „Creeper“. „Creeper“ je nejobávanější monstrum, protože útočí pomocí sebevražedné exploze, která nejen hráče těžce zraní, ale také zničí bloky světa v dosahu výbuchu. Během dne tato monstra vzplanou a zemřou. Zde opět nastává problém, který bude popsán níže. Vztahuje se k tomu, že hráči neradi umírají, a proto udělají cokoli, aby unikli smrti, i když to není fair-play.
4.3 Server Minecraft server je volně ke stažení na webové stránce http://bukkit.org/. Samotný server je Open-Source a je proto volně šiřitelný a modifikovatelný. Server je dostupný jako „.jar“ soubor a je proto kompatibilní s jakýmkoli systémem s nainstalovaným prostředím Java. Server je tedy možné spustit na systému Windows, MacOS i Linux. Server sám nemá žádné grafické rozhrání a jediná možnost jak ho spravovat je pomocí konzole (obdoba příkazového řádku). Server sám o sobě neposkytuje žádné nové funkce od módu jednoho hráče. Hlavní výhodou je ovšem to, že server obsahuje API (framework) a je volně a snadno rozšiřitelný pomocí pluginů. Webový server http://bukkit.org/ poskytuje vývojářům pluginů výbornou podporu ve formě stránky pluginu, serveru pro nahrávání samotných vytvořených pluginů, repositář pro zdrojový kód a dále také kompletní a velmi přehlednou dokumentaci svého API. Tyto služby poskytuje společnost Curse, Inc. Vlastnící webový server http://www.curse.com.
14
Pomocí pluginů je možné vytvořit si vlastní unikátní server obsahující mechaniky, které v módu jednoho hráče nejsou dostupné. Pluginů je momentálně něco málo přes 7.0003, většina z nich má svou vlastní unikátní funkci je tedy možné vytvořit pro hráče téměř jakékoli prostředí s jakýmikoli herními mechanikami. Pluginy – stejně jako server samotný – nemají vlastní grafické rozhrání a jediná možnost jak je spravovat je pomocí editace konfiguračních souborů a/nebo pomocí příkazů (příkazy ve hře se zadávají do chatového řádku ve formátu „/prikaz“) ve hře samotné. Zde vzniká další problém. Většina serverů používá něco mezi dvaceti až stem různých pluginů, z nichž naprostá většina se ovládá pomocí příkazů – ať už hráčem, tak i administrátorem serveru. Tyto příkazy ovšem v naprosté většině nejsou nijak limitovány a přímo tak svádějí hráče k tomu, aby je zneužívali v situacích, ke kterým původně nebyli vytvořeny. Velmi názorný příklad je například souboj mezi hráči nebo souboj hráče s monstrem. Jak již bylo řečeno dříve, když ve hře Minecraft hráč zemře, veškeré jeho věci – ať už se jedná o oblečené brnění, zbraň v ruce nebo o natěžené diamanty v batohu – z hráče vypadnou a jiný hráč je může okamžitě sebrat a utéct. Pokud na serveru je plugin, který poskytuje teleportaci (naprostá většina serverů) ať už do vašeho domu, k jinému hráči nebo do hlavního města či začáteční lokace serveru a pokud navíc hráč bojuje s hráčem silnějším a boj pro něj nevypadá příznivě. Tato situace přímo svádí k tomu rychle použít teleportační příkaz a z boje utéct. Hráč se sice zachrání, ale za cenu toho že druhý hráč, který v souboji vyhrával, bude zklamaný, že vynaložil úsilí zbytečně a pro nic. Pokud se toto hráči stane několikrát, určitě se naštve a hry ukončí. Tento problém zatím není vyřešen, a proto se jím bude dále zabýváno.
3
Zdroj: http://www.curse.com/server-mods/minecraft; dne 8. 4. 2013
15
5 Definice požadavků na plugin eliminující problém s herními příkazy 5.1 Použité pojmy
Warmup Označení pro časování příkazu takovým způsobem, že hráč musí vyčkat stanovenou dobu mezi použitím příkazu a samotným vykonáním funkce tohoto použitého příkazu. Pokud je tedy pro příkaz nastavena warmupů doba 5 sekund, hráč po použití příkazu musí vyčkat 5 sekund a až po této době je proveden efekt použitého příkazu.
Cooldown Označení pro časování příkazu takovým způsobem, že hráč je nucen vyčkat stanovenou dobu mezi jednotlivými použitími příkazu. Pokud je tedy pro příkaz nastavena cooldownů doba 10 minut, hráč po použití příkazu a po provedení efektu tohoto příkazu musí čekat 10 minut, než bude příkaz znovu k dispozici pro použití.
Alias Označení pro zástupný příkaz, který je možné použít místo příkazu jiného (většinou delšího) se zachováním efektu příkazu původního.
5.2 Funkce Funkce pluginu musí zahrnovat: 1. 2. 3. 4. 5. 6. 7.
časování příkazů z hlediska warmupů, časování příkazů z hlediska cooldownů, nastavení poplatku za příkaz, limitovat počet použití příkazu či zablokovat příkaz, možnost vypnutí či zapnutí jakékoli předešlé funkce, možnost nastavení aliasů pro příkazy, zprávy odesílané hráči musejí být plně lokalizovatelné.
5.2.1 Časování příkazů z hlediska warmupů Plugin měl být schopný časovat příkazy tak, aby hráč po použití příkazu byl nucen čekat stanovenou dobu v sekundách a až po této době byla funkce použitého příkazu provedena. Nastavení těchto časů musí být možné pro specifický příkaz, pro příkaz s určitým parametrem a také pro příkaz s jakýmkoli parametrem, případně také pro všechny příkazy globálně. Dále by plugin měl být schopný ukončit čekací dobu a neprovést funkci příkazu, pokud hráč provede některou s následujících aktivit: hráč se začne pohybovat, hráč se začne plížit, hráč
16
začne sprintovat, hráč změní svůj herní mód, hráče někdo nebo něco zraní. Všechny tyto možnosti musí mít v konfiguraci pluginu možnost pro zapnutí a vypnutí.
5.2.2 Časování příkazů z hlediska cooldownů Plugin by měl být schopný časovat příkazy tak, aby hráč musel čekat stanovenou dobu mezi jednotlivými užitími příkazu. Tato doba začíná běžet v době kdy je provedena funkce příkazu (tedy až po warmup době). Jednotlivé příkazy by také mělo být možné propojovat a poskytovat tak společný cooldown na jednotlivé nastavené příkazy. Dále plugin musí být schopný vymazat cooldowny při restartu server a při smrti hráče a také spustit cooldowny při smrti hráče. Všechny tyto možnosti musí mít v konfiguraci pluginu možnost pro zapnutí a vypnutí.
5.2.3 Nastavení poplatku za příkaz Plugin musí obsahovat podporu možnosti nastavit poplatek za příkaz a použít k tomuto účelu nějaký plugin, který zajišťuje komunikaci s ekonomickými pluginy. Pokud vytvářený plugin nenajde daný plugin zajišťující komunikaci, pak je tato funkce vypnuta a vytvářený plugin dál funguje. Poplatek za použití příkazu musí být účtován až po uplynutí doby warmupu.
5.2.4 Limitovat počet použití příkazu či zablokovat příkaz Plugin musí být schopný zablokovat některé příkazy, a/nebo omezovat kolikrát hráč může příkaz použít. Limit musí být brán v úvahu okamžitě po použití příkazu, tedy ještě před warmupem.
5.2.5 Možnost vypnutí či zapnutí jakékoli předešlé funkce Plugin musí podporovat vypnutí či zapnutí jakékoli funkce uvedené výše a to pomocí konfiguračního souboru pluginu.
5.2.6 Možnost nastavení aliasů pro příkazy Plugin musí obsahovat funkci aliasů, kdy pro některý příkaz je možné vytvořit příkaz jiný, například kratší.
5.2.7 Zprávy odesílané hráči musejí být plně lokalizovatelné Plugin musí podporovat lokalizaci zpráv odesílaných hráči a to pomocí konfiguračního souboru pluginu.
5.2.8 Příkazy samotného pluginu Plugin obsahuje příkazy, kterými je možné tento plugin kontrolovat a nastavovat.
17
5.3 Oprávnění Plugin musí obsahovat podporu oprávnění, která poskytuje server hry Minecraft. Pomocí těchto oprávnění dělit hráče do skupin a poskytovat některým hráčům oprávnění upravovat nastavení vyvíjeného pluginu nebo je vyloučit z omezení tohoto pluginu.
18
6 Návrh aplikace V této kapitole je popsán návrh aplikace. Fungování aplikace je popsáno pomocí případů užití a aktivit, které obsahují příslušné diagramy.
6.1 Případy užití Následující část obsahuje diagramy případů užití včetně grafického znázornění a tabulek popisujících konkrétní případy užití.
6.1.1 Aktéři Vystupují zde dva aktéři, kterými jsou hráči a administrátoři. Hráč: Uživatel hráč je jakýkoli hráč hrající na serveru s tímto pluginem. Uživatel nemá žádná specifická oprávnění ke změnám nastavení pluginu a je tímto pluginem pouze ovlivňován. Administrátor: Uživatel administrátor je hráč disponující patřičným oprávněním, který se vyskytuje na serveru s tímto pluginem. Administrátor má oprávnění měnit nastavení pluginu a sám pluginem není ovlivňován.
6.1.2 Případy užití z hlediska hráče
Obrázek 10: Use case s pozice hráče
19
Tabulka 1: Případ užití - Použití příkazu
ID Název Popis Aktéři Tok událostí
Předpoklady
UseCase1 Použití příkazu Hráč použije herní příkaz ve formátu „/příkaz“. Hráč 1. Přihlášení se na server hry 2. Otevření chatového okna ve hře 3. Vložení příkazu ve formátu „/příkaz“ 4. Začátek čekací doby warmup Alternativní tok událostí od bodu 4: 4. Příkaz má probíhající čekací dobu cooldown 5. Hráči se zobrazí chybová zpráva 6. Příkaz je stornován Alternativní tok událostí od bodu 4: 4. Příkaz je blokován nebo hráč dosáhl stanoveného limitu jeho použití 5. Hráči se zobrazí chybová zpráva 6. Příkaz je stornován Hráč je přihlášen na serveru a je schopen použít daný příkaz.
Tabulka 2: Případ užití - Čekání stanovenou warmup dobu
ID Název Popis Aktéři Tok událostí
Předpoklady
UseCase2 Čekání stanovenou warmup dobu Hráč čeká dobu stanovenou v konfiguraci pluginu. Hráč 1. Čekání dobu, která se zobrazí 2. Pokračuje se k dalšímu kroku Alternativní tok událostí od bodu 2: 2. Hráč provede aktivitu, která přerušuje použití příkazu 3. Hráči se zobrazí chybová zpráva 4. Použití příkazu je přerušeno Hráč je přihlášen na serveru a je schopen použít daný příkaz.
20
Tabulka 3: Případ užití - Zaplacení stanoveného poplatku
ID Název Popis Aktéři Tok událostí
Předpoklady
UseCase3 Zaplacení stanoveného poplatku Hráč zaplatí částku stanovenou v konfiguraci pluginu. Hráč 1. Zaplacení částky stanovené v konfiguraci pluginu 2. Pokračuje se k dalšímu kroku Alternativní tok událostí od bodu 2: 2. Hráč nemá dostatek financí 3. Hráči se zobrazí chybová zpráva 4. Použití příkazu je přerušeno Hráč je přihlášen na serveru a je schopen použít daný příkaz.
Tabulka 4: Případ užití - Vykonání funkce příkazu
ID Název Popis Aktéři Tok událostí Předpoklady
UseCase4 Vykonání funkce příkazu Funkce příkazu je uskutečněna a provádí na hráči svůj efekt Hráč 1. Na hráči je proveden efekt příkazu Hráč je přihlášen na serveru a je schopen použít daný příkaz.
6.1.3 Případy užití z hlediska administrátora
Obrázek 11: Use case s pozice administrátora serveru
21
Tabulka 5: Případ užití - Použití příkazu
ID Název Popis Aktéři Tok událostí Předpoklady
UseCase5 Použití příkazu Administrátor serveru použije herní příkaz ve formátu „/příkaz“. Administrátor 1. Přihlášení se na server hry 2. Otevření chatového okna ve hře 3. Vložení příkazu ve formátu „/příkaz“ Administrátor disponuje patřičným oprávněním, je přihlášen na serveru a je schopen použít daný příkaz.
Tabulka 6: Případ užití - Vykonání funkce příkazu
ID Název Popis Aktéři Tok událostí Předpoklady
UseCase6 Vykonání funkce příkazu Funkce příkazu je uskutečněna a provádí na administrátorovi svůj efekt Administrátor 1. Na administrátorovi je proveden efekt příkazu Administrátor disponuje patřičným oprávněním, je přihlášen na serveru a je schopen použít daný příkaz.
Tabulka 7: Případ užití - Úprava konfigurace editací
ID Název Popis Aktéři Tok událostí
Předpoklady
UseCase7 Úprava konfigurace editací Administrátor upravuje konfigurační soubor pomocí editace v textovém editoru Administrátor 1. Administrátor spustí textový editor 2. Nalezne konfigurační soubor pluginu „config.yml“ ve složce plugins/boosCooldowns nacházející se v kořenové složce serveru 3. Provede požadované změny 4. Soubor uloží 5. Restartuje server Alternativní tok událostí od bodu 5: 5. Použije příkaz „/booscooldowns reload“ pro znovunačtení konfigurace bez potřeby restartovat server Administrátor disponuje patřičným oprávněním, má přístup do root složky serveru, je přihlášen na serveru a je schopen použít daný příkaz.
22
Tabulka 8: Případ užití - Úprava konfigurace pomocí příkazů
ID Název Popis Aktéři Tok událostí
Předpoklady
UseCase8 Úprava konfigurace pomocí příkazů Administrátor upravuje konfigurační soubor pomocí příkazů Administrátor 1. Přihlášení se na server hry 2. Otevření chatového okna ve hře 3. Vložení příkazu upravujícího konfiguraci (viz uživatelská dokumentace) 4. Editace je okamžitá a není třeba dalšího postupu Alternativní tok událostí od bodu 4: 4. Formát příkazu je neplatný 5. Zobrazí se chybová zpráva 6. Editace není provedena Administrátor disponuje patřičným oprávněním, je přihlášen na serveru a je schopen použít daný příkaz.
23
6.2 Aktivity Následující část obsahuje popis procesů v systému pomocí grafického znázornění a krátkého popisu.
6.2.1 Proces Použití příkazu hráčem/administrátorem Tento proces může vykonávat jak hráč, tak administrátor. Pro funkčnost tohoto procesu je důležité, aby uživatel byl schopný použít daný příkaz (neměl zablokované veškeré použití chatu pomocí cizího pluginu). Proces zobrazuje jednotlivé kroky od použití příkazu až k vykonání efektu tohoto příkazu, včetně podmínek za kterých dojde ke stornování příkazu.
Obrázek 12: Proces použití příkazu
24
6.2.2 Proces editace konfigurace pomocí příkazu Aktéři tohoto procesu jsou hráči i administrátoři, ovšem jen uživatel s oprávněním administrátora je schopen konfigurační příkaz úspěšně vykonat.
Obrázek 13: Proces použití konfiguračního příkazu
25
7 Analýza a návrh řešení V následující části je popis použitých technologií, které byly použity při vývoji aplikace a dále popis základních komponent pluginu.
7.1 Java Plugin je vyvíjen v programovacím jazyce Java (13). Tento programovací jazyk je zvolen proto, že hra Minecraft je naprogramovaná v tomto jazyce a stejně tak i server této hry. Bukkit je taktéž naprogramován v jazyce Java. Pluginy je možné vytvářet pouze v jazyce Java a jiné programovací jazyky nejsou podporované.
7.2 Bukkit Plugin je využívá knihovnu Bukkit (2). API této knihovny je v momentální době ve fázi Beta verze a obsahuje téměř vše potřebné k vytvoření jakéhokoli pluginu k Minecraft serverům. Knihovna Bukkit byla zvolena proto, že obsahuje vše potřebné k vytváření pluginů. Aplikační část knihovny (samotný server software) nese název CraftBukkit a v současné době se jedná o nejrozšířenější a nejpoužívanější server software. Dokumentaci API Bukkit je možné nalézt na stránkách Bukkit.org (18). API používá takzvané události (event), které se spouštějí téměř jakoukoli aktivitou hráčů ve hře a je tak možné pomocí posluchačů (listener) těmto událostem naslouchat a okamžitě na jejich základě provádět další operace. Plugin tyto události využívá a dynamicky je registruje na základě konfigurace pluginu. Pokud je některé funkce pluginu vypnutá, event se nezaregistruje a nedochází tak ke zbytečným výpočtům a následnému zpomalení serveru. Události využité v tomto pluginu jsou následující: a) b) c) d) e) f) g) h)
PlayerCommandPreprocessEvent, EntityDamageEvent, PlayerDeathEvent, PlayerGameModeChangeEvent, PlayerInteractEvent, PlayerMoveEvent, PlayerToggleSneakEvent, PlayerToggleSprintEvent,
Každá jednotlivá událost poskytuje v době svého spuštění informace o tom, kdo event spustil a další informace které se po každou jednotlivou událost liší.
26
7.2.1 Oprávnění Knihovna Bukkit poskytuje oprávnění (permissions), která je možné přiřazovat jednotlivým hráčům nebo skupinám hráčů. Pomocí těchto oprávnění se velice efektivně reguluje, kteří uživatelé mají přístup k jednotlivým funkcím jednotlivých pluginů.
7.3 Vault Ve vyvíjeném pluginu je také použit pluginu Vault (19), jehož dokumentace (20) a zdrojový kód (21) jsou volně dostupné na internetu. Platforma Vault je použit k podpoře co možná největšího množství pluginů zajišťujících ekonomiku ve hře. Vault je pravidelně aktualizován a podporuje několik desítek různých ekonomických pluginů zajišťujících platby ve hře. Bez použití tohoto pluginu a jeho API by bylo velice obtížné a neefektivní vytvářet pro každý jednotlivý ekonomický plugin vlastní platební metody. Uživatel tedy může na server přidat i tento plugin a tím zabezpečit kompatibilitu jeho ekonomického pluginu s vyvíjeným pluginem. Pokud vyvíjený plugin nenajde na serveru nainstalovaný plugin Vault, podpora plateb za příkazy se automaticky vypne při spuštění serveru a ostatní funkce zůstanou stále aktivní.
7.4 Architektura a tvorba pluginu Architektura aplikace vychází z architektonických návrhových vzorů, které jsou hlavním obsahem knih Návrhové vzory (22) a Game Engine Architecture (23). Při tvorbě pluginu byly použity znalosti z knihy Game Programming All in One (24).
27
7.5 Diagramy tříd 7.5.1 Stručný diagram hlavních tříd a propojení s knihovnami Bukkit a Vault
Obrázek 14: Stručný diagram hlavních tříd a propojení s knihovnami Bukkit a Vault
7.5.2 Stručný diagram tříd poskytujících metody hlavních funkcí pluginu a jejich propojení s hlavními třídami
Obrázek 15: Stručný diagram tříd poskytujících metody hlavních funkcí pluginu a jejich propojení s hlavními třídami
28
7.5.3 Stručný diagram tříd posluchačů
Obrázek 16: Stručný diagram tříd posluchačů
29
7.6 Popis jednotlivých tříd 7.6.1 Třídy hlavního balíčku BoosCoolDown Hlavní třída pluginu. Třída je potomkem JavaPlugin a implementuje Runnable. Tato třída se stará o veškeré inicializace při spuštění a ukončení pluginu. Toto zahrnuje zjištění, zda je k dispozici plugin Vault a ekonomický plugin, registraci posluchačů a také se stará o funkce všech kontrolních a konfiguračních příkazů. Periodicky také ukládá soubor databáze v intervalu nastaveném v konfiguraci. BoosConfigManager Třída zajišťující veškeré metody, které se starají o konfiguraci pluginu a o databázi. BoosCoolDownListener Hlavní posluchač, který naslouchá události použití příkazu hráčem. Kontroluje, jestli jsou pro příkaz nastaveny omezení a na základě tohoto spouští časovače a volá metody spojené s poplatky a limity. BoosCoolDownManager Třída obsahuje veškeré metody potřebné k řízení cooldown časovačů. Spouštění, ukončování a zjišťování zda je cooldown časovač již aktivní. BoosLimitManager Třída obsahuje veškeré metody potřebné k řízení limitů příkazů. BoosPriceManager Třída obsahuje veškeré metody potřebné k řízení poplatků za příkazy. BoosWarmUpManager Třída obsahuje veškeré metody potřebné k řízení warmup časovačů. Spouštění, ukončování a zjišťování zda je warmup časovač již aktivní. BoosWarmUpTimer Třída starající se o samotné časovače warmupů pomocí TimerTask.
30
7.6.2 Posluchači BoosPlayerToggleSprintListener Posluchač naslouchající události, která se spouští v okamžiku kdy hráč zapne sprintování (pomocí dvojitého stisknutí klávesy pro pohyb vpřed). Pokud na příkazech hráče je aktivní časovač warmup, ve chvíli spuštění této události jsou všechny jeho warmup časovače stornovány a hráči je odeslána zpráva, která ho o této skutečnosti informuje. Pokud hráč disponuje oprávněním „booscooldowns.nocancel.sprint“, jeho warmup časovače stornovány nejsou. BoosPlayerToggleSneakListener Posluchač naslouchající události, která se spouští v okamžiku kdy hráč zapne plížení (defaultně pomocí klávesy control). Pokud na příkazech hráče je aktivní časovač warmup, ve chvíli spuštění této události jsou všechny jeho warmup časovače stornovány a hráči je odeslána zpráva, která ho o této skutečnosti informuje. Pokud hráč disponuje oprávněním „booscooldowns.nocancel.sneak“, jeho warmup časovače stornovány nejsou. BoosPlayerInteractListener Posluchač naslouchající události, která se spouští v okamžiku kdy hráč provádí interakce s herními bloky. Pokud na příkazech hráče je aktivní časovač warmup a blok se kterým hráč interaguje je kontejner, pak tato třída poté ukončuje tuto událost a blokuje hráči přístup do kontejnerů. Pokud hráč disponuje oprávněním „booscooldowns.dontblock.interact“, jeho přístup do kontejnerů není blokován. BoosEntityDamageListener Posluchač naslouchající události, která se spouští v okamžiku kdy dojde ke zranění jakékoli entity ve světě. Pokud je touto entitou hráč a na jeho příkazech je aktivní časovač warmup, ve chvíli spuštění této události jsou všechny jeho warmup časovače stornovány a hráči je odeslána zpráva, která ho o této skutečnosti informuje. Pokud hráč disponuje oprávněním „booscooldowns.nocancel.damage“, jeho warmup časovače stornovány nejsou. BoosPlayerGameModeChangeListener Posluchač naslouchající události, která se spouští v okamžiku kdy hráč změní herní mód. Pokud na příkazech hráče je aktivní časovač warmup, ve chvíli spuštění této události jsou všechny jeho warmup časovače stornovány a hráči je odeslána zpráva, která ho o této skutečnosti informuje. Pokud hráč disponuje oprávněním „booscooldowns.nocancel.gamemodechange“, jeho warmup časovače stornovány nejsou.
31
BoosPlayerDeathListener Posluchač naslouchající události, která se spouští v okamžiku kdy hráč zemře. V závislosti na konfiguraci pluginu a oprávněních hráče mohou nastat tři různé aktivity. Cooldown časovače mohou být po smrti vymazány, nebo naopak mohou být znovu spuštěny veškeré cooldown časovače pro veškeré nastavené příkazy. Také mohou být vymazány záznamy o použitích příkazu a hráč bude opět schopen používat limitované příkazy až po hodnotu limitu. BoosPlayerMoveListener Posluchač naslouchající události, která se spouští v okamžiku kdy se hráč pohybuje. Pokud na příkazech hráče je aktivní časovač warmup, ve chvíli spuštění této události jsou všechny jeho warmup časovače stornovány a hráči je odeslána zpráva, která ho o této skutečnosti informuje. Při pohybech hráče hra tuto událost spouští 20 krát každou vteřinu. To může být na velkých serverech velmi neoptimální a proto se funkce spouští jen jednou za vteřinu, pomocí jednoduchého cyklu. Pokud hráč disponuje oprávněním „booscooldowns.nocancel.move“, jeho warmup časovače stornovány nejsou.
32
8 Uživatelská dokumentace Kapitola obsahuje kompletní uživatelskou dokumentaci k vytvořenému pluginu.
8.1 Instalace pluginu Plugin se instaluje jednoduchým zkopírování souboru boosCooldowns.jar do složky /plugins/, která se nachází v kořenové složce serveru. Po zkopírování stačí spustit nebo restartovat (pokud již server běží) server. Při spuštění se vygeneruje defaultní konfigurační soubor, jehož popis je možné nalézt v další části dokumentace. Konfigurační soubor se nazývá config.yml a je umístěn ve složce /plugins/boosCooldowns/, která se nachází v kořenové složce serveru.
8.2 Defaultní konfigurační soubor pluginu Konfigurační soubor je lokalizován do anglického jazyka a to proto, že je plugin určen pro širokou mezinárodní skupinu uživatelů. Veškeré zprávy odesílané hráčům je možné lokalizovat do jakéhokoli jazyka využívající kódování unicode.
8.2.1 Základní nastavení V této části konfiguračního souboru můžeme nastavit základní funkce pluginu. Následuje podrobný popis jednotlivých položek a jejich funkcí. Většina položek v této části může nabývat hodnoty „true“ nebo „false“. Hodnota „true“ zapíná danou funkci v pluginu, hodnota „false danou funkci vypíná. Jedinou výjimku tvoří položka „save_interval_in_minutes“, která nabývá celočíselné hodnoty. options: options: warmups_enabled: true cooldowns_enabled: true prices_enabled: true limits_enabled: true save_interval_in_minutes: 15 cancel_warmup_on_damage: false cancel_warmup_on_move: false cancel_warmup_on_sneak: false cancel_warmup_on_sprint: false cancel_warmup_on_gamemode_change: false block_interact_during_warmup: false clear_on_restart: false clear_uses_on_death: false clear_cooldowns_on_death: false start_cooldowns_on_death: false command_logging: false
33
Položky „warmups_enabled, cooldowns_enabled, prices_enabled, limits_enabled“ vypínají či zapínají základní funkce pluginu. Položky „cancel_warmup_on_damage, cancel_warmup_on_move, cancel_warmup_on_sneak, cancel_warmup_on_gamemode_change“ vypínají či zapínají rušení warmupů pokud hráče někdo zraní, hráč se pohne, hráč se začne plížit, hráč změní game mode. Položka „block_interact_during_warmup“ vypíná či zapíná funkci blokování přístupu do kontejnerů během warmupu. Položka „clear_on_restart“ vypíná či zapíná funkci vymazání veškerých aktivních warmupů a cooldownů pokud dojde k restartu serveru. Položka „clear_uses_on_death“ vypíná či zapíná funkci resetování limitů na příkazu, pokud hráč zemře. Pokud nastavíte limit na nějaký příkaz a hráč tento limit vyčerpá a následně zemře, pokud je tato položka nastavena na hodnotu „true“ bude hráči po oživení opět povoleno používat příkaz až do hodnoty limitu. Položka „clear_cooldowns_on_death“ vypíná či zapíná funkci, která vymaže hráči cooldowny, pokud zemře. Bude mu tedy po smrti umožněno znovu použít příkaz, na kterém měl aktivní cooldown než zemřel. Položka „start_cooldowns_on_death“ naopak od předchozí funkce vypíná či zapíná funkci, která v případě hráčovi smrti aktivuje veškeré jeho cooldowny aniž by použil daný příkaz. Položka „command_logging“ vypíná či zapíná funkci, která loguje veškeré příkazy, které hráči použijí do konzole serveru a souboru „server.log“. Položka „save_interval_in_minutes“ určuje, jak často se bude ukládat soubor databáze users.yml. Číslo určuje počet minut mezi jednotlivými uloženími na disk.
8.2.2 Nastavení časových jednotek V této části konfiguračního souboru je možné nastavit slovo, které bude použito ve zprávách odesílaných hráči. Tato část je použitelná pouze k lokalizaci pluginu do jiných jazyků. units: seconds: seconds minutes: minutes hours: hours
34
8.2.3 Nastavení zpráv odesílaných hráčům V této části si uživatel může upravit veškeré zprávy, které plugin odesílá hráči. Jsou zde proměnné, které jsou později dynamicky nahrazeny jiným textem a proto je důležité je ve zprávě zanechat. Jedná se o proměnné „&seconds&, &unit&, &command&, %s, &limit&, ×&“. messages: warmup_cancelled_by_damage: '&6Warm-ups have been cancelled due to receiving damage.&f' warmup_cancelled_by_move: '&6Warm-ups have been cancelled due to moving.&f' warmup_cancelled_by_sprint: '&6Warm-ups have been cancelled due to sprinting.&f' warmup_cancelled_by_sneak: '&6Warm-ups have been cancelled due to sneaking.&f' warmup_cancelled_by_gamemode_change: '&6Warm-ups have been cancelled due to changing gamemode.&f' cooling_down: '&6Wait&e &seconds& &unit&&6 before you can use command&e &command& &6again.&f' warming_up: '&6Wait&e &seconds& &unit&&6 before command&e &command& &6has warmed up.&f' warmup_already_started: '&6Warm-Up process for&e &command& &6has already started.&f' paid_error: '&6An error has occured:&e %s' insufficient_funds: '&6You have insufficient funds!&e &command& &6costs &e%s &6but you only have &e%s' %s'
paid_for_command: '&6Price of&e &command& &6was&e %s &6and you now have&e limit_achieved: '&6You cannot use this command anymore!&f'
limit_list: '&6Limit for command &e&command&&6 is &e&limit&&6. You can still use it &e×&&6 times.&f' interact_blocked_during_warmup: '&6You can''t do this when command is warming-up!&f' cannot_create_sign: '&6You are not allowed to create this kind of signs!&f' cannot_use_sign: '&6You are not allowed to use this sign!&f'
Další proměnné zde obsažené jsou například „&e, &6“, jedná se o barevné kódy, které dodávají zprávám barevný vzhled a je možné je volně měnit. Zde je seznam použitelných barev: &4 &c &6 &e &2 &a &b &3
Červená Rudá Zlatá Žlutá Zelená Světle zelené Světle modrá Tyrkysová
&1 &9 &d &5 &f &7 &8 &0
Námořní modrá Modrá Světle fialová Fialová Bílá Světle šedá Šedá Černá
35
8.2.4 Hlavní nastavení Nejdůležitější část nastavení se nachází zde. Zde můžete nastavit jednotlivá omezení pro jednotlivé (nebo veškeré) příkazy na serveru. Pro každý příkaz můžete nastavit warmup, cooldown, cenu, limit, magický efekt během warmupu a sílu tohoto efektu. Magický efekt a jeho síla jsou nepovinné, ostatní jsou povinné. Všechny časy jsou v sekundách. commands: groups: default: /anothercommand: 0,2,0.0,-1 /yetanothercommand: 5,0,10.0,5,WEAKNESS,3 '*': 1,1,0.0,-1 vip: /command: <warmup>,
,<price>,,(potionEffectDuringWarmup),(effectStrength) /command *: 5,30,10.0,0 /anothercommand: <warmup>,,<price>, '*': <warmup>,,<price>,
Jednotlivé skupiny omezení se hráčům přiřazují pomocí oprávnění Permissions. Všichni hráči defaultně začínají se skupinou default. Pokud některým hráčům chceme přiřadit jinou skupinu, stačí jim ve vašem Permissions pluginu přidat oprávnění „booscooldowns.nazevskupiny“. Pro skupinu vip by oprávnění vypadalo „booscooldowns.vip“. Příkaz je nutné napsat ve formátu /prikaz (s lomítkem). Pro nastavení omezení na jednotlivý příkaz, můžete nastavit omezení přesně pro tento daný příkaz. Například „/prikaz: 0,2,0.0,-1“ nastaví dvě sekundy cooldown na tento a pouze na tento příkaz. Pokud má příkaz parametry, můžete nastavit omezení pro jednotlivé parametry, pro všechny parametry, nebo obě předchozí možnosti zkombinovat. Můžeme tedy nastavit „/prikaz parametr1: 5,2,5.0,-1“ což příkazu „/prikaz parametr1“ přidělí warmup 5 sekund, cooldown 2 sekundy a cenu 5. Toto nastavení nebude omezovat příkaz „/prikaz parametr2“ Pokud chcete zahrnout všechny parametry, je nutné použít následující formát „/prikaz *: 0,2,0.0,-1“ toto nastavení zahrnuje veškeré parametry prikazu „/prikaz“ jako jsou například „/prikaz parametr5“, „/prikaz param“ atd. Položky nastavení se testují od shora dolů, je tedy možné některé specifické parametry příkazu limitovat jinak než všechny ostatní parametry. Pokud chcete limitovat všechny příkazy, je možné například nastavit „'*': 1,1,0.0,-1“, toto nastavení nastaví všem příkazům, které nejsou jinak nastaveny před tímto řádkem v konfiguračním souboru warmup 1 sekundu a cooldown 1 sekundu.
36
K vypnutí jednotlivých omezení pro specifický příkaz je možné nastavit hodnotu na 0. Pro limity je nutné hodnotu nastavit na -1, protože hodnota 0 zablokuje daný příkaz. Síla magického efektu je celočíselná hodnota. Pozor však na příliš vysoké hodnoty (50 a více), protože tyto hodnoty teoreticky mohou způsobit problémy s jinými pluginy. Jako magický efekt při warmupu, je možné použít cokoli z následujícího seznamu: CONFUSION DAMAGE_RESISTANCE FAST_DIGGING FIRE_RESISTANCE HARM HEAL HUNGER INCREASE_DAMAGE INVISIBILITY JUMP
NIGHT_VISION POISON REGENERATION SLOW SLOW_DIGGING SPEED WATER_BREATHING WEAKNESS WITHER
37
8.2.5 Nastavení spojených cooldownů V této části konfigurace je možné propojit mezi sebou cooldowny různých příkazů a spojit je do skupin. V první části „link:“ můžete nastavit, jakou skupinu jednotlivé příkazy spouštějí. Ve druhé části „linkGroups:“ můžete nastavit, jaké příkazy spadají do dané skupiny. links: link: /lol: default /example: default /command: default /yourCommandHere: yourNameHere linkGroups: default: - /lol - /example yourNameHere: - /yourCommandHere - /someCommand
V příkladu tedy pokud hráč použije příkaz „/lol“, spustí tím cooldown na príkazech „/lol“ a „/example“. Tyto příkazy musejí mít v nastavení skupin nastavený cooldown. Pokud cooldown nastavený nemají, cooldown se nespustí, protože jeho hodnota je 0 sekund.
8.2.6 Nastavení aliasů Poslední část jsou aliasy. Je zde možné vytvořit nový příkaz, který po použití spustí příkaz jiný. Pokud například na serveru máte plugin a používáte z něho nějaký dlouhý příkaz, je možné ho zde nahradit příkazem naprosto jiným. aliases: /newcommand: /originalcommand /new spawn command: /original spawn command
Pokud například nastavíte „/1: /prikaz ktery je velmi dlouhy“, pak ve hře můžete použít příkaz „/1“ a spustíte tak příkaz „/prikaz ktery je velmi dlouhy“.
34
8.2.7 Příkazy k ovládání pluginu V této části dokumentace je možné nalézt veškeré příkazy, kterými lze ovládat plugin. Ke každému příkazu je zde připojen popis toho, co příkaz provádí a dále několik příkladů. Frázi /booscooldowns je možné nahradit zkratkou /bcd.
/booscooldowns reload
Po použití příkazu si plugin znovu načte konfigurační soubor config.yml z disku do paměti, včetně všech změn které byly provedeny od posledního restartu serveru. Příkaz je užitečný pokud uživatel ručně změní soubor config.yml a server je již spuštěn. Aby byl uživatel schopný použít tento příkaz, musí disponovat oprávněním „booscooldowns.reload“, nebo být OP.
/booscooldowns clearcooldowns
Tento příkaz slouží k vymazání všech aktivních cooldownů hráče specifikovaného místo fráze . Pokud tedy hráč Josef má jeden nebo několik aktivních cooldownů na jeho příkazech, a oprávněný hráč použije příkaz „/booscooldowns clearcooldowns Josef“, potom se hráči Josef veškeré aktivní cooldowny smažou a on opět bude moci použít jeho příkazy. Aby byl uživatel schopný použít tento příkaz, musí disponovat oprávněním „booscooldowns.clearcooldowns“, nebo být OP.
/booscooldowns clearuses
Tento příkaz slouží k vymazání všech záznamů o použití všech příkazů hráče specifikovaného místo fráze . Pokud tedy hráč Josef již několikrát použil některé jeho příkazy a dosáhl tak limitu maximálního počtu použití a příkazy tím pádem již nemůže dále používat, oprávněný hráč může použít příkaz „/booscooldowns clearuses Josef“, čímž hráči Josef vymaže záznamy o použití všech jeho příkazů a Josef opět bude mít možnost používat jeho příkazy až do daného limitu. Aby byl uživatel schopný použít tento příkaz, musí disponovat oprávněním „booscooldowns.clearuses“, nebo být OP.
/booscooldowns clearwarmups
Tento příkaz slouží k vymazání všech aktivních warmupů hráče specifikovaného místo fráze .
35
Pokud tedy hráč Josef má jeden nebo několik aktivních warmupů na jeho příkazech, a oprávněný hráč použije příkaz „/booscooldowns clearwarmups Josef“, potom se hráči Josef veškeré aktivní warmupy smažou. Aby byl uživatel schopný použít tento příkaz, musí disponovat oprávněním „booscooldowns.clearwarmups“, nebo být OP.
/booscooldowns limits
Hráči mohou použít tento příkaz k zobrazení seznamu všech příkazů, které mají nastavený limit použití. Hráči se zobrazí pro každý příkaz zpráva, která obsahuje hodnotu limitu, dále kolikrát hráč již příkaz použil a také kolikrát ho ještě může použít. Každý hráč může volně využívat tento příkaz.
/booscooldowns set
Hráči oprávnění používat tento příkaz mají možnost nastavit jakékoli omezení na kterýkoli příkaz a také kteroukoli skupinu. označuje skupinu. Každá skupina může obsahovat neomezené množství příkazů a také se k ní váže oprávnění „booscooldowns.“. Je tedy možné jednotlivým hráčům, nebo skupinám hráčů přiřadit jinou skupinu tohoto pluginu a měnit tak omezení na jejich příkazech. označuje příkaz. Příkaz musí být ve formátu „/příkaz“, „/příkaz_parametr“, „/příkaz_*“, nebo „*“. Pokud je potřeba nastavení omezení na příkaz s parametry a mezerami, je nutné mezery nahradit podtržítkem. označuje hodnoty, které budou přiřazeny danému příkazu. Tyto hodnoty musejí být ve formátu „warmup,cooldown,cena,limit“ nebo ve formátu „warmup,cooldown,cena,limit,MAGICKYEFEKT,silaEfektu“. /booscooldowns set default /prikaz 5,10,0.0,-1,POISON,5
Tento příkaz tedy nastaví příkazu /prikaz ve skupine default 5 sekund warmup, 10 sekund cooldown, nulovou cenu, žádný limit a během 5 sekund warmupu bude hráč očarován efektem POISON se silou 5. Aby byl uživatel schopný použít tento příkaz, musí disponovat oprávněním „booscooldowns.set“, nebo být OP.
36
8.2.8 Použitelná oprávnění Plugin využívá oprávnění, která je možná v Permissions pluginu přiřadit hráčům a omezovat tak možnosti hráčů v ovládání pluginu.
booscooldowns.exception
Pro hráče s tímto oprávněním nebude plugin vůbec funkční. Nebude jej nijak limitovat a hráči nepůjdou ani nastavené aliasy. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.norestriction
Hráči s tímto oprávněním nebudou pluginem nijak omezováni, ovšem aliasy budou pro ně normálně fungovat. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.
Hráčům s tímto oprávněním je přidělena daná skupina omezení, pokud tato skupina existuje. Pokud skupina neexistuje, je hráčům přiřazena defaultní skupina. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.nocancel.move
Hráčům s tímto oprávněním nebude warmup rušen při pohybu. Toto platí, i pokud je možnost rušení warmupu při pohybu zapnuta. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.nocancel.damage
Hráčům s tímto oprávněním nebude warmup rušen při zranění. Toto platí, i pokud je možnost rušení warmupu při zranění zapnuta. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.nocancel.sneak
Hráčům s tímto oprávněním nebude warmup rušen při plížení. Toto platí, i pokud je možnost rušení warmupu při plížení zapnuta. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.nocancel.sprint
Hráčům s tímto oprávněním nebude warmup rušen při sprintu. Toto platí, i pokud je možnost rušení warmupu při sprintu zapnuta.
37
Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.nocancel.gamemodechange
Hráčům s tímto oprávněním nebude warmup rušen při změně herního módu. Toto platí, i pokud je možnost rušení warmupu při změně herního módu zapnuta. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.dontblock.interact
Hráčům s tímto oprávněním nebude během warmupu blokován přístup do kontejnerů. Toto platí, i pokud je možnost blokování přístupu do kontejnerů během warmupu zapnuta. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.noprice
Hráči, kteří mají toto oprávnění, jsou oproštěni od veškerých poplatků na všech příkazech. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.noprice./command:
Hráči, kteří mají toto oprávnění, jsou oproštěni od veškerých poplatků na příkazu, který je určen na konci oprávnění. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.nocooldown:
Hráči, kteří mají toto oprávnění, jsou oproštěni od veškerých cooldownů na všech příkazech. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.nocooldown./command:
Hráči, kteří mají toto oprávnění, jsou oproštěni od veškerých cooldownů na příkazu, který je určen na konci oprávnění. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.nowarmup:
Hráči, kteří mají toto oprávnění, jsou oproštěni od veškerých warmupů na všech příkazech. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.nowarmup./command:
Hráči, kteří mají toto oprávnění, jsou oproštěni od veškerých warmupů na příkazu, který je určen na konci oprávnění. Hráči nemají toto oprávnění defaultně přidělené.
38
booscooldowns.nolimit:
Hráči, kteří mají toto oprávnění, jsou oproštěni od veškerých limitů na všech příkazech. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.nolimit./command:
Hráči, kteří mají toto oprávnění, jsou oproštěni od veškerých limitů na příkazu, který je určen na konci oprávnění. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.reload:
Hráči, kteří mají toto oprávnění, mohou používat příkaz „/booscooldowns reload“ k tomu aby znovu načetli konfigurační soubor config.yml z disku do paměti. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.clear.uses.death:
Uživatelům, kteří mají toto oprávnění, jsou po smrti vymazány záznamy o použití příkazů a je jim znovu umožněno používat příkazy až do daného limitu. Tato funkce musí být aktivní v konfiguračním souboru. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.clear.cooldowns.death:
Uživatelům, kteří mají toto oprávnění, jsou po smrti vymazány veškeré cooldown časovače. Tato funkce musí být aktivní v konfiguračním souboru. Hráči nemají toto oprávnění defaultně přidělené.
booscooldowns.list.limits:
Uživatelé, kteří mají toto oprávnění, mohou použít příkaz „/booscooldowns limits“ k zobrazení veškerých limitovaných nebo zablokovaných příkazů včetně přesného nastaveného limitu a hodnoty kolikrát uživatel ještě může příkaz použít, než dosáhne limitu a příkaz se mu zablokuje. Uživatelé mají toto oprávnění defaultně přidělené.
booscooldowns.set:
Uživatelé, kteří mají toto oprávnění, mohou používat příkaz „/booscooldowns set“ k nastavení různých vlastností pluginu (více v kapitole o příkazech). Hráči nemají toto oprávnění defaultně přidělené.
39
8.3 Uživatelské rozhraní Plugin používá defaultní uživatelské rozhraní klienta hry Minecraft. Veškerá komunikace s uživateli probíhá pomocí chatového okna ve hře, které je možné vyvolat pomocí nastavené klávesy (defaultně klávesa T).
Obrázek 17: Chat okno hry Minecraft
Pro jakýkoli příkaz nastavený v konfiguraci pluginu je možné pozorovat následující zprávy:
zpráva pokud má příkaz nastavený warmup, zpráva pokud byl warmup přerušen aktivitou hráče,
zpráva pokud má příkaz nastavený cooldown,
zpráva pokud má příkaz nastavený poplatek,
zpráva pokud má příkaz nastavený limit,
další zprávy.
Po použití příkazu je možné pozorovat více než jednu z uvedených zpráv, pokud má použitý příkaz nastavené více než jedno omezení.
8.3.1 Warmup zprávy V případě warmupů je možné sledovat několik zpráv. První z nich je zpráva, že warmup časovač byl spuštěn, která obsahuje informace o tom, jaký příkaz byl použit a také čas, za který bude proveden efekt použitého příkazu.
Obrázek 18: Warmup zpráva informující o warmupu
40
Další možná zpráva obsahuje informace o tom, že pro použitý příkaz je již aktivní warmup časovač.
Obrázek 19: Warmup zpráva - warmup je již aktivní
Poslední zprávy týkající se warmupů jsou zprávy, které uživateli oznamují, že warmup časovač byl přerušen a efekt příkazu nebude proveden. Těchto zpráv je několik a liší se pouze v aktivitě, která časovač přerušila.
Obrázek 20: Warmup zpráva - přerušení warmupu
8.3.2 Cooldown zprávy Zpráva týkající se cooldownů je pouze jedna a zobrazí se ve chvíli, kdy se uživatel pokusí použít příkaz, který má aktivní cooldown časovač. Tato zpráva uživateli oznámí, že ještě není možné příkaz použít a také dobu, za kterou bude příkaz znovu použitelný.
Obrázek 21: Cooldown zpráva
8.3.3 Zprávy poplatků Zprávy poplatků jsou tři. První z nich se zobrazí, pokud uživatel použije zpoplatněný příkaz a disponuje požadovaným finančním obnosem. V tomto případě je uživatel informován o ceně příkazu a také o tom kolik financí mu zbylo.
Obrázek 22: Zpráva poplatků - zaplaceno
41
Další dvě zprávy se mohou zobrazit v případě, že hráč nemá dostatek financí, anebo nastane neočekávaná chyba ekonomického pluginu.
Obrázek 23: Zpráva poplatků - nedostatek financí
8.3.4 Zprávy limitů Pokud uživatel použije zablokovaný příkaz, nebo již příkaz dále nemůže použít, protože dosáhl limitu, zobrazí se mu chybová zpráva, která o této skutečnosti informuje.
Obrázek 24: Zpráva limitů - nelze použít příkaz
Uživatel také může použít příkaz k zobrazení veškerých limitů. Odpověď dostane ve formě seznamu limitovaných příkazů společně s nastaveným limitem a hodnotou kolikrát je možné příkaz ještě použít.
Obrázek 25: Zpráva limitů - seznam všech limitů
8.3.5 Další zprávy Další zprávy se týkají konfiguračních a kontrolních příkazů tohoto pluginu. Uživatel dostane odpověď v závislosti na použitém příkazu.
42
9 Závěr V rámci bakalářské práce byla provedena analýza světa počítačových her a následné zařazení hry Minecraft do tohoto svět. Dále byla provedena analýza základních vlastností této hry. Z analýzy základních vlastností vyplynuly problémy, se kterými se hráči a administrátoři často setkávají. Tyto nedostatky byly použity jako podklad pro návrh výsledné aplikace. Aplikace byla pojata jako plugin k jehož vývoji byl použit programovací jazyk Java, knihovna Bukkit a také plugin Vault. Vyvinutý plugin poskytuje administrátorům serverů kompletní řešení pro práci s příkazy na serveru. Umožňuje také odlišně limitovat různé skupiny hráčů a stává se tak velmi přínosným v odlišování hráčů, kteří přispěli na chod serveru či se jinak zasloužili k dobru serveru. Hráče plugin chrání hlavně před soupeřovým útěkem z boje pomocí teleportace. Hlavním faktorem pro přijetí pluginu uživateli je jednoduchost konfigurace, možnost lokalizace veškerých zpráv které plugin odesílá hráčům a kompletní možnosti práce s herními příkazy. Budoucí rozvoj aplikace by měl směřovat hlavně k aktualizacím pluginu pro nové verze hry Minecraft a knihovny Bukkit. Změna nebo i rozšíření funkčnosti závisí na analýze připomínek uživatelů tohoto pluginu, které je možné získat až po určité době užívání pluginu.
43
Literatura 1. Notch Development AB. Oficiální stránky hry Minecraft. [Online] 2009-2013. http://minecraft.net/. 2. Bukkit.org. O projektu Bukkit. [Online] 2013. http://forums.bukkit.org/pages/about-us/. 3. Minecube.cz. Oficiální stránky minecraft serveru MineCube. [Online] 2011-2013. http://www.minecube.cz/. 4. Wolf, Mark J. P. Genre and the Video Game. www.robinlionheart.com. [Online] 2000. http://www.robinlionheart.com/gamedev/genres.xhtml. 5. Arsenault, Dominic. Video Game Genre, Evolution and Innovation. eludamos.org. [Online] 2009. http://www.eludamos.org/index.php/eludamos/article/viewArticle/65/125. 6. MobyGames. Genre Definitions. MobbyGames. [Online] 1999-2013. http://www.mobygames.com/glossary/genres/. 7. Corporation, Rovi. Game Genres and Styles. allgame.inc. [Online] 2010. http://www.allgame.com/genres.php. 8. Microsoft. Oficiální stránky herní konzole Xbox360. [Online] 2013. http://www.xbox.com/cs-CZ. 9. Sony Computer Entertainment Europe. Oficiální stránky herní konzole Play Station 3. [Online] 2013. http://cz.playstation.com/ps3/. 10. Google. Oficiální stránky operačního systému Android. [Online] 2013. http://www.android.com/. 11. Apple Inc. Oficiální stránky operačního systému iOS. [Online] 2013. http://www.apple.com/cz/ios/. 12. Mojang AB. Oficiální stránky společnosti Mojang AB. [Online] 2010. http://mojang.com/. 13. Oracle. Oficiální stránky Java. [Online] 2013. http://java.com/. 14. Microsoft. Oficiální stránky operačního systému Windows. [Online] 2013. http://windows.microsoft.com/cs-cz/windows/home. 15. Apple Inc. Oficiální stránky operačního systému MacOS. [Online] 2013. http://www.apple.com/osx/. 16. BDcraft.net. Oficiální stránky texture packu Sphax pureBDcraft. [Online] 2011-2014. http://bdcraft.net/.
44
17. lishid. Oficiální stránky pluginu Orebfuscator. [Online] 2013. http://dev.bukkit.org/servermods/orebfuscator/. 18. Bukkit.org. Dokumentace API Bukkit. [Online] 2013. http://jd.bukkit.org/. 19. Sleaker, cerea1, mung3r. Officiální web pluginu Vault. [Online] 2013. http://dev.bukkit.org/server-mods/vault/. 20. http://mythcraft.dyndns.org/. Dokumentace pluginu Vault. [Online] 2013. http://mythcraft.dyndns.org/javadoc/vault/. 21. Sleaker. Zdrojový kód pluginu Vault. [Online] 2013. https://github.com/MilkBowl/Vault/. 22. PECINOVSKÝ, R. Návrhové vzory. Brno : Computer Press, 2007. 23. Gregory, Jason. Game Engine Architecture. místo neznámé : A K Peters, 2009. 24. Harbour, Jonathan S. Game Programming All in One. místo neznámé : Course Technology PTR, 2006.
45
Terminologický slovník Termín
Zkratka
Význam
Plugin
Zásuvný modul, rozšiřující hostitelský systém o svou funkčnost. [autor]
Warmup
Čas, který hráč musí počkat mezi použitím příkazu a samotným efektem příkazu. [autor] Čas, který hráč musí počkat mezi jednotlivými použitími příkazu. [autor] Označení pro funkci, která dokáže nahradit jeden příkaz jiným příkazem. [autor] Soubor metod a funkcí, které programátor může používat, chce-li využívat funkcionalitu programu jako knihovnu ve svém programu.
Cooldown Alias Application Programming Interface
API
46
Obsah přiloženého CD
Tento dokument ve formátu PDF
Projekt vytvořeného pluginu pro Eclipse
Zkompilovaný vytvořený plugin Zkompilovaný plugin Vault
Zkompilovaný plugin iConomy
Zkompilovaný plugin PermissionsEX
Serverový software serveru
Uživatelská dokumentace ve formátu PDF
47