Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Jak zacząć Pisanie Pluginów do BUKKIT'a [Podstawy][#1]


Helyx

Rekomendowane odpowiedzi

Opublikowano

Cześć, chciałbyś nauczyć się pisania pluginów do bukkita?


W tym poradniku pokażę ci jak zacząć pisanie pluginów.


-------------


Dzisiaj przedstawię wam podstawę czyli włączenie się pluginów.


 


#1 - Tworzenie nowego projektu


 


Zacznijmy od stworzenia nowego projektu:


Klikamy prawy na package explorer


Następnie new Java Project


 

 


q2vuz3.jpg

 


Po kliknięciu musimy podać informacje o projekcie:


Project name: {nazwa_projektu_Wyświetlana_w_Eclipse}


"JRE"


Use an execution evironment JRE: - Wybieramy tutaj wersje Javy naszego pluginu, ja polecam 1.6.


 


6eqlpv.jpg


 


Następnie klikamy NEXT, i wybieramy zakładkę Librariers.


Potem klikamy "Add External JARs".


I wybieramy CraftBukkit'a i FINISH.


 


4tsf8j.jpg


 


 


 


#2 - Tworzymy pierwszą class'e, package, plugin.yml i metodę włączenia pluginu oraz wyłączenia.


 


 


Klikamy na nasz projekt i następnie na katalog "SRC" prawym i new class.


 


gpab6t.jpg


 


Następnie uzupełniamy odpowiednie pola, czyli:


Package: {me.DOMENA.nazwapluginu}


Name: {NazwaGłównejClass}


 


95it9s.jpg


 


Następnie klikamy FINISH i znowu klikamy na nasz projekt ale tym razem prawym klawiszem i new File , plugin.yml wpisujemy.


 


2az55k.jpg


8ifs8p.jpg


 


Uzupełniamy plugin.yml następującymi słowami:


 


name: {nazwapluginu}


version: {wersjapluginu}


main: {ścieżka do pluginu {czyli package + nazwa głównej class }}


 


3ho8uc.jpg


 


 


Wracamy do głównej class'y czyli Main.


obok Main dopisujemy extends JavaPlugin


i klikamy CTRL+SHIFT+O


 


q046z7.jpg


 


Na pole tekstu klikamy prawym i source i Override implement metods


 


y0rghn.jpg


 


I wybieramy onDisable i onEnable.


 


ldo99n.jpg


 


Usuwamy TODO i super.onEnable.


 


No to exportujemy nasz plugin:


 


tevpwi.jpg


2dn24t.jpg


7vqtm0.jpg


Gratuluję o to i napisany plugin do bukkita, co prawda nic nie robi, ale w najbliższych aktualizacjach dodam więcej! :)



 


 


Podkreślam, jest to mój PIERWSZY TUTORIAL.


Opublikowano

Trochę już takich poradników było ale ...

Mam nadzieję, że będziesz go aktualizował.

Like za prace :)

Bardzo ci dziękuje za miłe słowa :)

@topic

Jutro aktualizacja!

Dodam:

- Tworzenie pierwszej komendy

- Wysyłanie do gracza wiadomość po wpisaniu komendy

- Możliwe ,że jakiś Listener

Opublikowano

Dość sporo takich poradników można spotkać na tym forum, lecz początek twojego się niczym nie różni. Zobaczymy co z tego będzie, czy pokażesz coś innego niż wszystkie poradniki, czy też będziesz robił po kolei to samo co inni i zakończysz poradnik dokładnie w tym samym momencie ?

Na tę chwilę nie ma co oceniać, zobaczymy za tydzień-dwa, jakie postępy poradnik zrobi.

Chwilowo bez oceny. (?/10)

Opublikowano

Aktualnie nie widzę żadnego potencjału w tym poradniku... bo takich było już setki, a to będzie kolejny przestarzały poradnik, na przestarzałym bukkicie pod przestarzałą jave.

 

Na ss,ie widać że używasz javy 1.6 do projektu... która jest już tak stara, że używają ją tylko wtedy jak trzeba zachować wsparcie dla Apple, bo ich sprzet oczywiście jest też zawsze zacofany.

 

 

Takie moje aktualne zdanie.

 

PS; coraz więcej ludzi zaczyna używać literki B jako jeden z dysków :P

 

i nie

Package: {me.DOMENA.nazwapluginu}

tylko

{domena}.projekt (te "me")

bo to wygląda jak bym miał nazwać np me.com.gotofinal.autoin zamiast com.gotofinal.autoin.

 

PS: oczywiście używamy domeny którą posiadamy, jak żadnej nie macie, to popularne są 2 rozwiązania:

me.pseudonim.projekt

lub e-mailem, np

com.gmail.gotofinaldev.projekt

 

(oczywiście wszedzie zamiast projekt dajemy własną nazwę)

 

 

 

Miło że coś powstaje, ale zastanów się czy na pewno dasz sobie radę, i czy masz na to czas, by nie upadło po 2 kawałkach, lub nie posiadało masy okropnych błędów.

1438614356923701010629.png

 

Opublikowano

