luxDev | 2021-02-17 10:25:33 UTC | #1
Kontynuuję serię, jednak po długim czasie bo cięzko jest wszystko objaśnić w temacie, zawsze mogę czegoś zapomnieć i źle zrozumiecie, oraz kosztuje to dużo czasu (z ssami) mam nadzieję że robię to dla kogoś a nie tylko dla siebie, chodź na pewno dużo osób się znajdzie.
Ostatni poradnik: (#1 Klik)
W tym poradniku zajmiemy się pierwszą komendą będzie to prawdopodobnie “/czesc” bez Polskich znaków, która będzie odsyłac nam Cześć + nasz nick.
Przechodzimy do projektu, i po extends JavaPlugin
dodajemy implements CommandExecutor
ma to wyglądać tak
public class Main extends JavaPlugin implements CommandExecutor {
Main to oczywiście nasza główna klasa w której aktualnie pracujemy.
Prawdopodobnie znów masz błąd na CommandExecutor jeśli pamiętasz z ostatniego poradnika wystarczy na niego najechać i kliknąc pierwszy import :) lub standardowo CTRL + SHIFT + O
Następnie musimy dodać w onEnable(){
getCommand("czesc").setExecutor(this);
to pokaże gdzie pluginowi że w tej klasie znajduje się ta komenda.
oraz w plugin.yml commands: [enter] [dwie spacje] czesc:
Kolejnym krokiem będzie dodanie metody onCommand
@Override
public boolean onCommand(CommandSender sender, Command cmd, String arg, String[] args){
return false;
}
CommandSender to jest ten co wysyła wiadomość a sender to po prostu skrócona nazwa której będziemy używać aby dotrzeć do metod z jego klasy np. sender.getName(); możesz to zamienić na np. gracz - gracz.getName();
Command cmd oznacza tą komendę którą możemy potem używać do porównywania rzeczy itd.
args[] to są argumenty o których więcej w następnym poradniku np. /czesc to ja
To jest metoda dzięki której będziemy mogli kontrolować co się stanie po wpisaniu danej komendy, aby dodać komende “czesc” dodajemy if(cmd.getName().equalsIgnoreCase("czesc")){
aby odesłać wiadomość do gracza wpisujemy sender.sendMessage("Czesc" + sender.getName());
możemy też z kolorkiem amatorskim sposobem ale szybkim jest użycie znaku “§” zamiast “&” lub też ChatColor
Wiadomość na zielono będzie wyglądać w ten sposób sender.sendMessage(ChatColor.GREEN + "Czesc" + sender.getName());
Całość wygląda w ten sposób:
Oby się nie okazało że zapomniałem o czymś :smile: szczególnie w onCommand bo z pamięci :stuckouttongue:
Timo | 2016-12-28 21:29:09 UTC | #2
Dla początkujących plugino-pisarzy przydatne :smiley:
Z drugiej strony, prezentujesz to samo co rzekomo znienawidzony Kamilkime, nawet tą samą komendę. (kilka osób go nie lubi, nie wiem czemu)
luxDev | 2016-12-28 22:11:34 UTC | #3
Próbuję jakoś powoli przedstawić samo API, jednak przed pisaniem pluginów powinno sie znać te podstawy Javy.
Marcoral | 2016-12-28 22:58:51 UTC | #4
Kamilkime wiele rzeczy tłumaczy za szybko, a na końcu filmiku nierzadko kod nie działa, a on szuka, notabene oczywistego, błędu. Dużo łatwiej będą tu miały osoby, które znają język angielski - zagranicznych poradników, w porównaniu do tych w ojczystym języku, jest duuuużo więcej i o ile nie piszemy czegoś w stylu MaRPG to znajdziemy większość tego, co nas interesuje :D
luxDev | 2016-12-28 23:54:36 UTC | #5
Jeszcze kiedyś zdarzyło mi się go oglądać, zawsze mnie to denerwowało że za szybko tłumaczy, i rzeczywiście mało, wgl. moim zdaniem nie powinno się wchodzić do Bukkita jeśli się nie zna podstaw samej Javy, szybko się możesz zniechęcić.
A jeśli ktoś to czyta i chcę ogarnąć to zapraszam http://javastart.pl/ :smile:
anon82750602 | 2016-12-29 13:30:14 UTC | #6
Oczywiście komendę można przenieść do innej klasy aby nie robić już syfu ;p
getCommand("czesc").setExecutor(new CmdCzesc());
luxDev | 2016-12-29 18:55:01 UTC | #7
Nie mieszaj okej ?
koweq | 2016-12-29 19:43:00 UTC | #8
A jak zrobić 2 lub więcej komend?
Karolek | 2016-12-30 00:23:34 UTC | #9
A czemu nie zrobić tego prościej z pominięciem plugin.yml?
luxDev | 2016-12-30 00:52:14 UTC | #10
Bo to poradnik dla tych co dopiero totalnie zaczynają z Bukkitem?
Marcoral | 2016-12-30 13:13:23 UTC | #11
Często jak czytam Twoje posty, to mam wrażenie, że chcesz jedynie zabłysnąć wiedzą, niewiele wnosząc do tematu.
Z tego, co się orientuję bez plugin.yml można zrobić to na dwa sposoby: używając PlayerCommandPreProcessEvent lub rejestrując komendę w SimpleCommandMap. W pierwszym przypadku nasza komenda nie będzie kompatybilna z innymi pluginami, w drugim zaś nie będzie kompatybilna z innymi wersjami silnika (dopóki nie użyjemy refleksji, a co do “prostoty” tego rozwiązania nie ma wątpliwości). Wsparcie dla komend w plugin.yml nie powstało bez powodu - jest to bowiem najprostszy sposób ich rejestrowania :)
Karolek | 2016-12-30 13:30:57 UTC | #12
[quote=”Marcoral, post:11, topic:1583”]
Wsparcie dla komend w plugin.yml nie powstało bez powodu - jest to bowiem najprostszy sposób ich rejestrowania
[/quote]
[quote=”luxDev, post:10, topic:1583, full:true”]
Bo to poradnik dla tych co dopiero totalnie zaczynają z Bukkitem?
[/quote]
A potem jest masa postów na forum czemu mi komenda nie działa, a okazuje się, że nie dodaliśmy komendy do plugin.yml ;)
[quote=”Marcoral, post:11, topic:1583”]
używając PlayerCommandPreProcessEvent
[/quote]
Coś takiego się stosuje? :open_mouth:
[quote=”Marcoral, post:11, topic:1583”]
rejestrując komendę w SimpleCommandMap
[/quote]
[quote=”Marcoral, post:11, topic:1583”]
nie będzie kompatybilna z innymi wersjami silnika
[/quote]
Będzie kompatybilna z wersjami silnika, bo to jest domyślnie w bukkicie a nie nms czy craftbukkit.
Zresztą - jest masa innych frameworków do komend, które mają dużo większe możliwości i są dużo prostsze w obsłudze.
[quote=”Marcoral, post:11, topic:1583”]
Często jak czytam Twoje posty, to mam wrażenie, że chcesz jedynie zabłysnąć wiedzą, niewiele wnosząc do tematu.
[/quote]
Uwierz mi, że mam identycznie jak czytam Twoje wypociny, związane szczególnie z tym śmiesznym rpg ;) Ale co ja tam wiem ;) Pis joł :>
luxDev | 2016-12-30 13:33:03 UTC | #13
Nie róbcie z tego miejsca drugiego MPC proszę was! opanujcie sie, nikt nie chce zabłysnąc ale pokazać inny sposób, a to jest mój poradnik od początku do końca więc ja go będę prowadził a nie wy okej?
Karolek | 2016-12-30 13:44:21 UTC | #14
Ja tam dałem tylko swoją opinię na temat komend. :)
anon10657637 | 2016-12-30 13:51:30 UTC | #15
Ogółem nie wiem o co shitstorm.
W głównej mierze po coś jednak ten plugin.yml powstał, i używanie jego jak jak najbardziej poprawne. Ja osobiście przy większych projektach korzystam z CommandMapa, wtedy jedną metodą pobieram klasy z projektu, która rozszerzają klasę Command, i się nie musze martwić o to że mi nie zarejestruje komendy. W główniej mierze polecam użycie tego: https://github.com/TheMolkaPL/BukkitCommands - naprawdę, ułatwia zarządzanie komendami :P
anon82750602 | 2016-12-30 14:16:40 UTC | #16
PlayerCommandPreprocessEvent nie rejestruje nam komendy, co najwyżej będzie działała tylko u gracza, a co do commandMap - tak używa się tu refleksji, ale póki co siedzi to w Bukkicie nie NMS więc między wersjami powinno być kompatybilne.
koweq | 2017-01-03 07:51:06 UTC | #17
To… Mogę się wreszcie dowiedzieć jak zrobić 2 i więcej komend?
Nieznajomy11 | 2017-01-03 10:57:56 UTC | #18
Teraz już tak :)
https://forum.lvlup.pro/t/pisanie-pluginow-do-minecraft-3-inne-klasy-argumenty-komendy-wysw-informacji-o-graczu/1619
koweq | 2017-01-03 11:33:38 UTC | #19
Zauważyłem wcześniej ale dzięki ;)
Kamilkime | 2019-04-22 20:36:12 UTC | #20
Poradnik stary, ale - może czas, żeby podzielił los moich z YT? Implementowanie CommandExecutor’a w głównej klasie pluginu, niepotrzebna rejestracja executor’a, używanie sysout do logowania wiadomości, sprawdzanie nazwy komendy w onCommand(), returnowanie false’a…
Ogólnie widzę ostatnio ludzi korzystających z tego poradnika, kończą podobnie jak po moich - nic naprawdę nie umieją, głównie kopiują kod z poradnika nie zastanawiając się zbytnio nad tym co robią. Niestety - śmiem twierdzić, że takie poradniki w polskiej społeczności MC są zgubne i robiąc je w większości wszyscy przyczyniamy się do pogłębiania problemu sprzedaży marnej jakości pluginów, nieswojej pracy, itd. :confused:
Byłbym za zniknięciem tego poradnika, albo odświeżeniem go w jakiś mądry sposób, chociaż nie wiem czy to drugie jest w ogóle w tej społeczności możliwe…
system | 2021-02-17 10:25:35 UTC | #21
Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.