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

[TuT] Encyklopedia bukkita - Zarządzaniem serwerem i developing.


Jaca777

Rekomendowane odpowiedzi

Opublikowano

.

















.
Spis treści:
1 - Tworzenie serwera.
1.1 - Początek.
1.1.1 - Uruchamianie serwera
1.1.2 - Server.properties
1.2 - Obsługa serwera
1.2.1 - Pluginy!
1.2.2 - Wgrywanie własnych światów na serwer.
1.2.3 - White list.
1.2.4 - Texture pack.
1.3 - Podstawowe problemy przy tworzeniu serwera.
1.3.1 - Bad login
1.3.2 - Inny program działa na tym samym porcie.
2 - Tworzenie pluginów używając API Bukkita.
2.1 - Podstawy.
2.1.1 - Początek.
2.1.2 - plugin.yml
2.1.3 - Komendy.



---1---
Tworzenie serwera


1.1 - Początek
1.1.1
Aby po raz pierwszy uruchomić ściągnij najnowszy craftbukkit stąd:

http://dl.bukkit.org/downloads/craftbukkit/

Z boku jest kilka przycisków, oto co one znaczą:
Recommended build - Wersja najbezpieczniejsza. Sprawdzona pod każdym kątem. Jedynym jej minusem jest to, że często pojawia się dużo później niż inne buildy. (Na przykład teraz, kiedy większość serwerów jest pod 1.6.2, to nadal buildem rekomendowanym jest wersja 1.5.2).
Beta build - Także bezpieczna wersja. Autorzy nie mają już nic do poprawy. Tą wersję polecam ściągać. (Chyba że wyszedł Recommended)
Development build - Wersja developerska. Autorzy wrzucają ją, aby ludzie testowali. Często są zbugowane - Ostatnio na przykład był w tej wersji bardzo poważny błąd z życiem. Żaden plugin nie mógł na nie wpływać. Nie polecam używania tej wersji.

Po ściągnięciu odpowiedniej wersji wrzucamy go do folderu o dowolnej nazwie. Zmieniamy nazwę ściągniętego pliku na 'craftbukkit'. Następnie tworzymy plik tekstowy (także o dowolnej nazwie) , otwieramy go dowolnym edytorem i wklejamy do niego:

java -Xms1024M -Xmx1024M -jar craftbukkit.jar
PAUSE


-Xms1024M Oznacza minimalną liczbę ramu przeznaczonego na serwer.
-Xmx1024M Oznacza maksymalną liczbę ramu przeznaczonego na serwer.
Obydwie liczby można zmieniać, pamiętając aby nie podać za dużo.

Co zrobić po wklejeniu? Zapisać plik jako "nazwa.bat" (nazwa oznacza twoją nazwe, może być ona dowolna). Po zapisaniu w folderze będą trzy pliki. Jeden .bat, drugi tekstowy, a trzeci to craftbukkit. Tekstowy można usunąć. Teraz sprawdź, czy masz craftbukkit i plik .bat w folderze. Uruchom plik .bat. Pojawi się konsola - nic nie rób. Czekaj aż do komunikatu "Done <czas>!". Jeśli będzie to wyglądać tak jak na tym screenie, oznacza że wszystko przebiegło dobrze.
1378228773-U873334.jpg

1.1.2 - Server properties
W pliku server.properties znajduje się podstawowa konfiguracja serwera. Jeśli chcesz się więcej dowiedzieć rozwiń spoiler.


Opisane zostaną tylko ważne konfiguracje. Aby otworzyć plik server.properties potrzebujesz programu notepad++. Download:

http://www.dobreprogramy.pl/Notepad,Program,Windows,12986.html

Jak już zainstalujemy notepad++, klikamy prawym na plik server.properties i wybieramy "Edit with notepad++"

Podstawowa zasada:
true - prawda
false - fałsz

