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

W jaki sposób napisać swój własny, autorski silnik Minecraft?


Rekomendowane odpowiedzi

Opublikowano

Witam

Jakiś czas temu zacząłem się uczyć javy opanowałem pisanie pluginów w miarę. Chciałbym teraz zaczerpnąć informacji o tym jak napisać swój własny silnik do mc. Jednak nic nie mogę znaleźć. Wiem że to jest trudne itp. Ale chciałbym zobaczyć jaką funkcję pełnią silniki w mc. Właśnie poprzez próbę napisanie go. Tylko jak zacząć. Czy taki silnik tworzy się na podstawie defaultowej wersji serwera którą dodaje do projektu. Czy od podstaw? Gdzie dowiedzieć się jakie mam do dyspozycji klasy itp. Podczas pisanie pluginów wszystkie komponenty importuje z bukkita. Więc chciałbym poznać jak taki silnik napisać.

Proszę o pomoc.

Opublikowano

"...opanowałem pisanie pluginów w miarę..." - w takim razie nawet nie próbuj.

gdybyś jednak uparcie chciał napisać własny silnik, na twoim miejscu zacząłbym od przejrzenia source vanilla i craftbukkita

Opublikowano

Jestem uparty :)

Od craftbukkita przeglądałem. Ale nwm jak zacząć pisanie. Na pewno na podstawie domyślnego serwera.Ale skąd mogę się dowiedzieć jakie ten domyślny serwer posiada klasy i co one robią. Prosił bym o jakiś wstęp jak zacząć.

Wiem ze to trudne ale w miarę zdobywania wiedzy bym coś dopisywał. A przecież najlepiej się uczyć na przykładach. Dlatego chciałbym spróbować napisać swój silnik. Zapał mam tylko nwm skąd informacje wziąć do tego jak zacząć itp.

Opublikowano

Ale idk jednego.

Nie wiesz jak ale chcesz napisać?

 

To tak jakbyś powiedział, że chcesz mówić po angielsku ale nie potrafisz?

Skoro liznąłeś tylko i wyłącznie pisania pluginów i od razu pchasz się na silnik to skończy się to tylko tym, że nawet nie odpali ;-;.

 

Możesz się pobawić w edycję kodu z jakiegoś gotowego silnika przykład:

https://github.com/PaperMC/Paper-1.7

Mam nadzieję, że wiesz jak pobrać repo xD?

784091427630431250239.png

Regulamin sygnatur

Opublikowano

Ale idk jednego.

Nie wiesz jak ale chcesz napisać?

 

To tak jakbyś powiedział, że chcesz mówić po angielsku ale nie potrafisz?

Skoro liznąłeś tylko i wyłącznie pisania pluginów i od razu pchasz się na silnik to skończy się to tylko tym, że nawet nie odpali ;-;.

 

Możesz się pobawić w edycję kodu z jakiegoś gotowego silnika przykład:

https://github.com/PaperMC/Paper-1.7

Mam nadzieję, że wiesz jak pobrać repo xD?

ee tam, też tak zaczynałem pisac diorite :D może z tą różnicą że jednak pisząc pluginy poznałem całkiem sporo NMS i sie orietnowałem jak działa sporo rzeczy.

 

 

Witam

Jakiś czas temu zacząłem się uczyć javy opanowałem pisanie pluginów w miarę. Chciałbym teraz zaczerpnąć informacji o tym jak napisać swój własny silnik do mc. Jednak nic nie mogę znaleźć. Wiem że to jest trudne itp. Ale chciałbym zobaczyć jaką funkcję pełnią silniki w mc. Właśnie poprzez próbę napisanie go. Tylko jak zacząć. Czy taki silnik tworzy się na podstawie defaultowej wersji serwera którą dodaje do projektu. Czy od podstaw? Gdzie dowiedzieć się jakie mam do dyspozycji klasy itp. Podczas pisanie pluginów wszystkie komponenty importuje z bukkita. Więc chciałbym poznać jak taki silnik napisać.

Proszę o pomoc.

Jak chcesz pisac od 0... to wiki.vg na pewno Ci się przyda, ale ogólnie masakryczne ilości roboty, szczególnie jak chcesz zrobić to z API, jak bez API - byłe działało, to już lepiej, ale i tak masa roboty.

 

