• Řešení problémů, diskuze a jiné problémy přesunuty na Discord
    Fórum již není tak aktivní jako dříve, a tak jsme přesunuli skoro veškerou aktivitu na náš Discord. Může se tedy stát, že zde nedostaneš odpověď a budeš zcela ignorován. Discord invite link: Odkaz
Status
Uzamknuto, nelze přidávat odpovědi.

Dop1

Aktivní člen
Úvod:




Zdravím Vás u mých návodů v programování Spigot/Bukkit pluginů!
V minulém dílu jsme se naučili první příkaz se zprávou. Dnes se naučíme /setspawn a /spawn.
Doufám, že jsem tě mým návodem zaujmul a budeš mě sledovat i nadále. Budu se Vás snažit naučit programovat na profesionální úrovni.

Začátky pluginu:
Uděláme to samé, co minule. Vytvoříme si projekt na nás plugin a importujeme knihovny Spigotu.
Vytvoříme si package, v mém případě cz.dop.spawn.main a v ní classu Main.

Takto si upravíme classu. Vše, co se změnilo je vysvětlené v minulém díle.

Zdrojový kód:
		public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
			   
				if (!(sender instanceof Player)) {
						sender.sendMessage(ChatColor.RED + "Tento plugin je pouze pro hráče!");
						return true;
				}



Dále si napíšeme string player (p), string zobrazuje hráče, který odeslal příkaz (sender).
Zdrojový kód:
Player p = (Player) sender;
V metodě onEnable si vytvoříme Config pluginu. To uděláme pomocí getConfig() a následně saveConfig() pro uložení.

Zdrojový kód:
 public void onEnable() {
 
								Bukkit.getServer().getLogger().info("Plugin Spawn se zapnul!");
								getConfig();
								saveConfig();
}
Nyní si vytvoříme příkaz /setspawn, který bude zapisovat souřadnice spawnu do configu.
Zdrojový kód:
				if (cmd.getName().equalsIgnoreCase("setspawn")) {
						getConfig().set("spawn.world", p.getLocation().getWorld().getName());
						getConfig().set("spawn.x", p.getLocation().getX());
						getConfig().set("spawn.y", p.getLocation().getY());
						getConfig().set("spawn.z", p.getLocation().getZ());
						saveConfig();
						p.sendMessage(ChatColor.GREEN + "Spawn vytvořen!");
						return true;
				}