#Minecraft server properties
#Tue Sep 03 18:24:54 CEST 2013
generator-settings=
allow-nether=true <---- Czy na Twoim serwerze bedzie dzialal nether?
level-name=world <---- Tutaj ustawiasz nazwe glownego swiatu. O tym pozniej.
enable-query=false
allow-flight=false
server-port=25565 <--- Ustawianie portu serwera. O tym pozniej.
level-type=DEFAULT
enable-rcon=false
force-gamemode=false
level-seed=
server-ip=
max-build-height=256 <--- Maksymalna wysokosc budowania. Wartosc wieksza niz domyslna (256) nic nie zmieni.
spawn-npcs=true
white-list=false <--- Czy ma byc uruchomiona white-lista? O tym tez pozniej.
spawn-animals=true <--- Czy na serwerze maja sie na spawnowac zwierzeta?
hardcore=false
snooper-enabled=true
texture-pack= <--- Ty mozesz ustawic texture pack.
online-mode=true <--- BARDZO WAZNE! Czy na serwer moga wchodzic gracze no-premium? Ustaw na false,jesli masz zamiar stworzyc piracki serwer.
pvp=true <--- Czy na twoim serwerze mozna sie bic.
difficulty=1 <--- Poziom trudnosci na serwerze. 0. Peacefull 1. Easy 2. Normal 3. Hard
gamemode=0 <--- Domyslny tryb gry. Gdy gracz pierwszy raz wejdzie ma taki.
max-players=20 <--- Ilosc slotow na serwerze.
spawn-monsters=true <--- Czy na serwerze maja sie pojawiac potwory.
generate-structures=true <--- Czy na serwerze maja sie generowac struktury typu lochy itd.
view-distance=10 <--- Maksymalny zasieg widzenia gracza.
spawn-protection=16 <--- Zasieg zakazu budowania, niszczenia w poblizu spawnu.
motd=A Minecraft Server <--- MOTD serwera - Opis wystepujacy w liscie serwerow.
[[/i][/i]

Pisze bez polskich znaków, ponieważ nowy code nie akceptuje ich.



1.2 - Obsługa serwera.

1.2.1 - Wgrywanie pluginów.

Pluginy najlepiej ściągać stąd:

http://dev.bukkit.org/bukkit-plugins/

[Polecam też autorskie pluginy użytkowników MPCForum oraz spis pluginów]

Plugin ściągnij na pulpit. Zobaczy czy napewno plugin jest formatu .jar (prawy -> właściwości -> Typ pliku). Może się zdarzyć że będzie to .zip/.rar. Wtedy otwórz to programem 7zip albo WinRAR i wypakuj znajdujące się w środku archiwa jar.
Następnie wrzuć te pluginy do folder 'plugins' znajdującego się w Twoim folderze serwera. Zrestartuj serwer. Można też wpisać komendę 'reload' w konsoli serwerowej, albo będąc graczem z operatorem (op).
Plik konfiguracyjny pluginów (jeśli taki w danym pluginie jest przewidziany) zostanie wygenerowany razem z folderem pluginu (do folderu plugins, folder nazywa się tak jak plugin).

1.2.2 - Wgrywanie własnych światów na serwer.

Folder światu należy wrzucić do głównego folderu serwera. Aby stał się on głównym światem (tam gdzie się gracze pojawiają po zalogowaniu) należy wyedytować 5 linijke pliku 'server.properties' (level-name) i wpisać za znakiem '=' nazwe nowego światu.

1.2.3 - White list.

White list pozwala ustalić kto ma prawo do wchodzenia na serwer. Aby ją uruchomić ustaw w server.properties linijkę 16 (white-list) na true. Dodawać graczy do white-listy możesz dopisując ich nicki do pliku tekstowego 'white-list'. (każdy nick musi być po enterze, nie mogą być obok siebie).

Uwaga! Można też używać komend do white-listy:
/whitelist on - włącza whiteliste.
/whitelist off - wyłącza whiteliste.
/whitelist add <nick> - dodaje <nick> do whitelisty.
/whitelist remove <nick> - usuwa <nick> z whitelisty.

1.2.4 - Texture pack

Wgranie texutre packu na serwer powoduje wyskakującą informację o możliwości jego automatycznego pobrania i zainstalowania nowemu graczowi.

Aby wgrać na swój serwer texture pack należy zuploadować go na drop boxa (tego procesu nie opiszę dokładnie, może w następnej wersji tego poradnika), a następnie dać do niego link w 20 linijce server.properties (texture-pack).

1.3 - Podstawowe problemy przy tworzeniu serwera.

1.3.1 - Bad login.

Ten problem występuje tylko kiedy masz pirata, lub przez przypadek w launcherze minecrafta oryginalnego uruchomiłeś opcję 'play offline'. Rozwiązanie? W 21 linijce server.properties zmień 'online-mode=true' na 'online-mode=false'.


"Zmieniłem, ale po uruchamianiu serwera znowu ustawia się na true!" Rozwiązanie wygląda tak:

Otwórz plik startujący serwer (.bat) notepadem++ i zmień:

java -Xmx1024M -jar craftbukkit.jar -o true
PAUSE

Na:

java -Xms1024M -Xmx1024M -jar craftbukkit.jar
PAUSE

Co trzeba zrobić? Usunąć końcówkę '-o true'. Tak jest to podane na oficjalnej stronie bukkita. Jeśli stosowałbyś się do tego poradnika nie miałbyś z tym problemu ;).

