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í.

1. diel - Úvod, prvý príkaz a správa

Vitajte u môjho prvého tutoriálu o tvorbe pluginov pre hru Minecraft (konkrétne server spigot). V tejto sérii budeme preberať základy (tvorbu príkazov) a pokročilejšie návody (minihry) o vytváranie pluginov.

Predpokladanej vedomosti

Pokiaľ chcete čítať tento tutoriál, predpokladá sa, že budete vedieť aspoň základy objektového orientovanie (OOP) v Jave. Pokiaľ ho aktuálne neviete, viac sa o ňom dozviete tu na ITnetwork. V tutoriále budem používať vývojové prostredie Eclipse ( návod na inštaláciu).

Plugin vs. mód

Na začiatok si ujasníme, aký je rozdiel medzi pluginom a módom. Často počujete termíny "spigot" a "Forge". Tvorba módu je vlastne tvorba obsahu pre hru (tj. Nové kladivo, ...) a využíva sa Forge API ( tutorial nájdete tu na ITnetwork).

Plugin je oproti tomu nová funkcionalita (napr. Aby hra na niečo reagovala, pridanie novej minihry, a pod.) A budeme ich tvoriť pre Minecraftový server spigot s využitím ich API.

Prvý pokus

V našom prvom kóde si popíšeme základné metódy spigot a urobíme si tiež prvý príkaz. Čo budeme potrebovať? Budeme potrebovať importovať knižnice spigot do nášho projektu. Čím začneme? Založíme si nový projekt pod názvom Test, zvolíme si Javu 8 či 7, to iste už poznáte :-) . Odporúčam dať najnovšie Javu.

Máme založený projekt a ďalším krokom bude:

  1. Klikneme pravým na projekt Test
  2. Zvolíme možnosť Properties, zobrazí sa nám okno
  3. V tomto okne prejdeme na Java Build Path
  4. V poslednom rade hore prejdeme na Libraries
  5. Po pravej strane sa nachádza Add External JARs
  6. Otvorí sa nám adresár, my zvolíme API spigot, ktorý si stiahneme zo stránky https://tcpr.ca/...loads/spigot

Skvele, dáme OK a máme v našom projekte k dispozícii API spigot (knižnice). My postúpime ďalej a vytvoríme si balíček a pomenujeme si ho, ako sa nám zachce. Do tohto balíka si vytvoríme triedu, ktorú si opäť pomenujeme podľa nás. Ja jej vždy dávam názov Main alebo Core, pretože má vyjadrovať hlavnú triedu. Máme teda niečo také:

package cz.pandap.test;

public class Main {

}

Potrebujeme dediť metódy spigot a povedať hlavnej triede, že práve toto je hlavná trieda (trochu paradox :-)) . Urobíme to jednoducho:

package cz.pandap.test;

public class Main extends JavaPlugin {

}

Áno, urobíme to pomocou triedy JavaPlugin (trieda od spigot) a to tým že jej zdedíme. Teraz by sme určite chceli, aby to niečo robilo, že? Čo tak skúsiť niečo vypísať do konzoly, keď zapneme a vypneme server? :-) Taktiež to urobíme jednoducho a to v dvoch krokoch, prvýkrát si napíšeme jednu povinnú a jednu nepovinnú metódu to tejto triedy:

package cz.pandap.test;

public class Main extends JavaPlugin {

    public void onEnable() {

    }

    public void onDisable() {

    }
}

Metóda onEnable () sa volá, keď sa server zapína a táto metóda je pre plugin povinná, teda nesmieme jej vynechať, pretože by nám server plugin nespustil. Metóda onDisable () sa volá, keď sa server vypína a táto metóda je nepovinná. Teraz si zorganizujeme správy, ktoré budeme chcieť vypisovať pri zapnutí a vypnutí do konzoly.

package cz.pandap.test;

public class Main extends JavaPlugin {

    public void onEnable() {
        Bukkit.getServer().getLogger().info("Plugin Test se zapnul!");
    }

    public void onDisable() {
        Bukkit.getServer().getLogger().info("Plugin Test se vypnul!");
    }
}

Áno, ako ste zistili, je to veľmi jednoduché! Pre koho nie, tak to teda vysvetlím. Voláme metódu info (), ktoré má svoj argument typu String. Týmto reťazcom je práve správa, ktorá sa vypíše pri spustení. Nie je to zatiaľ nič ťažké, čo myslíte? Teraz by sme mohli vytvoriť nejaký príkaz. Príkaz sa robí pomocou metódy, ktorá má 4 argumenty. Je to opäť úplne jednoduché. Samozrejme u namáhavejších príkaze to už tak ľahké nebude ... K tomu ale až v ďalších dieloch :-)

package cz.pandap.test;

public class Main extends JavaPlugin {

    public void onEnable() {
        Bukkit.getServer().getLogger().info("Plugin Test se zapnul!");
    }

    public void onDisable() {
        Bukkit.getServer().getLogger().info("Plugin Test se vypnul!");
    }

    public boolean onCommand(CommandSender sender, Command cmd, String labels, String[] args) {
        return false;
    }
}

