luxDev | 2021-02-17 10:25:28 UTC | #1
Jednak tym razem postarałem się i kolejny poradnik napisałem troszkę szybciej niż zazwyczaj :stuckouttongue:
Ostatni poradnik: (#2 Klik)
Dzisiaj zajmiemy się dodaniem komendy /info
Zacznijmy od stworzenia nowej paczki klikając na naszą główną paczkę -> new -> Package nazwijmy ją commands, ja tworzę paczki od głównej aby fajnie się układały w kompilatorze powinno to wygladać w ten sposób, na samym końcu dodajemy kropkę i nazwę - .commands
Gdy stworzymy naszą paczkę stwórzmy nową klasę w niej, kliknij PPM -> new -> Class nazwij ją InfoCommand
Kiedy klasa będzie gotowa implementujemy CommandExecutor, importujemy oraz dodajemy nasz kawałek kodu od sprawdzania komendy:
@Override
public boolean onCommand(CommandSender sender, Command cmd, String arg, String[] args) {
return false;
}
teraz dodajmy tam co ma się wykonywać po wpisaniu komendy /info oraz sprawdźmy czy posiada ona wymagany argument 0 (czyli nick [w javie zaczynamy liczyć od 0 jako 1]), jeśli nie ma wyświetlimy poprawne użycie tej komendy.
a więc sprawdzanie czy komenda ma jakiś arugment odbywa się poprzez if(args.length == 0){
możemy używać tam wszystkiego co chcemy, aby uzyskać efekt który nas interesuje (< > ==) w tym przykładzie sprawdzam czy ilość argumentów jest zerowa, jeśli będzie to nie ma nic po /info.
Następnie wyślijmy wiadomość do gracza o poprawnym użyciu komendy, i zakończmy to standardowym return true
którego ja używam, jeśli ktoś pisał w Skript to żeby lepiej to zrozumieć działa to jak stop
Kod na razie wygląda następująco:
To co będę pisać w nastepnej linijce będzie zakładać że argument nick gracza istnieje, a więc weźmy ten nick z arguemntu i pobierzmy z niego gracza aby móc wysyłać do tego “argumentu” wiadomości itd :smile:
Player p = Bukkit.getPlayerExact(args[0]);
tym zdefinujemy sobię gracza z argumentu 0
Następnie sprawdzmy czy jest on na serwerze.
if(p == null){
sender.sendMessage("§7Gracz jest offline.");
return true;
}
Tym razem skróciłem sobie czas używając “§” zamiast ChatColor
Po kolejnym nawiasie klamrowym będziemy w domu, to znaczy że argument jest, gracz jest offline wszystko się zgadza - możemy wysyłać informacje na jego temat ;)
Mozliwości jest wiele:
To jest tylko przykład ale dorzucę kod:
sender.sendMessage("Nick gracza: " + p.getName());
sender.sendMessage("Poziom glodu gracza: " + p.getFoodLevel());
sender.sendMessage("Poziom HP gracza: " + p.getHealth());
sender.sendMessage("Moze latac: " + p.getAllowFlight());
sender.sendMessage("Tryb gry: " + p.getGameMode());
sender.sendMessage("Adres IP: " + p.getAddress().getAddress().getHostAddress());
sender.sendMessage("Przedmiot w rece: " + p.getItemInHand().getType());
Co do przedmiotu w ręce, jeśli nie ma nic, wyświetli się AIR, co do latania jeśli może wyswietli się true, jesli nie false.
Nie zapomnijmy pokazać pluginowi podczas ładowania że komenda “/info” znajduje się w klasie InfoCommand - przechodzimy do klasy Main, i dodajemy w onEnable getCommand("info").setExecutor(new InfoCommand());
Nie zapomnij o importach, oraz dodaj też tą komende w plugin.yml tak jak w ostatnim poradniku.
Klasa Main: Kliknij na mnie po kodzik :)
Klasa InfoCommand:Kliknij na mnie po kodzik :)
Plugin.yml: Kliknij na mnie po kodzik :)
Od dziś wrzucam kod na pastebin, co by popatrzeć i ewentualnie skopiować w razie problemów.
Będę się starał wrzucać tematy z tej serii coraz częściej, jednak niczego nie obiecuję na 100%
Dałbyś “like” za poświęcony czas co? :smile: (Około +/- ponad 1h.)
Jeśli o czymś zapomniałem czekam na komentarze :P
Do zobaczenia w następnym poradniku.
RabbitTheDEV | 2018-01-01 17:04:59 UTC | #2
Bzdury.
luxDev | 2018-01-01 18:53:05 UTC | #3
Zastanawiam się czy to żart, rejestrujesz się specjalnie na forum aby tylko coś wysmarować..
Jakieś 85% tego co napisałeś nie ma sensu, bądź są to tylko twoje pomysły które powinieneś zachować dla siebie.
Mogę jedynie powiedzieć że to co wymieniłeś dokładniej: 9, 8 ma sens.
DoreK | 2018-01-01 19:46:00 UTC | #4
:thinking:
To raczej jakiś żart.
anon10657637 | 2018-01-01 20:06:02 UTC | #5
Cześć, widzę że zawitałeś na to cudowne forum! Cieszę się z Twojej obecności, mam nadzieję że nią będziesz emanował częściej. Ale pora na konkret:
[quote=”RabbitTheDEV, post:2, topic:1619”]
Nie “paczka” tylko pakiet.
[/quote]
+1
[quote=”RabbitTheDEV, post:2, topic:1619”]
Naucz się korzystać z metod, utilsów, a nie ciągłe ChatColor lub co gorsza paragrafy.
[/quote]
Paragrafy - racja. Reszta sprzeciw, programista tworzy kod i rozwija w dogodny dla siebie i społeczności sposób. W założeniu powinno mu się ufać i respektować jego decyzję. Jak woli tak to robić, to w tym kodzie należy się do tego dostosować.
[quote=”RabbitTheDEV, post:2, topic:1619”]
Używaj intelki i mavena.
[/quote]
To czego używa człowiek, zależy od człowieka - IDE to kwestia indywidualna. Natomiast Maven nie jest obowiązkowy, zwłaszcza w typowo małym projekcie - takich zabawek używa się na większa skalę i przy większej ilości osób. Wtedy można rozważyć inne alternatywy - Ivy, Ant, Gradle, czy chociażby wieloplatformowy Bazel ;)
[quote=”RabbitTheDEV, post:2, topic:1619”]
Nie tylko podczas ładowania dodaje się getCommand… ale można również podczas uruchamiania pluginu (Zalecane). Na dodatek nie wskazujemy gdzie znajduje się komenda lecz ustawiamy dla niej executor’a.
[/quote]
I tak i nie - tutaj można robić wieloma sposobami, jednak oficjalnie powinno się robić całość za pośrednictwem CommandExecutora ;)
[quote=”RabbitTheDEV, post:2, topic:1619”]
Komendy w plugin.yml są źle wytabowane
[/quote]
SnakeYAML ma do tego walidacje i wszystko ogarnie (bynajmniej tak na najnowszych wersjach jest).
[quote=”RabbitTheDEV, post:2, topic:1619”]
Nie podajemy wersji 0.0.0 - jest to idiotyczne.
[/quote]
Podane przykładowo, to widać.
[quote=”RabbitTheDEV, post:2, topic:1619”]
Nie używamy polskich znaków.
[/quote]
We wiadomościach - czemu niby nie? W reszcie (klasy, komentarze etc.) wg. konwencji - czyli po angielsku. Zależy też od projektu - mnie ostatnio klient poprosił bym mu zrobił Javadocsy po polsku :stuckouttongue:
[quote=”RabbitTheDEV, post:2, topic:1619”]
Nie używamy System.out.println… - w ten sposób wysyłamy wiadomość do JVM. Korzystamy z loggera - this.getLogger().info(“Plugin has been enabled!”);
[/quote]
+1
[quote=”RabbitTheDEV, post:2, topic:1619”]
Sprawdzanie (cmd.getName().equalsIgnoreCase(“”)); jest idiotyczne skoro nie mamy dwóch komend oraz wiemy jaką komendę przypisujemy.
[/quote]
W zasadzie na jedną komendę powinien być jeden executor - dla klarowności.
[quote=”RabbitTheDEV, post:2, topic:1619”]
Importy nie są trudne… polecam CTRL + SHIFT + O
[/quote]
Zależy od IDE.
[quote=”RabbitTheDEV, post:2, topic:1619”]
Code-style na poziomie zerowym.
[/quote]
+1
Btw. @RabbitTheDEV - podrzuć jakieś przykładowe prace, a najlepiej profil na GitHub’ie. Chciałbym na to i owo rzucić oko :stuckouttongue:
luxDev | 2018-01-01 20:14:19 UTC | #6
A i jeszcze to:
[quote=”RabbitTheDEV, post:2, topic:1619”]
Używaj intelki i mavena
[/quote]
Poradnik był robiony rok temu.. więc nie wiem o co ci chodzi z tym IDE jesteś jasnowidzem? wiesz czego używam?
Tak samo styl kodu i ogólnie :)
Tylko spokojnie, nikt tutaj nikogo nie próbuje atakować.
RabbitTheDEV | 2018-01-01 20:37:55 UTC | #7
@anon10657637
Cześć Kacper, jak może zauważyłeś jestem nowy na tym forum. Na discordzie FG jestem od około tygodnia, jeśli masz chęć to zapraszam na pogaduszki :)
@luxDev
Nie zarejestrowałem się aby cię ośmieszyć, daję ci podstawowe rady które powinieneś znać, a dopiero później zabierać się za nauczanie kogoś. Forum to spodobało mi się więc na szczęście (lub dla niektórych nie :stuckouttongue:) będę się udzielał.
Timo | 2018-01-01 20:44:01 UTC | #8
W takim razie przywitaj się z nami tworząc temat w #przywitania oraz przeczytaj Regulamin :D
Jasu | 2020-05-26 10:38:35 UTC | #9
Będzie ten następny poradnik?
logixdev | 2020-05-26 11:32:19 UTC | #10
Ostatnia aktualizacja ponad trzy lata temu i wiele z tych rzeczy już jest nieaktualnych (łącznie z polecaniem Eclipse jako IDE - są lepsze alternatywy jak IntelliJ czy nazewnictwo klas nie do końca poprawne). Warto zacząć od nauki samych podstaw języka Java, obiektowości, potem na bazie tej wiedzy, czytania i rozumienia Bukkit API zacząć pisać. Takie absolutne podstawy i kilka gotowych metod jest tutaj. Dobry kurs Javy (niestety płatny) jest dostępny tu.
system | 2021-02-17 10:31:47 UTC | #11
Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.