1.3.2 Inny program działa na tym samym porcie.

Kiedy wyskoczy Ci taki błąd:

09:47:51 [WARNING] **** FAILED TO BIND TO PORT!
09:47:51 [WARNING] The exception was: java.net.BindException: Cannot
ested address: JVM_Bind
09:47:51 [WARNING] Perhaps a server is already running on that port?

oznacza to że ustawiony port TCP jest zajęty. Jak to naprawić? Wejdź w server.properties i zmień 8 linię (server-port) na inną liczbę w przedziale od 1025 (włącznie) do 65535 (też włącznie).


---2---
Tworzenie pluginów używając API Bukkita.


2.1 Podstawy.


2.1.0 - Przygotowanie.

Aby rozpocząć naukę tworzenia pluginów przy pomocy API Bukkita potrzebujemy:

• Odpowiedniego IDE Javy(z ang. zintegrowanego środowiska programistycznego) - programu do pisania kodu. W moim przypadku jest to 'Eclipse'. Download:

http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/keplerr

• Specjalnego wydania bukkita dla programistów. Tam także jest kilka wersji. Ich definicje można znaleźć na początku 1 rozdziału. Download:

http://dl.bukkit.org/downloads/bukkit/

• Notepad++, oraz serwera do testowania Twoich pluginów.

2.1.1 - Początek.

Uwaga! Piszę ten poradnik dla osób które znają podstawy Javy!

Tworzymy nowy projekt. Nazywamy go jak chcemy. W tym projekcie tworzymy nowy pakiet (prawym na projekt -> new -> Package) i można go też nazwać dowolnie, ALE profesjonalnie pakiet powinien nazywać się tak: Załóżmy że posiadasz stronę internetową o adresie przykładowo www.mpcforum.pl. Nazwa pakietu wyglądać będzie wtedy tak: 'pl.mpcforum.nazwapluginu'. Jeśli nie posiadasz strony internetowej, powinieneś nazwać pakiet tak:
me.twójnick.nazwapluginu. Ja stworzę taki pakiet: me.jacadev.helloworld (nazwę pakietu pisze się małymi literami!). Następnie trzeba dodać API bukkita do projektu. Ściągnięty plik bukkit.jar wyciągamy na pulpit/do jakiegoś folderu. Ważne abyśmy wiedzieli gdzie jest. Wchodzimy do eclipse, klikam prawym przyciskiem myszy na projekt -> build path -> add external archives, i wybieramy ścieżkę do bukkit.jar. Wybieramy 'otwórz'.

Teraz opiszę jak napisać plugin podobny do słynnego Hello World. Będzie on odpowiadał "Hello World" po wpisaniu komendy.

W utworzonym pakiecie tworzymy nową klasę (nazwy klas zaczynamy wielką literą). Ja stworze klasę main. Teraz, aby ta klasa stała się główną klasą pluginu, musimy w niej rozszerzać klase JavaPlugin. Co to znaczy? Po nazwie i modyfikatorach dostępu klasy wpisujemy 'extends JavaPlugin'. Przykład:

