5. diel - Dynamická konfigurácia a práva (MOTD)
V minulej lekcii, Prvý event a konfigurácia (MOTD) , sme si ukázali ako základni používať konfiguráciu a event na pripojenie hráča. Dnes budeme pokračovať v konfigurácii.
Čo dnes budeme tvoriť?
Pozrieme sa, ako upravovať konfiguráciu z hry. Vytvoríme príkaz / motd, Vyhlasujúca aktuálne MOTD z konfigurácie, funkcií / setmotd budeme môcť nastaviť nový MOTD, ktorý sa automaticky prepíše. Využijeme práva, aby nemohol využívať tieto príkazy každý. Pre príkaz / setmotd sa v článku pozastavíme, pretože bude komplikovanejšie.
Príkaz pre vypísanie MOTD (/ motd)
Aktuálny kód vyzerá takto:
public class MOTD extends JavaPlugin implements Listener { public void onEnable() { Bukkit.getServer().getLogger().info("Plugin MOTD se zapnul!"); Bukkit.getServer().getPluginManager().registerEvents(this, this); getConfig().options().copyDefaults(true); saveConfig(); } public void onDisable() { Bukkit.getServer().getLogger().info("Plugin MOTD se vypnul!"); } @EventHandler public void onJoin(PlayerJoinEvent event) { Player p = event.getPlayer(); p.sendMessage(ChatColor.GREEN + getConfig().getString("message")); } }
Vytvoríme si metódu pre vytvorenie príkazu / motd:
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { if (cmd.getName().equalsIgnoreCase("motd")) { return true; } return false; }
Použili sme metódu pre vytvorenie príkazu OnCommand (), ktorú iste bezpečne už poznáme, spravidla vraciame false. V metóde vytvárame samotný príkaz pomocou podmienky. Vraciame hodnotu true, pretože pridáme do tohto príkazu vrátenia MOTD textu z konfigurácie.
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { if (cmd.getName().equalsIgnoreCase("motd")) { sender.sendMessage(ChatColor.RED + "MOTD: " + getConfig().getString("message")); return true; } return false; }
Odosielateľovi príkazu vrátime správu, ktorá obsahuje MOTD. Všimnite si, že sme použili novú metódu getString () nadväzujúce na metódu getConfig (), ktorú poznáme zo 4. tutoriálu. Metóda getString () vráti text z konfigurácie pod príslušným názvom - argument metódy getString (). My máme MOTD v konfigurácii uloženej už pod spomínaným názvom message. Skompilujeme, nahráme na server a príkaz vyskúšame, či funguje. Nezabudneme zapísať príkaz do súboru plugin.yml.
Skvele! Plugin funguje, príkaz taktiež. Teraz prejdeme na ťažšie časť, tvorbu príkazu pre nastavenie nového MOTD z hry a aplikáciu práv.Príkaz pre nastavenie nového MOTD (/ setmotd <nová správa>)
Opäť si založíme nové jadro pre príkaz, ktorý implementujeme do existujúce metódy OnCommand ().
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { if (cmd.getName().equalsIgnoreCase("motd")) { sender.sendMessage(ChatColor.RED + "MOTD: " + getConfig().getString("message")); return true; } if (cmd.getName().equalsIgnoreCase("setmotd")) { return true; } return false; }
Nevšímaj si príkazu / motd, sústreďme sa teraz na príkaz / setmotd (Kód je tu celý úmyselne, aby sme sa nestratili). Do príkazu zakomponujeme pár podmienok, aby sme predišli chybám hráčov pri písaní príkazu. Pokiaľ hráč napíše iba príkaz / setmotd, tak ho plugin upozorní na túto skutočnosť. Základné prácu s argumentmi poznáme už z 3. tutoriálu.
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { if (cmd.getName().equalsIgnoreCase("motd")) { sender.sendMessage(ChatColor.RED + "MOTD: " + getConfig().getString("message")); return true; } if (cmd.getName().equalsIgnoreCase("setmotd")) { if (args.length == 0) { sender.sendMessage(ChatColor.RED + "Spatne argumenty! /setmotd <motd>"); return true; } return true; } return false; }
V tomto prípade, ak odosielateľ nespĺňa argumenty, tj. Napísal iba / motd, server odosielateľa upozorní. Využijeme novú metódu hasPermission (). Táto metóda môžeme používať na inštanciu tried CommandSender a Player. Využíva sa, ak chceme povoliť príkaz či inú funkciu skupine užívateľov, ktorí majú Permissi vyjadrenú v argumentu tejto metódy. Náš algoritmus bude nasledujúci - ak hráč nemá danej oprávnenie, vypíše sa mu upozornenie, ak toto oprávnenie má, podmienka sa bude ignorovať.
if (cmd.getName().equalsIgnoreCase("setmotd")) { if (!sender.hasPermission("motd.set")) { sender.sendMessage(ChatColor.RED + "Na tuto akci nemas opravneni!"); return true; } if (args.length == 0) { sender.sendMessage(ChatColor.RED + "Spatne argumenty! /setmotd <motd>"); return true; } return true; }
Zopakujeme si trochu OOP Javy. Pokiaľ hráč napíšeme pred správu napr. 100 medzier, musí sa správa nastaviť do konfigurácie bez zbytočných medzier. Využijeme triedu StringBuilder a cyklus, ktorý na String aplikuje metódu append () odstraňujúca zbytočné medzery.
if (cmd.getName().equalsIgnoreCase("setmotd")) { if (!sender.hasPermission("motd.set")) { sender.sendMessage(ChatColor.RED + "Na tuto akci nemas opravneni!"); return true; } if (args.length == 0) { sender.sendMessage(ChatColor.RED + "Spatne argumenty! /setmotd <motd>"); return true; } StringBuilder builder = new StringBuilder(); for (int i = 0; i < args.length; i++) { builder.append(args[i] + " "); } return true; }
Premennú builder prevedieme späť do objektového dátového typu String.
if (cmd.getName().equalsIgnoreCase("setmotd")) { if (!sender.hasPermission("motd.set")) { sender.sendMessage(ChatColor.RED + "Na tuto akci nemas opravneni!"); return true; } if (args.length == 0) { sender.sendMessage(ChatColor.RED + "Spatne argumenty! /setmotd <motd>"); return true; } StringBuilder str = new StringBuilder(); for (int i = 0; i < args.length; i++) { str.append(args[i] + " "); } String motd = str.toString(); return true; }
Na koniec bloku využijeme metódu set (), nadväzujúce na metódu getConfig (). Prvým argumentom tejto metódy je názov objektu a druhým argumentom nový text či podmienka do tohto objektu. Vždy potrebujeme po nejakej zmene konfiguráciu uložiť pomocou metódy saveConfig (), ktorú bezpečne poznáme. Aby sme upozornili odosielateľa na zmenu, môžeme vypísať správu do chatu.
if (cmd.getName().equalsIgnoreCase("setmotd")) { if (!sender.hasPermission("motd.set")) { sender.sendMessage(ChatColor.RED + "Na tuto akci nemas opravneni!"); return true; } if (args.length == 0) { sender.sendMessage(ChatColor.RED + "Spatne argumenty! /setmotd <motd>"); return true; } StringBuilder str = new StringBuilder(); for (int i = 0; i < args.length; i++) { str.append(args[i] + " "); } String motd = str.toString(); getConfig().set("message", motd); saveConfig(); sender.sendMessage(ChatColor.RED + "MOTD: " + motd); return true; }
Čo sme sa naučili?
V tomto diele sme sa naučili, ako prenastaviť konfiguráciu z hry, ako používať príkaz a zároveň konfiguráciu. Využili sme nové metódy pre správu pluginu.
Záver
Toto by bolo všetko k tomuto piatemu dielu. V budúcom diele by sme sa pozreli na teleportáciu hráčov. Zdrojový kód je k stiahnutiu v prílohe. Ďakujem za prečítanie! V prípade problémov sa obráťte do komentárov alebo do správ!
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 26x (1.29 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java