No fajny poradnik ale jak taki przeciętny użytkownik nie zna javy to co napisze? Nic. Może poleć jakieś strony do nauki javy. I napisz że najpierw trzeba nauczyć się javy, a dopiero potem bukkit API. Poza tym nie dajemy w libraries CraftBukkita tylko Bukkita.

PS: Kto w dzisiejszych czasach używa javy 1.6?!?!

Opublikowano

java 1.6?

dobrze sie czujesz XDD?

1.7 aktualnie najlepiej, wszystkie (znane) hostingi maja 1.7, a zmiany miedzy 1.6 a 1.7 sa ogromne

np. "diamentowe" operatory tzn zamiast 

private HashMap<JakisObiekt, JakisObiekt> hashMap = new HashMap<JakisObiekt, JakisObiekt>();

robi sie

private HashMap<JakisObiekt, JakisObiekt> hashMap = new HashMap<>();

2.

eclipse?

ludzie, naprawde wam sie ten addon 'lagi' podoba?

 

'Lagi' to addon do eclipse którego nie da się odinstalować

~ @nieznany1234567

3. paczki to tak jak gotofinal

4. dlugie te "rozdzialy"

dodaj w nastepnym punkcie jak zrobic loggera i tyle

 

@antyblezur

zobaczymy co pozniej z tego wyjdzie

Opublikowano

java 1.6?

dobrze sie czujesz XDD?

1.7 aktualnie najlepiej, wszystkie (znane) hostingi maja 1.7, a zmiany miedzy 1.6 a 1.7 sa ogromne

np. "diamentowe" operatory tzn zamiast 

private HashMap<JakisObiekt, JakisObiekt> hashMap = new HashMap<JakisObiekt, JakisObiekt>();
robi sie

private HashMap<JakisObiekt, JakisObiekt> hashMap = new HashMap<>();
2.

eclipse?

ludzie, naprawde wam sie ten addon 'lagi' podoba?

~ @nieznany1234567

3. paczki to tak jak gotofinal

4. dlugie te "rozdzialy"

dodaj w nastepnym punkcie jak zrobic loggera i tyle

 

@antyblezur

zobaczymy co pozniej z tego wyjdzie

 

wymieniłeś chyba najmniej ważną zmianę w 7 xD

 

Te z ciekawszych:

try-with-resources, czyli zmiast:

InputStream in;
try
{
  in = new FileInputStream("costam.txt"); // jakis przykladowy input
  // kod dotyczący in
} 
catch (IOException e)
{
  // wyjątek.
} 
finally
{
  if (in != null)
  {
    in.close();
  }
}

mozna dać:

try (final InputStream in = new FileInputStream("costam.txt"))
{
  // robisz co chcesz z in.
} catch (IOException e)
{
  // wyjątek
}

i gotowe, in zostanie zamknięte samo, niezależnie od napotkanych problemów, dotyczy to wszystkiego co implementuje interfejs java.lang.AutoCloseable

 

Dodatkowe zabawki od wielowątkowości, w klasycznej zabawie z bukkitem sie raczej nie przyda, więc zostawie bez opisu.

 

 

można używać stringów w switch-case

switch(cmd.getName())
{
  case "ban":
  break;
  case "kick":
  break;
  default:
  break;
}

można robic kilka exceptions w jednym Catch catch(RuntimeException | IOException | MyException e)

 

Lepsze wsparcie generic types.

 

 

Ogólnie dość sporo, to tylko kawałek :D

A do tego piękne nowe rzeczy w javie 8...

1438614356923701010629.png

 

Opublikowano

java 1.6?

dobrze sie czujesz XDD?

1.7 aktualnie najlepiej, wszystkie (znane) hostingi maja 1.7, a zmiany miedzy 1.6 a 1.7 sa ogromne

np. "diamentowe" operatory tzn zamiast

private HashMap<JakisObiekt, JakisObiekt> hashMap = new HashMap<JakisObiekt, JakisObiekt>();
robi sie
private HashMap<JakisObiekt, JakisObiekt> hashMap = new HashMap<>();
2.

eclipse?

ludzie, naprawde wam sie ten addon 'lagi' podoba?

~ @nieznany1234567

3. paczki to tak jak gotofinal

4. dlugie te "rozdzialy"

dodaj w nastepnym punkcie jak zrobic loggera i tyle

 

@antyblezur

zobaczymy co pozniej z tego wyjdzie

Co do diamentowych operatorow to sie nie zgodze

 

Dobre ide samo wypelnia zawartosc po wpisaniu HashMap i kliknieciu enter (bynajmniej u mnie tak jest)

 

Jak masz wiecej argumentow czemu uzyc javy 1.7 zamiast 1.6 to mozesz mi napisac ;)

 

 

Zeby nie bylo to ja korzystam z jdk 8 kompiliujac pod 7 :D

 

 

A i jeszcze jak cos to ja czytalem co wprowadzili ale tu chodzi mi glownie o bukkita

 

A czy wiecie ze java 9 w drodze i jakies tam buildy pobrac bylo mozna? xD

Opublikowano

