Pisanie pluginów do Minecraft - #2 Pierwsza komenda

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)

#reaktywacja

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.