Návratová hodnota boolean z toho dôvodu, že sa môže vykonať, ale tiež nemusí a argumenty sú z dôvodu, aby sa vám dobre definoval hráč. Príklad: send message Pandap968 zpráva

Tento príkaz obsahuje 3 argumenty, nezapočítavajú samotný príkaz send. Tomuto sa teda hovorí argumenty v príkaze. V našej metóde je to pod názvom args. Zatiaľ máme iba metódu, ktorá príkaz vyvolá, my musíme vymyslieť samotné jadro príkazu (čo to urobí). Teraz potrebujeme overiť, či príkaz neposiela niekto iný ako hráč. Samozrejme to môže byť naopak alebo tiež vôbec, ale my to zatiaľ chceme takto:

package cz.pandap.test;

public class Main extends JavaPlugin {

    public void onEnable() {
        Bukkit.getServer().getLogger().info("Plugin Test se zapnul!");
    }

    public void onDisable() {
        Bukkit.getServer().getLogger().info("Plugin Test se vypnul!");
    }

    public boolean onCommand(CommandSender sender, Command cmd, String labels, String[] args) {
        if (!(sender instanceof Player)) {
            sender.sendMessage("Konzole nemůže vykonat tento příkaz!");
            return true;
        }

        return false;
    }
}

Takto napíšeme podmienku, či sender (odosielateľ) nie je inštancií hráča. Ak to platí, vypíše sa nám správa o tom, že konzola nemôže vykonať tento príkaz. Konzola píšem rovno, pretože nikto iný ako konzola alebo hráč ani príkaz odoslať nemôže. Podmienku máme hotovú, ale stále nemáme samotný príkaz:

package cz.pandap.test;

public class Main extends JavaPlugin {

    public void onEnable() {
        Bukkit.getServer().getLogger().info("Plugin Test se zapnul!");
    }

    public void onDisable() {
        Bukkit.getServer().getLogger().info("Plugin Test se vypnul!");
    }

    public boolean onCommand(CommandSender sender, Command cmd, String labels, String[] args) {
        if (!(sender instanceof Player)) {
            sender.sendMessage("Konzole nemůže vykonat tento příkaz!");
            return true;
        }

        Player player = (Player) sender;

        if (cmd.getName().equalsIgnoreCase("test")) {
            player.sendMessage("Toto se vykoná, když hráč napíše příkaz test!");
        }

        return false;
    }
}

Áno predposledný fázy, než plugin pôjde spustiť na reálnom serveri. Nadefinovali sme si premennú player, inštanciu triedy Player. Teraz máme podmienku, ktorá proste takto bude a nikto ju nemôže nejako ovplyvniť (samozrejme okrem vývojárov spigot : @ ). Musíme si ju zapamätať. Táto podmienka značí to, že ak hráč napíše príkaz test, vykoná sa nejaká akcia. V tomto prípade tou akciou je, že premenné player sa odošle správa.

Plugin máme hotový! Ale pozor, nesmieme ešte zabudnúť na jeden súbor menom plugin.yml, ktorý nám udáva informácie o pluginu (meno, príkazy, verziu, hlavnú triedu, ...). Vytvoríme si ho a naša podoba bude nasledujúce:

name: Test
main: cz.pandap.test.Main
version: 1.0

commands:
  test:

Urobil som taktiež menšie tabuľku popisu:

Názov funkcia
name Názov pluginu, bude sa zobrazovať v hre / konzole
main Cesta k hlavnej triede pluginu, popisovali sme si
version Verzia pluginu, môžeme napísať, čo sa nám zachce
commands Príkazy, píšeme pod seba
Plugin skompilujeme. Urobíme to nasledujúcim spôsobom:
  1. Klikneme pravým na náš projekt
  2. Zvolíme možnosť Export
  3. Otvoríme okno, kde zvolíme možnosť Java a JAR File
  4. Teraz len zvolíme cestu, kde sa nám súbor JAR uloží
  5. klikneme Finish
  6. Gratulujem! Máte vyhraté!

Nahranie pluginu na server

Ak máme skompilovaný plugin, chceme ho určite niekde nahrať. Počítam s tým, že máte už pripravený server. Ak nemáte, na internete sú o tom stovky návodov. Po zapnutí servera máme v hlavnom adresári zložku plugins, do tejto zložky prejdeme a pretiahneme tu náš JAR súbor. Keď už máme plugin nahraný do tejto zložky, resetujeme server alebo napíšeme do chatu / konzoly príkaz / reload. Odporúčam resetovať server, je to bezpečnejšie. :-)

Tu máme ukážku, čo sa nám zobrazia po spustení:

Tvorba pluginov pre spigot

Čo sme sa naučili?

V tomto diele sme sa naučili, ako používať a definovať príkaz a správy.

Záver

Toto by bolo všetko k tomuto prvom dieli, v budúcom diele by sme pokračovali v príkazoch a argumentoch. Ďakujem za prečítanie! V prípade problémov sa obráťte do komentárov!


 

Všetky články v sekcii
Tvorba pluginov pre spigot
Preskočiť článok
(neodporúčame)
Viac o príkazoch a farby
Článok pre vás napísal PandaP968
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se zabývá programováním v Javě. Většinu času programuje pluginy pro Minecraft servery.
Aktivity