Co do diamentowych operatorow to sie nie zgodze Dobre ide samo wypelnia zawartosc po wpisaniu HashMap i kliknieciu enter (bynajmniej u mnie tak jest) Jak masz wiecej argumentow czemu uzyc javy 1.7 zamiast 1.6 to mozesz mi napisac ;) Zeby nie bylo to ja korzystam z jdk 8 kompiliujac pod 7 :D A i jeszcze jak cos to ja czytalem co wprowadzili ale tu chodzi mi glownie o bukkita A czy wiecie ze java 9 w drodze i jakies tam buildy pobrac bylo mozna? xD

pierwsze co mi przyszlo z tymi operatorami xD

tu masz wiecej

 

wymieniłeś chyba najmniej ważną zmianę w 7 xD

 

Te z ciekawszych:

try-with-resources, czyli zmiast:

InputStream in;
try
{
  in = new FileInputStream("costam.txt"); // jakis przykladowy input
  // kod dotyczący in
} 
catch (IOException e)
{
  // wyjątek.
} 
finally
{
  if (in != null)
  {
    in.close();
  }
}

mozna dać:

try (final InputStream in = new FileInputStream("costam.txt"))
{
  // robisz co chcesz z in.
} catch (IOException e)
{
  // wyjątek
}

i gotowe, in zostanie zamknięte samo, niezależnie od napotkanych problemów, dotyczy to wszystkiego co implementuje interfejs java.lang.AutoCloseable

 

Dodatkowe zabawki od wielowątkowości, w klasycznej zabawie z bukkitem sie raczej nie przyda, więc zostawie bez opisu.

 

 

można używać stringów w switch-case

switch(cmd.getName())
{
  case "ban":
  break;
  case "kick":
  break;
  default:
  break;
}

można robic kilka exceptions w jednym Catch catch(RuntimeException | IOException | MyException e)

 

Lepsze wsparcie generic types.

 

 

Ogólnie dość sporo, to tylko kawałek :D

A do tego piękne nowe rzeczy w javie 8...

Opublikowano

Co do diamentowych operatorow to sie nie zgodze Dobre ide samo wypelnia zawartosc po wpisaniu HashMap i kliknieciu enter (bynajmniej u mnie tak jest) Jak masz wiecej argumentow czemu uzyc javy 1.7 zamiast 1.6 to mozesz mi napisac ;) Zeby nie bylo to ja korzystam z jdk 8 kompiliujac pod 7 :D A i jeszcze jak cos to ja czytalem co wprowadzili ale tu chodzi mi glownie o bukkita A czy wiecie ze java 9 w drodze i jakies tam buildy pobrac bylo mozna? xD

ale diamentowe operatory ułatwiaja potem zmianę typu, bo nie musisz zmieniać w 2 miesjach :D

Ja tam raczej zachęcam do zmiany na jave 8.

 

Ale wracając do 1.7, to co pisałem wyżej + takie mniejsze dodatki

int i = 1_000_000 ( mozna uzywać _ )

int i = 0b0101011110 (binarnie można zapodać liczbę)

Lepsze API od plików ZIP

 

Masa uproszczeń do podstawowych operacji I/O

http://docs.oracle.com/javase/tutorial/essential/io/file.html

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html

 

tu cos wiecej o lepszycm wsparciu generic: http://docs.oracle.com/javase/7/docs/technotes/guides/language/type-inference-generic-instance-creation.html

 

Znalazłem też takie cuś: http://www.slideshare.net/boulderjug/55-things-in-java-7nawet dobrze pokazane

 

Reszta średnio juz związana z MC, to pominę

 

 

 

A java 8... tam wystraczą 2 słowa, zmian jest znacznie więcej, ale to są najpiekniejsze z nich:

Streamy i lambdy

Zamiast:

for (Player p:Bukkit.getOnlinePlayers())
{
    if (p.hasPermission("costam"))
    {
        Scoreboard s = p.getScoreboard();
        if (s != null)
        {
            s.clear(); // tak wiem nie ma takiej metody, ale to dla przykładu :P
        }
    }
}
to mozna dać:

 Bukkit.getOnlinePlayers().stream().filter(p -> p.hasPermission("costam")).map(Player::getScoreboard).filter(s -> s!= null).forEach(Scoreboard::clear);
każda kolekcja ma metody stream i parallelStream, te drugie samo dzieli zadania na wątki, czyli automatycznie robi dane akcje wielo-wątkowe (niestety w samym bukkcie trudno znaleźć zastosowania bo bukkit niezbyt wspiera wielo-wątkowość, ale już we własnym kodzie w pluginie spokojnie można znaleźć setki zastosowań)

 

I java 8 jeszcze spranwiej sobie radzi z generic types, np diamond operator częściej działa (bo w 7 da się znaleźć kilka miejsc gdzie nie da rady i trzeba wpisać)

 

Do tego metody domyslne w interfejsach, nowości od wielowątkowości których już mi się opisywać nie chce, i jedna z ciekawszych zmian, ale bezużyteczna w pluginach -> JavaFX

1438614356923701010629.png

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...