A tak to może zamiast tworzyć nowy, jak serio masz jakieś znajomości javy, podczep się pod jakiś projekt, np pod diorite mojego autorstwa :P

możesz tez zrobić kolejnego forka spgiota/paperspigota/tacospigota bla bla bla.

 

A jak chcesz zrobić cos aka własnego bukkita -> w oparciu o NMS, to jeszcze większa masakra bo albo musisz polegać na gotowych mappingach udostępnianych przez np MCP czy używac tego co spigot -> wtedy po aktualizacji mc jestes od nich uzależniony, dopiero jak oni zaktualizują to ty możesz aktualizować swoje.

Albo musisz czysty serwer mc zdekompilować i stworzyć własne mappingi, warto stworzyc do tego jakiś własny program który będzie ci zapisywał twoje nazwy klas.

 

I jak już masz normlane nazwy klas, to te klasy które chcesz edytować... dekompilujesz i edytujesz. Reszte zostawiasz bo to tylko więcej roboty

1438614356923701010629.png

 

Opublikowano

... Opanuj pisanie pluginów w stopniu zaawansowaanym a potem załóż ten temat jeszcze raz!

server-icon.png  EndiMC.pl - serwer minecraft 1.21.5 |Survival| |Gildie| |Slimefun| |Terralith|

  Serwer aktywny od ponad 8 lat

  Dołącz już dzisiaj do naszej społeczności!

 

Opublikowano

... Opanuj pisanie pluginów w stopniu zaawansowaanym a potem załóż ten temat jeszcze raz!

On chce się nauczyć pisania silnika i mówi jak ma to zrobić, czego w tym nie zrozumiałeś? Czytaj ze zrozumieniem.

To że może mu się nie uda bo to trudne to już jego problem ;)

 

@Zaspa a ci życzę powodzenia :)

Opublikowano

Dziękuje wszystkim za pomoc i cenne porady.

Myślałem że silniki pisze się zaczynając od czystej wersji serwera. A nie całkowicie od 0. wiec Mmiłe zaskoczenie. Ale to w przyszłości może spróbuję od 0.

Na razie chciałbym spróbować tak jak kolega napisał:

 

 

Albo musisz czysty serwer mc zdekompilować i stworzyć własne mappingi, warto stworzyc do tego jakiś własny program który będzie ci zapisywał twoje nazwy klas.

Czyli pobieram czysty serwer. I go przerabiam na swój silnik. 

Nie rozumiem o co chodzi z klasami. 

 

Chociaż w sumie może lepiej było by spróbować od 0 wtedy bym miał kontrole nad wszystkim. Bo np. teraz nwm po co tyle klas napchali w tej czystej wersji mc i co one robią. żadnego nie ma tam schematu posortowania itp. Nazwy wzięte z du**

Nwm muszę pomyśleć i zebrać informację.