public class Main extends JavaPlugin

Teraz utwórzmy metodę (przysłońmy), która będzie wywoływana przy włączeniu serwera. Nazywa się ona onEnable. Przykład:

public class Main extends JavaPlugin{

    @Override
    public void onEnable() {

    }

}

Co robi '@Override'? Poprawia błędy w nazwach przy dziedziczeniu/implementowaniu. Taka pomoc. Nie jest to konieczne, działać będzie identycznie bez adnotacji Override.

Teraz jak zrobić aby po załadowaniu pluginu wysyłało coś do konsoli? Tworzymy obiekt klasy Logger. Czyli wklejamy to:
private static final Logger log = Logger.getLogger("Minecraft"); jako zmienna składowa naszej klasy. Narazie nie musisz wiedzieć jak to działa. Jak to teraz wygląda:

public class Main extends JavaPlugin {
	private static final Logger log = Logger.getLogger("Minecraft");

	@Override
	public void onEnable() {

	}

}

Aby wpisać coś do konsoli używamy 'log.info("treść");' Czyli w konsoli pojawi się "Załadowano plugin Hello World!" kiedy wpiszemy to do metody onEnable:

log.info("Zaladowano plugin Hello World!");

Teraz to wygląda tak:

public class Main extends JavaPlugin {
	private static final Logger log = Logger.getLogger("Minecraft");

	@Override
	public void onEnable() {
            log.info("Zaladowano plugin Hello World!");
	}

}



2.1.2 - plugin.yml

Każdy plugin musi posiadać plik, w którym jest wskazana jego główna klasa, jakie komendy on dodaje itd. Jest to plik plugin.yml. Teraz napiszę jak go utworzyć i gdzie on ma być.

Klikamy prawym przyciskiem na znajdujące się pod projektem, z boku "src" -> new -> File. W polu "File name" wpisujemy 'plugin.yml'. Tworzymy ten plik i go otwieramy. Wpisujemy tam:

name:
main:
version:
author:
description:


Pola uzupełniamy tak:
Po name wpisujemy nazwę pluginu.
Po main wpisujemy pakiet i nazwę głównej klasy. Przykład: "me.jacadev.helloworld.Main" (bez cudzysłowu).
Po version wpisujemy wersję pluginu. Na przykład "1.0.0" (też bez cudzysłowu).
Po author wpisujemy swój nick.
Po description wpisujemy krótki opis pluginu.

Teraz plugin.yml wygląda przykładowo tak:

name: helloworld
main: me.jacadev.helloworld.Main
version: 1.0
author: JacaDev
description: Plugin dla MPCForum.

2.1.3 - Komendy.

Są 3 sposoby tworzenia komend. Na razie poznamy tylko jeden.

Ten sposób to stworzenie metody onCommand w klasie z głównej (z onEnable). Metoda ta wygląda tak:

public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) {
      return false;
}

Kod głównej klasy wygląda w tym momencie tak:

public class Main extends JavaPlugin {
	private static final Logger log = Logger.getLogger("Minecraft");

	@Override
	public void onEnable() {
           log.info("Zaladowano plugin Hello World!");
	}

	@Override
	public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) {
		return false;
	}
}


onCommand uruchamia się kiedy gracz wpisze komende. Aby zobaczyć jaką wpisał komende wykorzystujemy metodę "getName()" obiektu command. Tworzymy prostą konstrukcję warunkową, i sprawdzamy:

if(command.getName().equalsIgnoreCase("helloworld")){
			
}

Czyli - Jeżeli gracz wpisał /helloworld to metode .equalsIgnoreCase zwróci true (wykona blok kodu po konstrukcji warunkowej. Porównywać komendy można w 2 sposoby. Można wykorzystać .equlas("tekst") lub .equalsIgnoreCase("tekst"). Różnica jest prosta. W pierwszym przypadku zwraca uwagę na wielkość liter, w drugim ją ignoruje. Aby wysłać do gracza wiadomość wykorzystujemy "sender.sendMessage("treść");". Cała klasa główna wygląda teraz tak:

public class Main extends JavaPlugin {
	private static final Logger log = Logger.getLogger("Minecraft");

	@Override
	public void onEnable() {
           log.info("Zaladowano plugin Hello World!);
	}

	@Override
	public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) {
		if(command.getName().equalsIgnoreCase("helloworld")){
			sender.sendMessage("Hello World!");
			return true;
		}
		return false;
	}
}


Zauważyłeś "return true;" na końcu konstrukcji warunkowej? Informuje to o poprawnym zakończeniu wykonywania komendy. Jest to raczej konieczne :) Inaczej będzie brzydko zwracać treść komendy.