Je vám snad jasné, co kód dělá, ale stejně to vysvětlím. getConfig() načte config, poté setne informace, které příkaz zjistil pomocí p.getLocation() (zjistí polohu hráče, getWorld() (zjistí svět, v kterém je hráč), getName() (zjistí název světa, v kterém je.
Poté zjistí souřadnice a taktéž je zapíše pod sebe.

Nyní si vytvoříme příkaz /spawn, který bude získavat hodnoty z configu a pak hráče na ně portne.

Zdrojový kód:
				if (cmd.getName().equalsIgnoreCase("spawn")) {
						if (getConfig().getConfigurationSection("spawn") == null) {
								p.sendMessage(ChatColor.RED + "Spawn není setnut!");
								return true;
						}
						World w = Bukkit.getServer().getWorld(getConfig().getString("spawn.world"));
						double x = getConfig().getDouble("spawn.x");
						double y = getConfig().getDouble("spawn.y");
						double z = getConfig().getDouble("spawn.z");
						p.teleport(new Location(w, x, y, z));
						p.sendMessage(ChatColor.GREEN + "Vítej na spawnu!");
				}
				return true;
		}
Příkaz nejdříve hledá v configu sekci ,,spawn" a poté pokud tam není, tak vypíše text, který je k tomu určený.
Dále pomocí double načte souřadnice z configu.
Hráče portne na souřadnice pomocí p.teleport(new Location(w, x, y, z));
Takže vytvoří novou lokaci pro hráče a je na ní portnut.

Výsledný kód bude vypadat takto:
Zdrojový kód:
package cz.dop.spawn.main;
 
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
 
public class Main extends JavaPlugin {
		public void onEnable() {
				getConfig();
				saveConfig();
	   
		public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
			   
				if (!(sender instanceof Player)) {
						sender.sendMessage(ChatColor.RED + "Tento plugin je pouze pro hráče!");
						return true;
				}
			   
				Player p = (Player) sender;
			   
			   
				if (cmd.getName().equalsIgnoreCase("setspawn")) {
						getConfig().set("spawn.world", p.getLocation().getWorld().getName());
						getConfig().set("spawn.x", p.getLocation().getX());
						getConfig().set("spawn.y", p.getLocation().getY());
						getConfig().set("spawn.z", p.getLocation().getZ());
						saveConfig();
						p.sendMessage(ChatColor.GREEN + "Spawn setnut!");
						return true;
				}
			   
				if (cmd.getName().equalsIgnoreCase("spawn")) {
						if (getConfig().getConfigurationSection("spawn") == null) {
								p.sendMessage(ChatColor.RED + "Spawn není setnutý!");
								return true;
						}
						World w = Bukkit.getServer().getWorld(getConfig().getString("spawn.world"));
						double x = getConfig().getDouble("spawn.x");
						double y = getConfig().getDouble("spawn.y");
						double z = getConfig().getDouble("spawn.z");
						p.teleport(new Location(w, x, y, z));
						p.sendMessage(ChatColor.GREEN + "Vítej na spawnu!");
				}
				return true;
		}
}
Plugin.yml bude víceméně stejný, jen přepíšete názvy a nahradíte příkaz test příkazy setspawn a spawn.

Závěr:




Dnes jsme se naučili příkaz /spawn a /setspawn. Omlouvám se za chyby, které jsem tam neopatrností napsal :emoji_slight_smile:.
U dalšího návodu, ahoj!
 

Dop1

Aktivní člen
Předpokládané znalosti
Pokud chcete číst tento tutoriál, předpokládá se, že budete umět alespoň základy Objektového orientování (OOP) v Javě. Pokud ho aktuálně neumíte, více se o něm dozvíte zde na ITnetwork. V tutoriálu budu používat vývojové prostředí Eclipse (návod na instalaci).
A? Nespamuj mi to tu, konec diskuze :)
 

KaktusManCz

Velmi známý člen
Asi by bylo dobrý, napsat ať se lidé nejdříve naučí syntaxi a OOP v Javě. Případně znalost syntaxe C#, nebo jiných derivátů Céčka by měla stačit + chápat princip OOP, protože jinak budou akorát lidi slepě opisovat kód dva týdny a nakonec stejně nic neudělají.
EDIT: Ještě se taky hodí vyznat se v Eclipse, NetBeans, nebo jiným IDE.
 

Dop1

Aktivní člen
Asi by bylo dobrý, napsat ať se lidé nejdříve naučí syntaxi a OOP v Javě. Případně znalost syntaxe C#, nebo jiných derivátů Céčka by měla stačit + chápat princip OOP, protože jinak budou akorát lidi slepě opisovat kód dva týdny a nakonec stejně nic neudělají.
EDIT: Ještě se taky hodí vyznat se v Eclipse, NetBeans, nebo jiným IDE.
Podle mě je tedy Céčko těžší než Java, proto tam dopíšu, aby se naučili Javu. O Eclipse jsem psal v prvním díle.
 

KaktusManCz

Velmi známý člen
Podle mě je tedy Céčko těžší než Java, proto tam dopíšu, aby se naučili Javu. O Eclipse jsem psal v prvním díle.
Jasný, myslel jsem to jako že pokud někdo už umí Céčko, tak že by mu to mělo stačit k těm pluginům, i když neumí Javu.
 
Status
Uzamknuto, nelze přidávat odpovědi.
Top