Mówiłeś że trzeba zdekompilować. Czy miałeś na myśli program jd-gui tylko że w nim są krzaczki :(

 

Spróbować nikt mi nie zabroni. Uda się to się uda nie to nie. Nie mam dużych nadziei.

Opublikowano

Dziękuje wszystkim za pomoc i cenne porady.

Myślałem że silniki pisze się zaczynając od czystej wersji serwera. A nie całkowicie od 0. wiec Mmiłe zaskoczenie. Ale to w przyszłości może spróbuję od 0.

Na razie chciałbym spróbować tak jak kolega napisał:

 

 

Albo musisz czysty serwer mc zdekompilować i stworzyć własne mappingi, warto stworzyc do tego jakiś własny program który będzie ci zapisywał twoje nazwy klas.

Czyli pobieram czysty serwer. I go przerabiam na swój silnik. 

Nie rozumiem o co chodzi z klasami. 

 

Chociaż w sumie może lepiej było by spróbować od 0 wtedy bym miał kontrole nad wszystkim. Bo np. teraz nwm po co tyle klas napchali w tej czystej wersji mc i co one robią. żadnego nie ma tam schematu posortowania itp. Nazwy wzięte z du**

Nwm muszę pomyśleć i zebrać informację.

Mówiłeś że trzeba zdekompilować. Czy miałeś na myśli program jd-gui tylko że w nim są krzaczki :(

 

Spróbować nikt mi nie zabroni. Uda się to się uda nie to nie. Nie mam dużych nadziei.

nawy nie są z dupy, .jar jest zaciemniony, przepuszczony przez program który znacząco zmienił cały kod, zmieniajac tak nazwy metod itd.

Do dekompilowania mc przyjeło się używać FernFlower-a, tylko musisz pokombinowac z argumentami by ci dało w miarę sensowny kod.

 

Ale jak już pisałem, potrzebujesz stworzyć mappingi, czyli jak masz klasę "xyz" musisz znaleźć dla niej sensową nazwę np "CommandTp", nie warto tego robić po dekompilacji, bo to trudniejsze i robi masakrę i dużo błędów.

Najwygodniej mieć program który umożliwi ci zmianę tego w real-time jak w jd-gui na skompliowanym kodzie - nie znam gotowca. KONIECZNIE taki progam musi potem zapisać co zmieniał i umożliwiać automatyczne konwertowania oryginalnego jara, na takiego twojego już z zmienionymi nazwami, koniecznie też powinieneś dodać możiwośc zmieniania widoczności pól, bo to sie bardzo przydaje

Np zwykly plik txt:

Classes:
ab -> net.minectaft.server.GamemodeCommand

Methods:
boolean net.minectaft.server.GamemodeCommand.a(Z], java.lang.Object) -> update

Fields:
java.lang.String net.minectaft.server.PlayerEntity.a -> name
public:
java.lang.String net.minecraft.server.PlayerEntity.getName()

(przyładowo jak możesz zapisywać, na pewno warto zapisywać całe oznaczenie fieldów/metod, czyli dla fielda, nazwę i typ, dla metody, zwracana wartość, nazwa i parametry, ułatwi to aktualizowanie mappingów)

 

 

A sama dekompilacja nie jest taka trudna jak się pisało trochę pluginów, podstawa to nie wahać się ze zmianami nazw, szczególnie klas, szukasz jakiś charakterystycznych klas, np komendy łatwo rozpoznać, bo często mają w sobie stirngi z nazwami, niektóre moby podobnie. Do tego dość łatwo znaleźć chunki, od chunków łatwo ogarnąć co jest światem itd itp, jak znasz trochę NMS z spigota, to w 2 dni dasz radę zdekompilować nazwy klass i kilka metod, wszystkich metod nie musisz, ale klasy warto.

A potem tylko w pełni dekompilujesz te klasy które chcesz edytować:

Cały kod dajesz jako dependa, dekompilujesz wybraną klasę, np EntityPlayer, poprawiasz błędy dekompilacji jeśli jakieś są, dodajesz własne zmiany, i kompilujesz tak by twoje nowe EntityPlayer podmieniło stare.

Możesz też zrobić taki system paczy jak ma spigot, znacznie ułatwi to aktualizacje silnika.

 

Pisanie od zera jest prostsze "technologicznie" od używana NMS, bo nie trzeba się męczyć tak bardzo z ich kodem, jednak jest to znacznie więcej roboty i często wymaga znacznie większych umiejętności, by napisać dobre AI, fizykę gry itd.

1438614356923701010629.png

 

Opublikowano

Dziękuje za porady. 

Wiem na czym stoję, że długa droga przede mną. 

W wolnym czasie będę próbował i uczył się o co chodzi z tymi NMS. Myślę że łatwiej będzie ogarnąć od podstaw niż z czystego serwera. Oczywiście posiłkując się czystym serwerem. Dobrze by było mieć już taki kod na pusty serwer który można postawić. i wejść na niego. Taki aby kod był tylko do wejścia na niego. bez dodatkowych rzeczy. I dopiero go rozbudowywać. 

Dziękuje za pomocne rady. 

 

Hmm takie pytanie skoro silnik można stworzyć od zera to jakby pisać własną grę? Potem tylko lanchera zmodyfikować i własna gra gotowa :)

 GotoFinal W skrócie to mój serwer ma odbierać pakiety danych od każdego gracza który się połączy modyfikować je i wysyłać wszystkim.? Razem z mapa czyli dochodzi obsługa mapy chunków itp.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...