Teraz trzeba zarejestrować komende w onEnable - Do onEnable wpisujemy:

	getCommand("helloworld").setExecutor(this);

Teraz bardzo ważny moment! Trzeba dodać komende do plugin.yml!

Robimy to tak - Dodajemy do plugin.yml:

commands:
 helloworld:             
  description: Pierwsza komenda.
  usage: /<command>

Opiszę po kolei:
Linia "helloworld:" to nazwa komendy. Musi tak się zaczynać każdy opis komendy w plugin.yml. Czyli może być też np. "komenda:".
Linia "description" to opis komendy. Może być tam co chcesz.
Linia "usage" to opis, jak używać komendy. Można wpisać tam też "/helloworld", ale tak jak tu jest prościej, i trudniej popełnić błąd. To jak teraz wygląda mój plugin.yml:

name: helloworld
main: me.jacadev.helloworld.Main
version: 1.0
author: JacaDev
description: Plugin dla MPCForum.

commands:
 helloworld:             
  description: Pierwsza komenda.
  usage: /<command>

Jeśli zrobiłeś wszystko jak w tym poradniku, komenda powinna działać. Aby ją skompilować, kliknij prawym na projekt -> Export -> Java -> JAR file -> wpisujemy wszystko jak należy. Nic nie zmieniamy w opcjach, tylko zmieniamy "Select the export destination" na to, gdzie chcemy aby plik .jar się pojawił. Oto efekt po wrzuceniu na serwer:
1378311127-U873334.jpg










Do was: Mimo lekkiej utraty sensu tematu (usunięcia działu bukkit team) decyduje się go kontynuować :) Ale - Przyjmuje inny system niż reszta poradników. Jako, że bardzo dobrym poradnikiem odnośnie pisania pluginów jest np ten, to proszę was o pisanie postów z prośbami co opisać. Myślę że to będzie dobre uzupełnienie braków w tym dziale.

#27.10.2013 - Poprawiono poradnik.

708121422388637873334.png

Opublikowano

Temat został przeniesiony ;_; Początkowo był on w dziale "BUKKIT team" ale ten dział niestety został... usunięty. Powiedzcie - czy mam to jednak i tak kontynuować?

708121422388637873334.png

Opublikowano

No, dobra robota, wizualnie może nie wygląda to w 100 procentach dobrze ale poradnik przydatny. Czekam na dalsze instrukcje ;D

  • 1 miesiąc temu...
Opublikowano

Mimo lekkiej utraty sensu tematu decyduje się go kontynuować :) Ale - Przyjmuje inny system niż reszta poradników. Jako, że bardzo dobrym poradnikiem odnośnie pisania pluginów jest np ten, to proszę was o pisanie postów z prośbami co opisać. Myślę że to będzie dobre uzupełnienie braków w tym dziale.

708121422388637873334.png

Opublikowano

 

Skracam... Ale to znowu 20 linijek wywala... Ten nowy code <3

 

 

Heh, a ja nie moge otwierać spoilerów i co teraz ;O ?

"Zaciśniętą mam pięść dla tych, co w ciągłej walce,

Dla tych, którzy odeszli w górze dwa palce..."

~GrubSon

  • 2 tygodnie później...
Opublikowano

Bardzo dopracowany tut propsy za niego,lajk oczywiście poleciał

  • 2 tygodnie później...
Opublikowano

Bardzo dobrze opisany poradnik, wszystko jest dobrze skomponowane i opracowane. Nie brakuje także kolorków które bardzo lubie :-)

avatar_14518339374nlip.jpg


 


 


,,Vape is good, vape is my life"

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...